JoeFreire Sobre T.I.

Experiências sobre a vida na Tecnologia da Informação

Como postar documentos no Facebook

Docs.com ou Docs for Facebook é um serviço criado pela Microsoft lançado na Facebook’s F8 conference, voltado especialmente para usuários do Facebook e um serviço que vem para brigar com o google docs, que disponibiliza a edição online de documentos de texto, planilhas e apresentação de slides e PDF, bem como enviar arquivos em grandes quantidade, realizar pesquisas por documentos e compartilhamento de modelos de formatação.

Para começar a utilizar o Docs for Facebook é fácil. A primeira coisa a se fazer é acessar o docs.com e clicar em Sign In, utilizando uma conta do Facebook

O próximo passo vai ser logar no Facebook, se você já estiver logado essa opção não irá aparecer

Você será solicitado a dar permissão para o aplicativo utilizar seus dados básicos do Facebook, como para que ele saiba quem são seus amigos e a quais grupos você pertence, o aplicativo lida muito bem com as questões de permissões.

Para enviar ou criar um documento basta acessar o menu Add a Doc e fazer o Upload a Doc ou Create a New Document 

E escolher o Arquivo sendo os tipos suportados Word, Excel, PowerPoint ou PDF,  incluir as TAGS para busca de documentos e escolher as permissões de quem pode ver aqueles arquivos e quem pode editar junto com você (excluindo os arquivos PDFs que só podem ser lidos).

Depois de enviado ou criado o documento você tem várias opções como fazer Download do arquivo original, abrir no Word (necessário silver light), Traduzir e ainda compartilhar o arquivo por um link que aparece no final do documento

Achei uma ótima opção o Docs.com para compartilhar arquivos principalmente com colegas de faculdade pelo Facebook , já que hoje o Facebook e praticamente uma extensão da sala de aula. Nessa o Google perdeu para Microsoft

Veja o Vídeo Oficial do Docs.com

Postando Código Fonte no WordPress

Postar códigos fonte no WordPress é mais fácil do que parece, basta utilizar syntax highlighting, que faz com que seu código seja mostrado de uma maneira mais acessível.
Sem a syntax highlighting seu código aparece assim:

<?php
class HelloWorld{
private $mensagem;
public function  __construct($mensage){
$this->mensagem = $mensage;
}
public function show() {
print(“mensagem: “.$this->mensagem);
}
};
$obj = new HelloWorld(“Ola mundo”);
$obj->show();
?>

Utilizando syntax highlighting fica assim

<?php
class HelloWorld{
private $mensagem;
public function  __construct($mensage){
$this->mensagem = $mensage;
}
public function show() {
print("mensagem: ".$this->mensagem);
}
};
$obj = new HelloWorld("Ola mundo");
$obj->show();
?>
 

As tags para utilizar são:
[ sourcecode language=”Sua Linguagem”]
Seu Código Aqui
[ /sourcecode]

Os parâmetros suportados são:

  • actionscript3
  • bash
  • csharp
  • cpp
  • css
  • delphi
  • diff
  • groovy
  • javascript
  • java
  • javafx
  • perl
  • php
  • text
  • powershell
  • python
  • ruby
  • scala
  • sql
  • vb
  • xml

Para mais informações http://en.support.wordpress.com/code/posting-source-code/

Programação Orientada a Aspectos


Programação Orientada a Aspectos

Em ciência da computação, programação orientada a aspectos ou POA, é um paradigma de programação de computadores que permite aos desenvolvedores de software separar e organizar o código de acordo com a sua importância para a aplicação (separation of concerns). Todo o programa escrito no paradigma orientado a objetos possui código que é alheio a implementação do comportamento do objeto. Este código é todo aquele utilizado para implementar funcionalidades secundárias e que encontra-se espalhado por toda a aplicação (crosscutting concern). A POA permite que esse código seja encapsulado e modularizado.

Os paradigmas de programação mais antigos, como a programação procedural e programação orientada a objeto, implementam a separação do código, através de entidades únicas. Por exemplo, a funcionalidade de log de dados, numa linguagem orientada a objetos, é implementada em uma única classe, que é referenciada em todos os pontos onde é necessário fazer log de dados. Como praticamente todo método necessita que alguns dados sejam registrados em log, as chamadas a essa classe são espalhadas por toda a aplicação.

