terça-feira, 7 de junho de 2011

Math - Cast , Software Livre, para amantes de Fórmulas.

Um programa simples, de interface eficiente e que cumpre á risca o que promete: Transcrever fórmulas matemáticas de maneira a tornar as mesmas compatíveis com qualquer editor de textos/imagem. Sua principal característica é trabalhar com linguagem XML, favorecendo a compatibilidade entre vários editores.A versão corrente do software pode ser obtida aqui.

A tela de boas vindas é auto-explicativa. Clique em "New Equation List" para iniciar um novo projeto, "Open Equation List" para abrir um arquivo etc... Esta versão contém um arquivo de ajuda vasto, permitindo a qualquer pessoa com o mínimo de conhecimento em expressões matemáticas operar o sistema. Para inserir uma fórmula nova, basta clicar no sinal de soma (1) e iniciar a fórmula na caixa de texto(2) que irá aparecer.
Para executar uma operação matemática, é só escrever na area de entrada(2) a fórmula propriamente dita e pressionar OK.
Para montar expressões mais complexas, devemos utilizar o caractere "‹" para iniciar cada bloco e fechar com o caractere "›".(Não confundir com os caracteres maior e menor! Estes caracteres delimitadores são únicos desta linguagem (XML) e podem ser obtidos através do atalho CONTROL+9 e CONTROL+0, respectivamente.)Para inserir um comentário antes ou depois das formulas, o mesmo deve estar entre "Aspas".
Por exemplo para montar a expressão :
Devemos utilizar a entrada :

 ‹a + b›╱2
Com a fórmula montada, podemos clicar no botão Copy (3) e copiar a fórmula para a área de transferência (clip-board). Feito isto, podemos utilizar desde um processador de textos (O Ms Word, por exemplo) até um processador de imagens (Corel Draw, por exemplo) para tratar das mesmas.O arquivo copiado é um bitmap, ou seja, uma imagem, sendo compatível com qualquer programa de edição.

Se você irá utilizar um processador de textos comum, para imprimir as fórmulas, talvez você note uma pequena distorção na imagem. Isso ocorre, porque no ato de exportar a imagem, o software simplesmente copia a tela do programa, mantendo a resolução do seu monitor. Para um melhor resultado, entre no menu
EDIT > SETTINGS e selecione a opção Enhanced Metafile 2. Assim como na ilustração.


Pronto.Você agora perceberá, com certeza, um ganho na qualidade da imagem exportada.
Para considerações finais, o software é completamente open-soure e freeware, ou seja, é passível de modificação pelo usuário, bem como de traduções para a nossa língua. Eu me candidatei á traduzir o programa para Português-BR e aceito ajuda de todos os interessados.


Enfim, aproveitando esta excelente ferramenta, eu também elaborei uma tabela de fórmulas para a matéria de probabilidade e estatística.(que por ora não terá custo algum). Sinta-se livre para baixar o arquivo aqui, e imprimir.

Aquele abraço, fui!

quinta-feira, 2 de junho de 2011

[OFF] semaphore.h e pthread.h no Dev C [Win32]

Primeiramente, se você veio aqui para dizer "-Pra quê tudo isto.... Pega qualquer distribuição  Linux e  compila o código...." e não entende que as pessoas podem querer utilizar o Ruimdows para fazer este tipo de coisa, eu vou te pedir um favor: Clique aqui. Para o restante, siga.
Segundamente, são dois motivos que me levaram a publicar este conteúdo que me rendeu horas de pesquisa pela web:

  1. Centralizar este tipo de informação, para que as pessoas que encontram problemas na implementação de código C em ambiente Windows.
  2. Ajudar meus nobres e ilustres colegas de graduação.
Explicações à parte, vamos ao que interessa.

Faça o download do pacote Pthreads (Posix Threads) aqui. Este pacote permite a você usar várias bibliotecas nativas do C padrão.Entre elas semaphore.h ,pthread.h e outras relativas à programação concorrente. Após baixar, instale o pacote, dando um duplo-clique no arquivo e seguindo as instruções, se houver.Após a instalação, no menu TOOLS > PACKAGE MANAGER ( FERRAMENTAS > PACKAGE MANAGER em português ) o pacote deve aparecer, como na ilustração abaixo:


Com o pacote instalado, precisamos informar ao programa de link edição do Dev-C que estamos usando uma biblioteca externa à padrão. Para fazer isto, vá até o menu TOOLS e em COMPILER OPTIONS marque a caixa Add theese commands to the linker command line insira o comando " -lpthreadGC2 "(Sem aspas) na caixa logo abaixo. Pressione OK.( Se a sua IDE estiver em Português, a sequência é : Ferramentas > Opções do Compilador >Marque a opção Adicionar estes comandos à linha de comando do linker > Na caixa abaixo insira "-lpthreadGC2" (Sem aspas)).


