O PSL-PI tem por objetivo incentivar o uso e a produção de software livre no Piauí como política de combate à exclusão digital. Acreditamos que a distribuição de conhecimentos proporcionada pelo Open Source/Software Livre tornará nossa sociedade mais justa e próspera, exatamente por dar a todos as mesmas condições de conhecimento e desenvolvimento.
Software Livre é uma grande oportunidade de construirmos uma sociedade produtora de ciência, independente e efetivamente competitiva. Estamos reconstruindo as bases da nossa sociedade, não mais calcados nos braços do Estado, mas sim, amparados pela iniciativa própria, pela auto-determinação. Nós somos capazes de nos auto-governar. Somos capazes de construir uma sociedade efetivamente Livre. Esta é a essência do PSL-PI.
O PSL-PI é formado pela articulação de indivíduos que atuam em instituições publicas e privadas, grupos de usuários e desenvolvedores de software livre, empresas, governos ou ONGs, e demais setores da sociedade. O importante é a consciência e disposição para propagar o uso de software livre e a cultura colaborativa nas diferentes esferas da sociedade.
AJ Alves: Instalando o GTest no Ubuntu, Framework de testes para C++
11 de Outubro de 2012, 0:00 - sem comentários aindaEntão, veja como instalar esta incrível ferramenta no Ubuntu e começar a fazer seus testes.
1º Passo – É simples, basta instalar (no Terminal):
apt-get install libgtest-dev
Agora, um pequeno detalhe! Por razão de uma pequena regra da definição da linguagem C++ “Definição Única de Classes” o framework não é compilado na hora da instalação, então, você deve fazer isso você mesmo.
2º Passo – Compilar e Localizar (no Terminal):
# Ir para a sua homecd ~# Compilar a bibliotecag++ -I /usr/include/gtest -I /usr/src/gtest/ -c /usr/src/gtest/src/gtest-all.cc# Arquivar o arquivo gerado como uma biblioteca estáticaar -rv libgtest.a gtest-all.o#Mover para um local onde o linker do GCC possa encontrarmv libgtest.a /usr/lib/
Ok, agora está tudo ok para uso, veja este exemplo:
/*Definição da classe Pessoa: Pessoa.h*/#ifndef PESSOA_H#define PESSOA_H #include "string"using std::string; class Pessoa{ public: Pessoa(); void setNome(string nome); string getNome(); void setIdade(int idade); int getIdade(); private: string nome; int idade;};#endif
/*Implementação da classe Pessoa: Pessoa.cpp*/ #include "Pessoa.h" Pessoa::Pessoa(){}; void Pessoa::setNome(string nome){ this->nome = nome;} string Pessoa::getNome(){ return this->nome;} void Pessoa::setIdade(int idade){ this->idade = idade;} int Pessoa::getIdade(){ return this->idade;}
// Arquivo de testes: teste.cpp#include "Pessoa.h"#include "gtest/gtest.h"#include "string"using std::string; TEST(Pessoa, testarMetodosParaNome){ string nome = "AJ Alves"; Pessoa* pessoa = new Pessoa(); pessoa->setNome(nome); EXPECT_EQ(pessoa->getNome(), nome);} TEST(Pessoa, testarMetodosParaIdade){ int idade = 24; Pessoa* pessoa = new Pessoa(); pessoa->setIdade(idade); EXPECT_EQ(pessoa->getIdade(), idade);} int main(int argc, char* *argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();}
Para rodar este teste é simples, há apenas duas considerações a serem feitas:
1º – Caso o linker não encontre o GTeste adicione “/usr/lib/libgtest.a” no comando
2º – Sempre adicione a opção “-lpthread” no comando
# Makefileall: gcc -c ./*.cpp g++ ./teste.cpp Pessoa.o /usr/lib/libgtest.a -o teste.bin -fPIC -O2 -g -Wall -lpthread clean: rm *.o rm ./teste.bin
A saída será:
Para se aprofundar mais, guarde este link : Documentação
Aracele Torres: Uma sociedade digital livre – Parte 3
10 de Outubro de 2012, 0:00 - sem comentários aindaContinuando a nossa apresentação do texto A Free Digital Society – What Makes Digital Inclusion Good or Bad? de Richard Stallman, hoje publicamos a terceira parte da seqüência. Na primeira parte tivemos Stallman discutindo a questão da vigilância como uma das grandes ameaças de uma sociedade digital, você pode conferir tudo isso aqui. Na segunda, Stallman falou de mais dois tipos de ameaças: a censura e o formato de dados restrito. Esta segunda parte pode ser lida aqui.
Nesta terceira parte do texto apresentada hoje, o tema abordado por Richard Stallman será o software proprietário como uma grande ameaça à nossa liberdade na cultura digital. Stallman pontua algumas questões sobre como esse tipo de software exerce um controle sobre seus usuários e esconde recursos maliciosos.
Software que não é livre
Agora isso me leva à próxima ameaça que vem do software sobre qual os usuários não têm controle. Em outras palavras: software que não é livre, que é não “libre”. Neste ponto em particular o francês é mais claro que o inglês. A palavra “free” em inglês significa “libre” e “gratuit” (“livre” e “gratuito” em francês), mas o que quero dizer quando digo “free software” é “logiciel libre” (“software livre” em francês). Eu não quero dizer “gratuit”. Eu não estou falando sobre o preço. Preço é uma questão à parte, apenas um detalhe, porque isso não importa eticamente. Você sabe que se eu tiver uma cópia de um software e vendê-la por um ou cem euros, quem se importa? Por que alguém deveria achar que isso é bom ou ruim? Ou suponha que eu o dei para você “gratuitement” (“de graça” em francês)… Ainda assim, quem se importa? Mas se este software respeita a sua liberdade, isso é importante!
Então, o software livre é um software que respeita a liberdade dos usuários. O que isso significa? Em última análise, há apenas duas possibilidades com o software: ou os usuários controlam o software ou o software controla os usuários. Se os usuários têm certas liberdades essenciais, então, eles controlam o software, e essas liberdades são o critério para o software livre. Mas, se os usuários não têm plenamente as liberdades essenciais, o software controla os usuários. Mas alguém controla esse software e, através dele, tem poder sobre os usuários.
Assim, um software não livre é um instrumento para dar a alguém poder sobre um monte de outras pessoas e isso é poder injusto que ninguém nunca deveria ter. É por isso que software não livre (les logiciels privateurs, qui privent de la liberté), porque software proprietário é uma injustiça e não deveria existir, porque ele deixa os usuários sem liberdade.
Agora, o desenvolvedor que tem o controle do software muitas vezes se sente tentado a introduzir recursos maliciosos para explorar ainda mais ou abusar desses usuários. Ele sente uma tentação porque ele sabe que pode ir longe com isso: porque o seu software controla os usuários e os usuários não têm controle do software, se ele coloca um recurso malicioso, os usuários não podem corrigi-lo, ou seja, eles não podem remover este recurso malicioso.
Eu já tinha dito a vocês sobre dois tipos de recursos maliciosos: recursos de vigilância, tais como os que são encontrados no Windows, e no iPhone e Flash Player, e no Amazon “Swindle”. E há também recursos para restringir os usuários, que trabalham com formatos de dados secretos, e esses são encontrados no Windows, Macintosh, no iPhone, Flash Player, no Amazona “Swindle”, no Playstation 3 e muitos e muitos outros softwares.
O outro tipo de recurso malicioso é o backdoor. Isso quer dizer que o programa está recebendo comandos remotos e obedecendo-os, e esses comandos podem ser uma ameaça ao usuário. Sabemos de backdoors no Windows, no Iphone, no Amazon “Swindle”. O Amazon “Swindle” tem um backdoor que pode apagar remotamente livros. Sabemos isso por observação, porque a Amazon fez isso: em 2009 a Amazon remotamente apagou milhares de cópias de um livro particular. Essas eram cópias autorizadas, as pessoas tinham obtido-as diretamente da Amazon e, assim, a Amazon sabia exatamente onde estavam, que é como a Amazon sabia para onde enviar os comandos para apagar esses livros. Você sabe qual o livro a Amazon excluiu? 1984 de George Orwell. É um livro que todos devem ler, porque discute um estado totalitário que fez coisas, como deletar livros que ele não gosta. Todo mundo deveria lê-lo, mas não no Amazon “Swindle”.
De qualquer forma, recursos maliciosos estão presentes na maioria dos softwares não livres mais usados, mas eles são raros em software livre, porque com o software livre os usuários têm o controle: eles podem ler o código-fonte e podem mudá-lo. Então, se houvesse um recurso malicioso, alguém mais cedo ou mais tarde iria detectá-lo e corrigi-lo. Isso significa que alguém que está considerando a introdução de um recurso malicioso não acha tão tentador, porque ele sabe que pode escapar por um tempo, mas alguém vai detectá-lo, corrigi-lo, e todo mundo vai perder a confiança no autor do recurso. Não é tão tentador quando você sabe que você falhará. E é por isso que nós achamos que recursos maliciosos são raros em software livre, e comuns em software proprietário.
Aracele Torres: KDE celebra o Ada Lovelace Day com evento
5 de Outubro de 2012, 0:00 - sem comentários ainda
Todos os anos celebramos internacionalmente o Ada Lovelace Day. Essa data remete, antes de tudo, à grande precursora da programação Ada Byron, nascida na Inglaterra do século XIX. Ada, para quem ainda não conhece, era uma matemática autodidata responsável por criar o primeiro programa de computador já conhecido no mundo, algoritmos para cálculos usados na máquina analítica de Charles Babage. Ela, portanto, entrou para a história da computação como sendo a primeira programadora de computadores que se tem notícia.
Essa data além de servir para celebrar os feitos de Ada serve também para descobrir e incentivar outras Adas ao redor do mundo a se envolverem com a tecnologia e a ciência. Nesse ano, o Ada Lovelace Day acontecerá no dia 16 de outubro e o KDE resolveu celebrar essa data promovendo algumas atividades para integrar mais pessoas, em especial as mulheres, mas não só elas, à nossa comunidade. A ideia é promovermos alguns tutoriais via IRC ou Google Hangout sobre algumas ferramentas do KDE e sobre como se envolver com a comunidade.
Convide à todos: seus amigos e familiares, sua namorada e seu namorado para celebramos com a gente!
Confira abaixo a nossa programação:
-
An easy way to start in KDE: write a Plasmoid in QML – Ministrado por Camila.
-
KDE testing: how to become a tester – Ministrado por Myriam.
-
Ask your question about getting involved in KDE – Ministrado por Lydia e Frederik.
-
LaTeX with Kile – Ministrado por Melissa.
Os detalhes sobre o evento podem ser encontrados na nossa wiki: http://community.kde.org/AdaLovelaceDay/2012
AJ O. Alves: Como construir um pacote Node.JS
3 de Outubro de 2012, 0:00 - sem comentários aindaAlgumas vez fui questionado como se faz para construir um pacote em Javascript que posteriormente possa ser utilizado em um ou vários projetos com Node.JS igualmente os pacotes padrão do framework ou os que são instalados via NPM.
Bem, é muito simples. Primeiro devemos conhecer a afirmativa de exportação do Javascript, o “exports”, ele serve para prover variáveis, funções ou objetos de um script Javascript para outro, exemplo:
// Arquivo circulo.jsvar PI = Math.PI; exports.nome = "circulo"; exports.area = function (raio) { return PI * raio * raio;}; exports.circunferencia = function (raio) { return 2 * PI * raio;};
Assim, nosso pacote “circulo.js”, já pode ser importado para qualquer projeto que precisarmos dele, utilizando a afirmativa “require”, exemplo:
// Aquivo teste.jsvar circulo = require('./circulo.js'); console.log('Nome do pacote: ' + circulo.nome);console.log('A área de um circulo de raio 4 é: ' + circulo.area(4));console.log('A circunferência de um circulo de raio 4 é: ' + circulo.circunferencia(4));
Muito bem, como mencionado antes, com a afirmativa “exports” podemos prover variáveis, funções ou objetos de um script a outro. Vamos então construir um exemplo mais avançado, com um Object Map (“Object Map, é o nome mais adequado para se referir a Objetos no Javascript”), exemplo:
// Arquivo elementos.jsvar circulo = require('./circulo.js'); // Elemento Caixaexports.Caixa = function(largura, comprimento, altura){ this.largura = largura || 0;; this.comprimento = comprimento || 0; this.altura = altura || 0; this.calcularArea = function(){ return ((this.largura * this.comprimento) * 2) + ((this.largura * this.altura) * 2) + ((this.comprimento * this.altura) * 2); }} // Elemento Coneexports.Cone = function(raio, altura){ this.raio = raio || 0;; this.altura = altura || 0; this.calcularArea = function(){ var geratiz = Math.pow(Math.pow(raio, 2) + Math.pow(altura, 2), 0.5); return circulo.area(this.raio) + (Math.PI * this.raio * geratiz); }}
Alterando o arquivo “teste.js” para:
// Aquivo teste.jsvar circulo = require('./circulo.js');var elemento = require('./elementos.js'); function exibir(){ this.escrever = function(mensagem){ console.log(mensagem); }} exb = new exibir(); caixa = new elemento.Caixa(2, 2, 2);cone = new elemento.Cone(3, 5); exb.escrever('Nome do pacote: ' + circulo.nome);exb.escrever('A área de um circulo de raio 4 é: ' + circulo.area(4));exb.escrever('A área da caixa é: ' + caixa.calcularArea());exb.escrever('A área do cone é: ' + cone.calcularArea());
Note que agora estamos importando também, objetos, então, desta forma você pode construir seus pacotes e reutilizar eles em seus códigos, e se você acha ele realmente útil, vá no site oficial do NPM crie seu cadastro e compartilhe seu pacote com a comunidade.
AJ Alves: Como construir um pacote Node.JS
3 de Outubro de 2012, 0:00 - sem comentários aindaAlgumas vez fui questionado como se faz para construir um pacote em Javascript que posteriormente possa ser utilizado em um ou vários projetos com Node.JS igualmente os pacotes padrão do framework ou os que são instalados via NPM.
Bem, é muito simples. Primeiro devemos conhecer a afirmativa de exportação do Javascript, o “exports”, ele serve para prover variáveis, funções ou objetos de um script Javascript para outro, exemplo:
// Arquivo circulo.jsvar PI = Math.PI; exports.nome = "circulo"; exports.area = function (raio) { return PI * raio * raio;}; exports.circunferencia = function (raio) { return 2 * PI * raio;};
Assim, nosso pacote “circulo.js”, já pode ser importado para qualquer projeto que precisarmos dele, utilizando a afirmativa “require”, exemplo:
// Aquivo teste.jsvar circulo = require('./circulo.js'); console.log('Nome do pacote: ' + circulo.nome);console.log('A área de um circulo de raio 4 é: ' + circulo.area(4));console.log('A circunferência de um circulo de raio 4 é: ' + circulo.circunferencia(4));
Muito bem, como mencionado antes, com a afirmativa “exports” podemos prover variáveis, funções ou objetos de um script a outro. Vamos então construir um exemplo mais avançado, com um Object Map (“Object Map, é o nome mais adequado para se referir a Objetos no Javascript”), exemplo:
// Arquivo elementos.jsvar circulo = require('./circulo.js'); // Elemento Caixaexports.Caixa = function(largura, comprimento, altura){ this.largura = largura || 0;; this.comprimento = comprimento || 0; this.altura = altura || 0; this.calcularArea = function(){ return ((this.largura * this.comprimento) * 2) + ((this.largura * this.altura) * 2) + ((this.comprimento * this.altura) * 2); }} // Elemento Coneexports.Cone = function(raio, altura){ this.raio = raio || 0;; this.altura = altura || 0; this.calcularArea = function(){ var geratiz = Math.pow(Math.pow(raio, 2) + Math.pow(altura, 2), 0.5); return circulo.area(this.raio) + (Math.PI * this.raio * geratiz); }}
Alterando o arquivo “teste.js” para:
// Aquivo teste.jsvar circulo = require('./circulo.js');var elemento = require('./elementos.js'); function exibir(){ this.escrever = function(mensagem){ console.log(mensagem); }} exb = new exibir(); caixa = new elemento.Caixa(2, 2, 2);cone = new elemento.Cone(3, 5); exb.escrever('Nome do pacote: ' + circulo.nome);exb.escrever('A área de um circulo de raio 4 é: ' + circulo.area(4));exb.escrever('A área da caixa é: ' + caixa.calcularArea());exb.escrever('A área do cone é: ' + cone.calcularArea());
Note que agora estamos importando também, objetos, então, desta forma você pode construir seus pacotes e reutilizar eles em seus códigos, e se você acha ele realmente útil, vá no site oficial do NPM crie seu cadastro e compartilhe seu pacote com a comunidade.