Tipicamente uma implementação da POA busca encapsular essas chamadas através de uma nova construção chamada de “aspecto”. Um aspecto pode alterar o comportamento de um código (a parte do programa não orientada a aspectos) pela aplicação de um comportamento adicional, advice, sobre um “ponto de execução”, ou join point. A descrição lógica de um conjunto de join points é chamada de pointcut.

Em muitas linguagens POA, a execução de um método e referências a atributos são exemplos de join points. Um pointcut consiste, por exemplo, de todas as referências a um conjunto de atributos.

POA e uma ferramenta para resolvermos alguns problemas de POO

Problemas de POO

  • Complexidade de software sempre Aumenta
  • Fatores de qualidade não são adequadamente tratados
  • Separação de interesses em OO
    • Oferece suporte a implementação de requisitos funcionais
    •  Não se preocupa com os requisitos não funcionais

A POA vem para junto com a POO resolver e somar mais qualidade ao software final

Conceitos de Orientação Orientada a Aspectos

Responsabilidades ou interesses

Sistemas de software consistem de um conjunto de “áreas de interesse” ou responsabilidades distintas como, por exemplo, responsabilidades funcionais (lógica de negócio) e não-funcionais (performance, persistência de dados, logging, autenticação de usuários, segurança, verificação de erros, etc.). Existem também as preocupações relacionadas com o processo de desenvolvimento de software, como clareza de entendimento, facilidade de manutenção, rastreabilidade, simplicidade de evolução do software, etc.

Separação das responsabilidades

A melhor maneira de se projetar um sistema é através da separação de suas responsabilidades distintas de tal modo que podemos alterar/re-projetar cada uma sem que isto afete as demais partes do sistema. A eficiência do desenvolvimento aumenta na medida em que conseguimos separar as suas diferentes responsabilidades em módulos estanques. Este princípio é razoavelmente antigo, e a POO nos trouxe uma importante resposta a ele: a classe como uma dimensão para a decomposição de responsabilidades. Mas algumas responsabilidades não são tão facilmente decompostas em apenas uma dimensão…

Responsabilidades transversais

Em sistemas complexos, sempre existem responsabilidades de interesse comum que são utilizadas por vários módulos. As responsabilidades não-funcionais que citamos geralmente têm esta característica, mas também algumas funcionais. Estas responsabilidades são difíceis de isolar porque são necessárias em vários pontos do código. Em POO, uma classe oferece uma boa maneira de se separar a maioria das responsabilidades funcionais, mas é bastante limitada quando se trata de responsabilidades transversais. Com a POO, os crosscutting concerns ficam espalhados por vários módulos em pequenos trechos de código que são, em geral, repetitivos, resultando em sistemas difíceis de projetar, entender, implementar, manter e evoluir.

Um exemplo pode ajudar a esclarecer melhor os conceitos. Imagine um sistema bancário. Este sistema tem como uma de suas responsabilidades funcionais centrais o controle das contas correntes dos clientes, candidata natural a se tornar uma classe. Mas este mesmo sistema tem diversas outras responsabilidades não-funcionais como: logging, integridade das transações, autenticação dos usuários, segurança, performance, etc., que são necessárias como suporte a várias classes funcionais, isto é, elas são transversais às divisões de responsabilidades entre os múltiplos módulos básicos do sistema (crosscutting concerns).

A POA complementa a POO por introduzir uma nova dimensão para a decomposição das responsabilidades transversais: os aspectos.

O paradigma da POA consiste na separação das responsabilidades transversais de um sistema em aspectos (unidades modulares) e a sua posterior composição junto às classes, formando um sistema único. Os aspectos podem ser inseridos, alterados ou removidos em tempo de compilação. Por estarem em um único bloco de código, sua manutenção é mais simples, diminuindo a complexidade do sistema e facilitando o seu entendimento. Além disso, o código das classes fica livre do código relacionado às responsabilidades transversais, o que facilita sua reutilização em diferentes contextos, combinando diferentes aspectos dependendo das necessidades da aplicação.