Feito isto você está apto á começar a usar as bibliotecas. No entanto, as funções para manipular os semáforos são um pouco diferentes das funções aprendidas durante a aula de Sistemas Operacionais.

Para Criar um semáforo, utilizamos o tipo de dado sem_t. Ex:

#include <semaphore.h>

sem_t meuSemaforo;

Para Inicializar um semáforo, utilizamos a função sem_init, que recebe como parâmetro uma referência(&) ao semáforo criado.Em seguida é passado o valor da variável pshared, que se for um numero positivo, permite que o semáforo seja compartilhado por outros processos.E finalmente o valor inicial do nosso semáforo.(No exemplo do consumidor/produtor, os semáforos eram inicializados com uma atribuição.Neste método, precisamos executar a função sem_init, á fim de inicializar a variável interna)Ex:

sem_init (&meuSemaforo,0,1); (semáforo binário, não compartilhado entre processos. È geralmente utilizado como o semaforo de Exclusão Mútua (mutex)).

sem_init (&meuSemaforo,0,10);(semáforo inteiro, não compartilhado entre processos. È geralmente utilizado como contador).

Obs : Como utilizaremos o modelo de threads concorrentes , não compartilhamos os semáforos com outros processos. Caso utlilizassemos o modelo de processos concorrentes, teriamos que setar a  propriedade pshared para 1)

Para utilizar a função P(s), descrita no conteúdo de sistemas operacionais, utilizamos a equivalente sem_wait, que recebe como parâmetro a referência(&) para o semáforo. Esta operação testa se o semáforo é maior que 0. Se for, ela decrementa o valor do semáforo e entra no código da Região Crítica.Ex:

sem_wait(&meuSemaforo);

Para utilizar a função V(s), descrita no conteúdo de sistemas operacionais, utilizamos a equivalente sem_post, que recebe como parâmetro a referência(&) para o semáforo. Esta operação quando executada, incrementa o valor do semáforo, e abre o sinal para que outros processos/threads executem a sua Região Crítica.Ex:

sem_post(&meuSemáforo);

Bom, com estas informações já daria para implementar o código do produtor/consumidor sem problemas.
Porém, ainda não implementamos programação multithread para poder testar nossos códigos. Para isto, utilize a biblioteca <pthread.h>.

O tipo de dado para se declarar uma thread é pthread_t. Ex:

#include <pthread.h>

pthread_t minhaThread;

Para criar e inicializar a thread, utilizamos a função pthread_create que contém 4 argumentos que, devido á sua complexidade, serão tratados individualmente. Ex:

pthread_create(&minhaThread, NULL, minhaFuncao , (void *) &meuArgumento);
  1. O primeiro argumento é uma  referência(&) à thread préviamente declarada.(&minhaThread)
  2. O segundo arrgumento é um ponteiro que define os atributos da thread. Para valores padrão, NULL deve ser passado (NULL)
  3. O terceiro argumento é a função que você irá passar para a thread que se criará e executará à partir de agora.Para o exemplo consumidor/produtor é de suma importancia que sua função retorne um ponteiro de void.(explicado melhor adiante)Neste parametro voce nao deve incluir nada além do nome da função (que ja deve estar declarada, né?) (minhaFuncao).
  4. O quarto parâmetro está relacionado aos parâmetros que estaremos passando para nossa função.Não irei muito além neste ponto, pois para entender este argumento você deve entender sobre troca de mensagens entre processos e isto é uma longa história(que veremos com o professor Botega mais adiante) Aqui passaremos uma referência(&) para um inteiro qualquer (que você também já declarou, né?) que servirá como identificador para nossa thread, junto com um casting(coerção) de tipo para ponteiro nulo ((void *) &meuArgumento)
Se você foi um bom menino e seguiu meus passos até aqui, você já possui uma função assim:

void * minhaFuncao (int * meuArgumento)
{
      blablablá.
          sem_wait(&meuSemaforo)
                   região crítica;
          sem_post(&meuSemáforo)
}

E também possui uma main() mais ou menos assim :

void main ()
{
       int meuArgumento1=1,meuArgumento2=2;
       sem_init(&meuSemaforo,0,1);
       pthread_t minhaThread1,minhaThread2;
       pthread_create(&minhaThread1, NULL, minhaFuncao , (void *) &meuArgumento1);
        pthread_create(&minhaThread2, NULL, minhaFuncao , (void *) &meuArgumento2);
}


Se voce entendeu meu raciocinio até aqui, conseguiu compilar tudo, porém quando executa o programa executa e fecha rapidamente, pensa comigo.
Se todo processo tem pelo menos uma unica thread, e esta thread principal termina sua execução, o processo acaba ,certo? Se um processo acaba, ele acaba com todas as coitadinhas que estavam lá em seu laço infinito trabalhando. Culpa de quem? Culpa do seu S.O. que nem faz ideia do que você estava fazendo dentro de seu processo. Ele não conhece suas threads.
 Quando nosso programa chega ao fim da main é isto que acontece. O processo todo termina e nossas threads vão pro saco. Para que isto não ocorra nós fazemos uma grande P.O.G. (Programação Orientada à Gambiarra, para os não íntimos). Simplesmente falamos para o nosso processo - Ei, essa sua thread principal (main()) já era, pegue uma de nossas threads para continuar com o programa.
E utilizando o seguinte comando, ele atende nosso pedido:

pthread_exit(NULL);


Sendo assim, sua main() deve estar parecida com isto:


void main ()
{
       int meuArgumento1=1,meuArgumento2=2;
       sem_init(&meuSemaforo,0,1);
       pthread_t minhaThread1,minhaThread2;
       pthread_create(&minhaThread1, NULL, minhaFuncao , (void *) &meuArgumento1);
       pthread_create(&minhaThread2, NULL, minhaFuncao , (void *) &meuArgumento2);

       pthread_exit(NULL);
}

Bom, felizmente é isto que posso fazer por vocês por hora, pois mais do que isto seria contribuir para a retirada do seu diploma de bacharelado. E a intenção não é esta, e sim promover o conhecimento mútuo, pois eu também poderei e vou, precisar de vocês adiante.
Também espero poder contar com vocês para a divulgação do blog, bem como a avaliação de vocês nesta página. Comentários serão bem-vindos e respondidos.

Um grande abraço










sábado, 28 de maio de 2011

Mara-Toma de Pô-gramação

É, parece que tecnologia continua sendo meu sonho de consumo. A cada vez que me aproximo dos bits, me surpreendo com a tamanha distância que estou de dominar estes "filhotinhos de cruz credo", que ligam quando quero que desliguem, e vice e versa.

Mas nada que seja fácil na vida tem graça. A cada vez que sou derrotado por um simples " leitor iterativo de dados dinâmico" (Não é para você entender, mesmo) me sinto revigorado, persuadido à, de qualquer forma, chicotear as bibliotecas padrão do nosso amigo querido e sutilmente forjar, na unha, uma função capaz de popular dinâmicamente arrays dinâmicos. (hum, dinamite ajudaria?)



Exclusivamente, isso tomaria todas as 3 horas de atenção sacra de qualquer humano pensante. O que não vem ao caso é, porque fazê-lo? Para que finalidade, para quem, por onde começar, o que usar, o que inventar, o que melhorar....
Um dia me disseram que fazer perguntas exessivas chateava as pessoas. Hoje somos acadêmicamente treinados para extrair até a ultima gota de suor de neurônio de um Cliente! ARhhhhhhhhhh!!





quinta-feira, 10 de março de 2011

Conversa? Não. Desta vez um conversor.

E como num passe de mágica : para converter Flash para HTML5 basta apenas um clique!

Incrível? Agora reflita sobre esta frase :
"Adobe cede e lança ferramenta que permite visualização de animação em iPhone e iPad"
 "Por Globo.com"


Amigos e amigas, quando alguém cede a algo ou a outrém, este alguém estava, supomos, hesitando em concordar com algo ou outrém. A Adobe, com todo respeito, estava catando seus "caquinhos" após Steeve dizer ano passado que o sistema operacional móvel da Apple não iria rodar Flash por ser um "Destruidor de Processadores". Palavras dele, não minhas.
Desde então o Flash da Adobe, até então acostumado a ser requisito em plataformas móveis, sentiu. Esta ferramenta é uma desesperada jogada de marketing, para que o flash não morra no ambiente desenvolvedor.
Se as pessoas continuarem a usar a suite de criação da Adobe, eles perderão menos. A perda já é inevitável nos browsers.
Flash CS5
HTML 5 (Jquerry, Js e Css)

Mas voltemos ao Wallaby .Analizando a comparação acima, percebemos que o HTML5 ainda têm que comer  muito feijão. Mas a perda em qualidade é amplamente recompensada em performance, pelo filho prodígio do W3C. E a ferramenta já insere javaScript no código gerado. E olha só, ainda é Beta.Não demorará a ser incorporada definitivamente nos produtos da Adobe, que já virão com um "Wallaby" só pra eles. A ferramenta pode ser baixada aqui ,  e você precisará do Adobe AIR para rodá-lo. Ah, e só é suportado Flash feito com o CS5.Por enquanto.