A POA envolve três fases distintas:

Decomposição: os vários concerns do sistema são identificados e classificados como comuns ou crosscutting.

Implementação: os concerns são implementados separadamente em classes (para os concerns comuns) e aspectos (para os crosscutting concerns).

Recomposição: o sistema é recomposto à partir dos concerns implementados segundo regras de recomposição. Esta fase é chamada de weaving.

Uma implementação básica de AOP consiste em: uma linguagem para programar os componentes (por exemplo, Java), uma linguagem para programar os aspectos (por exemplo, o AspectJ) e um weaver para combinar as duas linguagens (ferramenta que também faz parte do AspectJ). O weaver é uma espécie de montador que tem como entrada um programa de componente e o(s) programa(s) de aspectos e como saída um programa em uma linguagem específica (por exemplo, Java).

AspectJ

O AspectJ é uma ferramenta open source que acrescenta os conceitos de AOP à linguagem Java, através de uma extensão à linguagem: os “aspects”. Ele utiliza Java como a linguagem para a implementação dos concerns individuais, e tem construções para a especificação das regras de weaving, que são especificadas em termos de join points, pointcuts e advices, e tudo isto é encapsulado em um aspect.
Join points: representam pontos bem definidos na execução de um programa onde um determinado aspecto pode ser aplicado. Em AspectJ, join points podem ser chamadas de métodos, acessos a membros de uma classe, etc. Join points podem conter outros join points.
Pointcuts: pointcut é um agrupamento de join points baseando-se em um critério pré-definido.
Advices: trechos de código que são executados nos pointcuts. Um advice contém as alterações que devem ser aplicadas ortogonalmente ao sistema.
Aspects: são similares a classes: têm um tipo, podem ser estendidos, podem ser abstratos ou concretos e podem conter campos, métodos e tipos como membros. Mas são diferentes de classes: não têm construtor nem destrutor, não podem ser criados com o operador “new”, podem conter pointcuts e advices como membros e podem acessar membros de outros tipos.

Então O que são Aspectos?

UnB quebra o sigilo do voto da urna eletrônica

Um grupo da Universidade de Brasília conseguiu quebrar a segurança da urna eletrônica, nos testes promovidos esta semana pelo Tribunal Superior Eleitoral. Eles conseguiram recuperar a sequência dos votos, – o que, ao menos em tese, permite violar o sigilo das opções de cada eleitor.

Formado por professores e alunos da Faculdade de Ciências da Computação, o grupo 1, dos 9 inscritos para os testes, teve sucesso em desfazer o embaralhamento dos votos e, assim, extrair uma lista que indica quem votou em quem.

“Conseguimos recuperar 474 de 475 votos de uma eleição na ordem em que foram inseridos na urna”, revela o coordenador do grupo, o professor de Ciência da Computação da UNB, Diego Freitas Aranha, que fez doutorado em criptografia pela Universidade de Campinas (Unicamp).

Originalmente o plano de teste previa a recuperação de 20 votos, mas o próprio TSE desafiou o grupo a resgatar 82% dos votos de uma fictícia sessão eleitoral com 580 inscritos – percentual que equivale à média de comparecimento nas eleições brasileiras.

O professor Diego Aranha ressalta, no entanto, que a tarefa de violar completamente o sigilo do voto ainda está incompleta. “Precisamos da lista externa de votação para chegar ao nome dos eleitores”, afirma.

Como explica o coordenador do grupo, até aqui a equipe conseguiu determinar que o primeiro eleitor votou no candidato X, o segundo no candidato Y, e assim sucessivamente. Com a relação da votação – aquela que fica com os mesários – seria possível associar cada eleitor, pelo nome, ao votado.

A exemplo das edições anteriores dos testes, o tempo limitado de acesso à urna eletrônica – três dias, entre 20 e 22/3 – impediu avanços ainda mais significativos na quebra da segurança do sistema eletrônico de votação.

Diferentemente das versões anteriores dos testes do TSE, desta vez o tribunal permitiu acesso ao código fonte da urna – ainda que com restrições durante a fase de preparação dos exames, que antes de iniciados passam pelo crivo da Justiça eleitoral.