No mais, essa é só mais uma confirmação do que já foi dito pelo "Rei -o não coroado - da Computação Pessoal" . Maomé já não vai até a montanha. Maomé faz montanha crescer diante de seus pés.

sábado, 5 de março de 2011

Thau Caderno, Adeus Caneta.

Et Voilá, eu lhe apresento : NoteSlate! O primeiro, (e provavelmente último) tablet que me chamou a atenção.

Amigo, pense em algo fino. Pense em algo com 6 mm de espessura, tela sensível ao toque, resolução de 1080 x750 px . Atraente? Você nem imagina o quanto. Penso eu, visto da chegada do I-pad 2, como pode um "toquinho"(tô-qui-nho) destes ter entrada mini-usb, entrada micro-sd e Wi-fi? Não é pouco, comparado aos concorrentes, dizer que este "pedacinho de quadro negro" vai bombar no meio tecnológico universitário.

E não se assuste! Apesar do design ser "topo de linha" nosso amiguinho não vai custar mais que US$ 100,00 para o consumidor final. Oba-Oba (já em ritmo de carnaval?), todo canarinho verde-amarelo vai poder ter um, se quiser.Sim, se quiser! Pessoal ,até eu tenho essa dinheirama toda.

Mas realmente, a linha que não me agradou foi exatamente esta : "Inicialmente o S.O. do modelo não dará suporte a browser para se navegar na internet". Pu..... que pariu! Pra quê por Wi-Fi na geringonça então?
Para fazer trabalho em grupo? Tsc Tsc ...

E enfim, descobrir que o software será todo Open-Source me deixa mais aliviado. Customização é pra quem pode, e não para quem quer. Não tardará a fluir novas versões do "soft" deste bonitinho, com browser, skype , refrigerador de cerveja, microôndas......(Uma pizza talvês?)

quinta-feira, 3 de março de 2011

Destrutores da Comunicação Alheia

Alô?
Alô.
Você faz pizzas?
Sim.
Por favor gostaria de uma pizza à Portuguêsa .
Uma pizza á Portuguêsa, e o que m.....
Tira a cebola.
Ok. Sem cebola.
Tira a azeitona.
Certo.
Tira o presunto e o queijo mussarela.
Ok.
No lugar de tudo isso, o Sr. pode colocar milho?
Claro que posso.
Beleza quanto fica?
Fica 25 Reais mais a taxa de entrega.
Ok.
Estou mandando.

Parece brincadeira, mas é fato. Os níveis de comunicação estão tão exageradamente frágeis, que as pessoas se dão o prazer de estimular a maior ênfase do capitalismo moderno : Vender, o mais caro possivel.
Cá entre nós :  esta massa de pizza "a-milhoada"não custará centavos para este comerciante, que ao desligar o telefone abriu um sorriso mais faceiro do que uma hiena estágiária das Casas Bahia.

Não é necessário ir longe para encontrar casos piores que estes. Marshall McLuhan que o diga.
Se perdeu noções da época em que o homem já aprontava das suas presepadas. Muitos Josés perderam a cabeça na guilhotina enquanto muitos Joãos (Joões?) andavam soltos pelo reino, a aprontar peripécias.
Graças ao escrivão que se distraiu ao preencher o mandato tênebre, que outrora causou a morte de seu pai.
-Ah mas o Rei disse que...
-O rei não disse nada.Guilhotina para o escrivão!


Entre estas e outras razões, o mundo moderno sofre quanto a estes níveis absurdos de complacência adquirida pelas pessoas. E isto é até bom. virgula para quem identifica pessoas assim e consegue tirar proveito das mesmas.
Portanto nunca sente do meu lado em uma lanchonete e peça um "x-vegetariano com adicional de hamburguer."
Eu provavelmente farei você perder a fome.

Nec LaVie lS70H , luxo antigo, lixo novo.

Poisé caros leitores, existem coisas na vida de um tecnico que são duras de aceitar. Uma derrota para "um monte de lata velha japonesa" é uma destas.
O nome da criança é este : LaVie LS70H, da NEC, grande empresa nipon, que se não fosse pela idade arrancaria suspiros num "TechLover" como eu.O bêbê data de 2000.Època que nós aqui no Brasil estavamos contentes com nossos 386 gratinados, cheios de barulho e póeira.
É uma estação agradavel de se ver.Possui suporte á multimídia offline, desingn limpo e peso, muito peso.