Apesar de festejar o sucesso na experiência, o grupo ainda não pode revelar os detalhes do feito – o TSE exigiu um compromisso de que apenas informações preliminares fossem divulgadas antes do relatório final com as considerações do próprio tribunal.

Além do professor Diego Aranha, o grupo é formado por Marcelo Monte Karam, André de Miranda e Felipe Brant Sacarel.

Prezi – Apresentações de uma forma diferente.

Prezi é um serviço web para criar apresentações interactivas as quais resultam das funções de Zoom e que conferem profundidade às apresentações disponibilizadas por este recurso.

Neste serviço esbatem-se os conceitos de esquerda, direita, acima ou abaixo porque possibilitam a construção de apresentações de forma realmente dinâmica. Esta ferramenta inovadora consegue imprimir novidade a todas as apresentações que se possam criar.

Prezi é uma ferramenta online totalmente diferente dos programas para a criação de
apresentações em slide, a começar pelo simples facto de que o aplicativo não se limita ao espaço
rectangular dos slides. É similar ao pptPlex, um projecto da Microsoft Office Labs que traz esse
tipo de funcionalidade para o PowerPoint.

Tutorial Prezi

Apresentação sobre administração no Prezi

Vetores Vazios em C

Fala galera tudo bom?
Eu estava com uma dúvida em C que me tirou o sono, já pensei, procurei e não tinha encontrado como verificar se uma posição do vetor está vazio ou ainda não foi declarado, em java, php e python e bem simples mais em C não tinha encontrado, não tinha encontrado porque  não existe, a princípio a posição vazia.
Minha ideia: ao iniciar o vetor, coloque um valor inválido, exemplo -1. Desta forma, você pode verificar se a posição é igual a -1, ou seja, ainda não tem valor válido.
Outra opção em vetores de char
Vamos supor um array de char de 10 posicoes. O nome dele será vetor:
char vetor[10];
/* Nesse momento, o espaço (10 chars) foi alocado na area de memoria estática. */
/* Neste instante, quando será o conteúdo do array? LIXO. */
/* De praxe, você deve inicializar essa área de memória com um conteúdo que, para você, é o “VAZIO”. Abaixo, vou inicializar cada posição com ‘espacos em branco’ */
memset(vetor, ‘ ‘, 10); /* 1o.parametro: o endereço da primeira posição; 2o.parâmetro: qual o char que preencherá cada posição; 3o. parâmetro: quantos bytes serão preenchidos) */
/* Aí, para saber se uma posição está vazia, é só ver o seu conteudo: */
if(vetor[3] == ‘ ‘)
{
// Está vazia!
}
/****************************/
Enfim: você inicializa as posições do array com o que quer você considere como vazio. Aí você usa o vetor, grava valores em suas posições. Para saber se uma posição do array está vazia, faça um simples teste como o acima.

Enjoy it.

Recursividade

Em Ciência da computação, a recursividade é a definição de uma subrotina (função ou método) que pode invocar a si mesma. A grande vantagem da recursão está na possibilidade de usar um programa de computador finito para definir, analisar ou produzir um estoque potencialmente infinito de sentenças, designs ou outros dados.
Wikipédia

Então vamos usar um fatorial para exemplificar
uma função em c que calcule o fatorial de um numero x sem recursividade

int fatorial (int x){
int i;
i = x - 1;
for (i; i!=1; i--)
x = x * i;
return x;
}

Então podemos considerar que:

fatorial de 5 é igual a 5 multiplicado pelo fatorial de 4;
fatorial de 4 é igual a 4 multiplicado pelo fatorial de 3;
fatorial de 3 é igual a 3 multiplicado pelo fatorial de 2 que é 2

fatorial de x = x * fatorial de ( x -1 );

Logo em C a função fatorial recursiva fica.


int fatorial (int x){
if(x&lt;2)
return x;
return fatorial(x-1) * x;
}

[/sourcecode]

Vetores em C

Fazer um programa para contar o número de espaços em brancos de uma string.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[20];
int i, quant;
quant = 0;
printf("Digite uma string: ");
scanf("%[^\n]",s);
printf("String digitada: %s\n",s);

for (i=0; s[i] != '' ;i++){
char ch;
ch = s[i];
if (ch == ' '){
quant += 1;
}
}

printf("Quantidade de espacos digitados: %d",quant);
return 0;
}

Refaça o programa anterior criando uma função que receberá como parâmetro a string e
retornará o número de espaços em branco que a string contem.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int emBranco (char s[]) {
int i = 0, quant = 0;
for (i=0; s[i] != '' ;i++){
char ch;
ch = s[i];
if (ch == ' '){
quant += 1;
}
}

printf("Quantidade de espacos digitados: %d",quant);
return 0;
}
int main(){
char s[25];
int i, quant;
quant = 0;
printf("Digite uma string: ");
scanf("%[^\n]",s);
printf("String digitada: %s\n",s);
emBranco(s);

return 0;
}

Fazer um programa para contar o número de vogais numa cadeia de caractere.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[40];
int numVogais, i;
char *vogais;
printf("Digite uma string: ");
scanf("%[^\n]",s);
vogais = "aeiouAEIOU";
numVogais = 0;
for (i = 0; s[i] != ''; i++) {
char ch;
int j;
ch = s[i];
for (j = 0; vogais[j] != ''; j++) {
if (vogais[j] == ch) {
numVogais += 1;
break;
}
}
}
printf("Quantidade de vogais digitados: %d",numVogais);

return 0;
}

Refaça o programa anterior criando uma função que receberá como parâmetro a string e
retornará o número de vogais que a string contem.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int countVogais (char s[]) {
char *vogais;
int numVogais, i;

vogais = "aeiouAEIOU";
numVogais = 0;
for (i = 0; s[i] != ''; i++) {
char ch;
int j;
ch = s[i];
for (j = 0; vogais[j] != ''; j++) {
if (vogais[j] == ch) {
numVogais += 1;
break;
}
}
}
return numVogais;
}

int main()
{
char s[40];
int valor;
printf("Digite uma string: ");
scanf("%[^\n]",s);
valor=countVogais(s);
printf("Quantidade de vogais digitados: %d",valor);

return 0;
}

Escrever um programa para ler uma string (com mais de uma palavra) e faça com que a
primeira letra de cada palavra fique em maiúscula. Para isso, basta subtrair 32 do elemento
que deseja alterar para maiúsculo. chrNome[0] = chrNome[0] – 32;
Exemplo:
Entrada: lab. de linguagem de programacao
Saída: Lab. De Linguagem De Programacao

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[40];
int i;

printf("Digite uma string: ");
scanf("%[^\n]",s);
printf("String digitada: %s\n",s);

for (i=0; s[i] != '' ;i++){
char ch;
ch = s[i];
if (ch == s[0]){
s[i] = s[i] - 32;
}

if (ch == ' '){
s[i+1] = s[i+1] - 32;
}
}
printf("String digitada concertada: %s",s);

return 0;
}

Vetores númericos em C


#include <stdio.h>
 #include <stdlib.h>

int main()
 {
 int v[10];
 int i, soma, count;
 float media;
 soma = 0;
 count = 0;

for (i=0; i < 10; i++){
 printf("Digite a nota %d\n",i+1);
 scanf("%d", &v[i]);
 soma = soma + v[i];
 }
 media = ((float)soma)/ 10.0;

for (i=0; i < 10; i++){
 if (media < ((float)v[i])){
 count = count + 1;
 }
 }

printf("Media: %f\n", media);
 printf("Quantidade de Alunos com nota maior que a media: %d\n", count);

return 0;
 }

Dada um tabela contendo a idade de 10 alunos, faça um algoritmo que calcule o número de
alunos com idade superior a média.


#include <stdio.h>
 #include <stdlib.h>