Porém a graça toda acaba aqui. A cliente comprou um hardware novo, e achou que era moleza espetar o danado na porta usb e instalar o driver Americano que vinha com a peça.
O que ela não contava é que, o sistema (outrora Translated) , o hardware e o sistema de arquivos do HD eram incompatíveis com a peça. Advinha só? Blue Screen of Death seguido de Travamento total da Bios.
Chama o Stripe. Sim ele resolve. Stripe você resolve? Não, diz minha pessoa, mas posso tentar....

Live CD , Boot pelo CD-Rom, Boot pelo Pen , Boot pela Rede?
Nana -nina-Não. É triste admitir que a memória do amado LaVie mouncherry(porque é que japonês tem que por nome frances em computador) tinha ido para outro planeta. Mais triste aindaé abrir a case e descobrir que a memória DIM de 128 Mb (Dividido em 2 Pentes) possui fabricação própria, impossibilitando a reposição(Pelo menos por peças das que tenho acesso).

É tão claro quanto dizer : Sim, está pronto. -- Não, não tem conserto.
Aliás até que tem..........................$$$$$$.

quarta-feira, 2 de março de 2011

Então Jobs, qual é(ra) a sua? Iphone 2.

E não demorou muito. Para ser mais exato apenas 13 meses de reinado. Com todo este tempo, o fabuloso Tablet foi muito aplaudido/criticado ao longo de sua notória vida.
Ora, então podemos ter jornal 2.0 á pilhas? Ótimo! Tem entrada USB, Câmera e Interatividade com outros periféricos? foreach SENTENCE in LASTQUESTION{ ANSWER Não!}.
Mas então no dia 02/03/2011(ontem isso era ontem), como que por milagre, Steeve aparece na California, em boa(**cof**) saúde e anuncia o primeiro de muitos remodels do tão aclamado tablet.

A segunda geração do I-pad conta com o novíssimo processador A-5, uma espécie de Dual-Core do modelo anterior A-4, prometendo gráficos e processamento que supera em 7 vezes seu predecessor. As duas câmeras(Uma frontal e uma Traseira) com resolução de tirar o fôlego, dão suporte a funcionalidade que tanto Jobs quanto Woz adoram comentar : o FaceTime.

Mas quem tomou conta da festa foram as capinhas SmartCover.Com imãs nas pontas, as danadinhas se ajustam ao formato do I-pad, proporcionando um suporte para leitura em mesas.Realmente foi o que mais me impressionou.
Design mais leve, maior potência, menor espessura, então a bateria irá durar menos, não é?
"-Não", Diz jobs," mesma durabilidade anterior!Não é incrível?" - Incrível sim, porém um pouco salgado,
não acha? "Não, mesmo preço". WHAT???

Isso mesmo, o preço, (lá fora) continua sendo US$ 499  e US$ 899, a versão WI-FI e 3G, respectivamente.
Claro que nosso mercado carnívoro não aceita estas regras, mas se prepare para pagar caro para ter o lindo papel eletrônico em suas "mãos verde-amarelas".
Enquanto escrevo, imagino-me como um portador da versão 3 deste gadget, ainda insatisfeito e com muita ira deste mundo cão dos monopólios eletrônicos. Mas eles vão ganhando mercado. Vendendo agua gelada para quem acabou de tomar um delicioso sorvete.

Então tudo certo ...

Dia 03/03/2011, 01:09, em uma noite fria e pasma, na falta de suprimentos tabacoários....

Decido por me render aos encantos de um blog.
Por demasiada demora, e por recontos de modismos,  pessoas caipiras (estabacados) como eu se afastam sempre do que se diz "novo" e "diferente" no mundo da I.T.
E por tanto aguardo, tanta pesquisa, e - já era em tempo - com tantos "recursos disponíveis" (Merece até aspas), esta minha decisão se fez necessária.
Algo que faz sentido, publicar coisas pessoais por exemplo, sempre é visto pelas pessoas como receitas anti-realidade. Não faze-lo porem, num mundo um tanto quanto virtual, deixa-nos com a sensação de estar morando numa caverna, ou vivendo à luz de velas de pança de burro.

Unir o útil ao agradável , que para mim se tornou uma rotina, me faz pensar além do comum. Uma simples página em Linguagem de Marcação Hiper-Texto já supera o que outrora foi a maior descoberta do homem:
A conversa.
Com Versa.
Pa-Po dez.
A fiada também.


Por isto, meus caros leitores, farei deste dia meu Ground Zero.Minha primeira Estaca. Minha pedra fundamental.


Aqui começa o pro-bleminha.blogspot.com








Ponto de Exclamação.