int main()
 {
 int v1[10], v2[10];
 int i, soma1, soma2;

soma1 = 0;
 soma2 = 0;

for (i=0; i < 10; i++){
 printf("Digite o valor do vetor1 na posicao %d\n",i+1);
 scanf("%d", &v1[i]);
 soma1 = soma1 + v1[i];
 }
 printf("A Soma dos valores do primeiro vetor e: %d\n\n", soma1);

for (i=0; i < 10; i++){
 printf("Digite o valor do vetor2 na posicao %d\n",i+1);
 scanf("%d", &v2[i]);
 soma2 = soma2 + v2[i];
 }
 printf("A Soma dos valores do primeiro vetor e: %d\n\n", soma2);

printf("A Soma Total e: %d\n", soma1+soma2);

return 0;
 }

Mais um pouco de Funções

Escreva uma função que receba como parâmetro
um valor n inteiro e positivo e que calcule
a seguinte soma: S := 1 + 1/2 + 1/3 + 1/4 + … + 1/n.
A função deverá retornar o valor de S.

 #include <stdio.h>
 #include <stdlib.h>

int soma(int n){
 float i, s;
 s=0;
 for (i=1; i<=n; i++){
 s= s + 1/i ;
 }
 printf ("o valor de S e %f",s);

}

int main(){
 int n;
 printf("Entre com o parametro\n");
 scanf("%d", &n);
 soma(n);
 return 0;
 }

Faça um programa que apresente o seguinte “Menu” para o usuário:
Escolha uma opção de cálculo para dois números:
1) Soma
2) Produto
3) Quociente
4) Sair
Opção:__
O “Menu” acima deve ser apresentado para o usuário enquanto ele não escolher a opção 4
(sair do programa). O usuário fornecerá 2 números se escolher as opções de cálculo 1, 2
ou 3. Para cada opção de cálculo deve existir (obrigatoriamente) uma função definida
(soma, produto e quociente dos dois números fornecidos pelo usuário). O resultado do
cálculo deve ser escrito na tela.


#include <stdio.h>
 #include <stdlib.h>
 #include <math.h>

int soma(){
 int a, b;
 printf("Entre dois valores \n");
 scanf("%d %d", &a,&b);
 printf("O resultado da soma de %d + %d = %d",a,b, a+b);
 return 0;
 }

int produto(){
 int a, b;
 printf("Entre dois valores \n");
 scanf("%d %d", &a,&b);
 printf("O resultado da multiplicacao de %d * %d = %d",a,b, a*b);
 return 0;
 }

int quociente(){
 float a,b;
 printf("Entre dois valores \n");
 scanf("%f %f", &a,&b);
 printf("O resultado da multiplicacao de %f / %f = %f",a,b, a/b);
 return 0;
 }

int main(){
 int a, b, operador;
 float c;

printf("Entre com o Operador 1.+(soma) 2.*(Produto) 3./(Quociente) 4. (Sair)");
 scanf("%d",&operador);
 switch (operador)
 {
 case 1:
 soma();
 break;
 case 2:
 produto();
 break;
 case 3:
 if (b == 0)
 printf("Não existe divisão por 0");
 else
 quociente();
 break;
 case 4:
 printf("Até mais");
 break;
 default:
 printf("Operador invalido");
 break;

}return 0;

}

Agora com o seguinte “Menu”
Escolha uma opção de cálculo para um número:
a) Fatorial
b) Exponencial
c) Raiz quadrada
d) Sair
Opção: __
Nas opções “b” e “c” pode – se utilizar funções predefinidas do C.


#include <stdio.h>
 #include <stdlib.h>
 #include <math.h>

void sair(){
 char confirm[3];
 printf("Tem Certeza?");
 scanf("%s",confirm);
 if (confirm == 'sim')
 printf("Tem dsadsadsaCerteza");
 else
 printf("%s", confirm);
 }

int main(){
 int operador;

printf("Entre com uma opcao\n1.(Fatoria)\n2.(exponencial)\n3.(raiz)\n4.(Sair)");
 scanf("%d",&operador);
 switch (operador)
 {
 case 1:
 int n,a;
 printf("Entre o valor do fatorial\n");
 scanf("%d", &n);
 a = fatorial(n);
 printf("O resultado do fatorial de %d e %d\n",n , a);
 break;
 case 2:
 exponencial();

break;
 case 3:
 raiz();

break;
 case 4:
 sair()
 break;
 default:
 printf("Operador invalido");
 break;
 }

return 0;
 }

Navegação de Posts