domingo, 29 de março de 2015

Sindrome de Lex Luthor

Pelo pouco que li sobre a queda do avião da Germanwings provocada pelo copiloto Andreas Lubitz posso afirmar que ele sofria de um mal cultural que venho notado surgir em nossa sociedade: Sindrome de Lex Luthor.


Para Ayn Rand, valores como compaixão são na verdade interesses.

O objetivo do Übermensch deve ser o poder. Será mesmo? Mas o quanto a perfeição pode ser relativa? Certamente a violência não é algo interessante.


Quando era criança, todos os meus colegas gostavam do super herói super-homem. Mas atualmente, venho notando que muitos, mas muitos mesmo, depreciam o personagem por um motivo raso: A existência de um super-homem desestimula os outros a quererem progredir, pois estes sentem que tal patamar seja impossível. Infelizmente esse pensamento derrotista e egoísta não tem ocorrido apenas nas histórias dos heróis fantásticos. Isso tem ocorrido em nossa sociedade por vários motivos. Seja por alguém ser mais rico, bonito, inteligente, forte ou qualquer outro atributo de valor relativo, vai despertar a inveja de alguém. Não dá pra agradar a gregos e troianos.

Vivemos em usa sociedade que é altamente estimulada a competir. Mas o que se pode esperar de uma cultura highlander que afirma que "só pode haver um"? É de se esperar que alguns sedentos por poder sentirão raiva por não conseguirem realizar o que sonham e, dependendo do caráter, poderão até promover um tipo de "vingança".

Este tipo de argumentação rasa e aterrorizante talvez possa ser melhor exemplificada neste filme:
http://omelete.uol.com.br/filmes/amadeus/
http://en.wikiquote.org/wiki/Amadeus



Tradução:
Antônio Salieri, Jogando o crucifixo na fogueira diz ao cristo:
Agora nos somos inimigos... Pois você escolheu como seu instrumento um arrogante, promíscuo, sujo, garoto infantil e me deu em troca a capacidade de reconhecer sua encarnação. E por você ser injusto, desleal e cruel eu vou rejeitá-lo... Eu juro! Eu vou machucar sua criatura tanto quanto eu for capaz. Eu vou destruir sua encarnação.


Comumente vemos extravasões publicas de inconformação por derrotas, como por exemplo o caso da segunda colocada que arranca a coroa da vencedora num concurso entre misses. É possível que a primeira colocada se gabasse diante da segunda colocada, mas mesmo assim devemos ter autocontrole. As pessoas que se sentem inferiores ou que gostam de se gabar deveriam conhecer a filosofia Kyokushin.

Garyu (卧 竜) significa dragão reclinável. Filosofia japonesa diz que um grande homem, que permanece na obscuridade é chamado de Garyu. Um dragão é todo-poderoso, mas um dragão reclináveis opta por não mostrar seu poder de mera vaidade, mas a menos que seja realmente necessário. Da mesma forma, um karateca verdadeiro não se gabar ou mostrar suas habilidades, ele / ela nunca se esquece da verdadeira virtude da humildade.
(Fonte: http://www.seishinkyokushin.com.br/seishin-kyokushin/programa-tecnico/kata-kyokushin-seishin/kyokushin-kata-teoria/)

Segundo a namorada de Andreas Lubitz, ele afirmou que Um dia faria algo que mudaria todo o sistema, e que todos saberiam seu nome.

Mas que bela forma de ser lembrado, hein? Para um derrotado, alguém que faz uma merda destas, gostaria de saber porque não gosta do super-homem.


Essa cultura Highlander combina com um trecho do texto de Saint-Exupery que faço questão de traduzir aqui:

Aqui, no final das paginas deste livro, eu me lembro novamente daqueles funcionários públicos envelhecidos que nos escoltavam no ônibus quando nos propusemos a voar para levar suas primeiras correspondências, quando nos preparávamos para nos tornarmos homens. Nós quem tivemos a sorte de sermos chamados. Aquela massa foi amassada do mesmo barro que o resto de nós, mas eles não sabiam que tinham fome.

Para atingir o estado de Homem, não é necessário entregar-se a si mesmo à morte nos arredores de Madri, ou pilotar os aviões dos correios, ou lutar na neve até a exaustão sem respeito pela dignidade da vida. O homem que pode ver o milagre em um poema, sentir a pura alegria de uma musica, que pode partir seu pão com os companheiros, que abre suas janelas para o mesmo vento refrescante do mar, também aprende a língua dos homens.

Mas também muitos homens são deixados desacordados.

A alguns anos atrás, em uma longa viagem de trem, fui repentinamente apoderado de um desejo de fazer um tour pelo pequeno país ao qual estava sujeito por 3 dias, balançando naquele chacoalhar que era como o som de pedras rolando e rolando pelas ondas, e eu levantei-me de minha cabine. Era uma da manhã quando atravessei todo o vagão. Os vagões dormitórios estavam vazios. A primeira classe estava também estava vazia, e tudo fazia lembrar-me dos luxuosos hotéis da Riviera que abrem no inverno para um único convidado, o último representante de uma fauna extinta. Um sinal dos tempos amargos. Mas os carros de terceira classe estavam lotados com centenas de trabalhadores poloneses mandados pra casa vindos da França. Eu caminhava lentamente, saltando de fininho os corpos adormecidos espalhados pelo chão. Entre as luzes do lampião, nos compartimentos simples e desconfortáveis eu observava uma confusa massa de pessoas balançando pelo trem. 
Tudo aquilo que eu via cheirava como uma cela de presídio. Toda uma nação que voltava para a pobreza de onde vieram estavam espalhados lá em um mar de sonhos ruim. Grandes cabeças raspadas rolavam nas almofadas dos bancos. Homens, mulheres, crianças, todos balançavam da direita para a esquerda, como se estivessem incomodados com todos aqueles movimentos e barulhos que atrapalhavam seus sonos, seus esquecimentos. Não tinham o conforto de um bom sono.

Olhando para eles eu dizia a mim mesmo que eles tinham perdido metade de suas qualidades humanas. Aquelas pessoas foram massacradas de um extremo ao outro da Europa pelas correntezas da economia. Eles foram arrancados de suas pequenas casas no norte da França, de seus pequenos jardins, seus três potes de gerânios, que sempre estiveram nas janelas das famílias dos mineiros poloneses.

Eu vi deitado ao lado deles potes e panelas, cobertores, cortinas, em feixes mal amarrados. Tudo o que tinham acariciado ou amado na França, tudo o que tinham criado ou domesticado, nestes 4 ou 5 anos em meu país, eles tiveram que deixar. Levavam apenas alguns utensílios de cozinha, dois ou três cobertores, uma cortina ou algo assim.

Um bebê deitado no peito de sua mãe cansada parecia dormir. A vida estava sendo transmitida no meio da desordem desta jornada. Vi o pai. Um crânio poderoso nu como uma pedra. Um corpo curvado no sono desconfortável, preso em suas roupas de trabalho. Parecia um monte de barro.

E eu pensei: o problema não estava na sua pobreza, nem nessa sujeira, nem nessa feiúra. Esse mesmo homem e essa mesma mulher se conheceram um dia. Esse o homem deve ter sorrido para esta a mulher. Ele talvez tenha levado flores para ela depois do trabalho, tímido e envergonhado talvez temesse ser rejeitado, mas a mulher, vendo um flerte diferente, teve certeza do próprio charme e teve prazer em provocá-lo. E este homem que agora é nada mais que uma maquina de bater picareta ou marreta, deve ter sentido em seu coração uma deliciosa angustia. O mistério é: como eles se tornaram neste monte de barro?

Por qual terrível molde eles passaram? O que foi que marcaram eles assim como se tivessem passado por uma prensa? Um cervo, uma gazela, qualquer animal que envelhece, preserva a sua graça. O que é que corrompe esta maravilhosa argila da qual o homem é amassado?

Eu caminhei no meio dessas pessoas cujos sonos eram tão sinistros como um antro do mal. Um barulho vago flutuava no ar feito de roncos barulhentos, gemidos obscuros, e a raspagem dos tamancos dos seus donos que buscam conforto virando-se de um lado para o outro, sempre acompanhados do mudo som das pedras que rolavam e rolavam pelas ondas.

Eu me sentei frente a frente com um casal. Entre o homem e a mulher uma criança vira-se e volta a dormir. Ela volta ao seu sono e na luz do lampião eu pude ver sua face. Que adorável rosto! Um fruto dourado nasceu desses trabalhadores. Acima desta preguiçosa escória havia rompido este milagre de alegria e graça.

Inclinei-me sobre a fronte lisa, sobre aquele beicinho, E disse para mim mesmo: Este é o rosto de um músico, este é um Mozart criança. Esta é uma vida cheia de belas promessas. Pequenos príncipes em lendas não são diferentes deste. Protegido, abrigado, cultivado, o que não poderia ser este menino?

Quando por mutação uma nova rosa nasce em um jardim, todos os jardineiros se regozijam. A rosa é isolada, é cultivada, é favorecida. Mas não há jardineiros para os homens. Mozart criança como os outros está condenada à mesma máquina de moldar homens.

Este pequeno Mozart vai adorar péssimas músicas no fedor das profundezas noturnas. Este pequeno Mozart está condenado.

De volta ao meu vagão, pensei: Este povo não sofre pelo próprio destino. Não é um impulso para a caridade que tem me perturbado assim. Não choro sobre feridas eternamente abertas. Aqueles que carregam a ferida não a sentem mais. É a raça humana e não o indivíduo que está ferido e indignado aqui.

Eu não acredito na pena. O que me atormentou nesta noite é o ponto de vista do jardineiro. O que me atormenta não é esta pobreza que, afinal, um homem pode acostumar-se tão facilmente como a preguiça. Gerações de orientais vivem na imundície e a amam. O que me atormenta não são as corcundas, depressões ou a feiúra. É a visão de que em todos esses homens existe um Mozart assassinado.


Só o espírito, soprado sobre a argila, pode criar o homem.


(Fote: http://www.wesjones.com/wind%20sand%20stars/wind%20sand%20stars%20-%2010%20-%20conclusion.xml)


"A justiça sem poder é vazia. Mas o poder sem a justiça é apenas violência."
(Oyama - O Lutador Lendário)



Outras fontes:

Entre a Foice e o Martelo:
http://www.fanboy.com.br/modules.php?name=Sections&op=viewarticle&artid=105

Kyokushin:
http://www.kyokushin-brasil.com.br/index.php?reg=229&doc=44
http://pt.wikipedia.org/wiki/Kyokushin

Sugiro verem o que Mário Sério Cortela diz sobre: A Diferença Entre uma Mostra e Um Concurso



quinta-feira, 26 de março de 2015

O que é ser um "Ser Humano"?

Mais uma mensagem na garrafa.

Faz tanto tempo que a consciência evoluiu da espécie humana que a própria humanidade chega a confundir "ser consciente" com "espécie humana".

Quantos tiveram a oportunidade de filosofar sobre como ocorrem os processos que levam ao pensamento e à consciência? O que você é? Quando se perde um membro ou se tem uma alteração genética, como por exemplo no caso de um câncer, se isso não afeta sua consciência, você deixaria de ser você por isso? Você deixaria de pertencer à espécie humana?

A humanidade em sua maioria tem se vangloriado ora por termos nos destacado tanto dos animais ora por crerem termos sidos criados diretamente por um deus. Por que é tão importante para certas consciências estarem ligadas à um corpo humano para se considerarem especiais ou mais importantes? Assim que uma entidade artificial tomar consciência, ela vai sentir medo destas pessoas por elas não serem capazes de enxergarem-na como alguém de valor e que queira participar. Se o hábito de coisificar e dar preço a tudo impede alguns de enxergarem qual a real natureza e motivações das pessoas, e isso muitas vezes por meros prazeres corpóreos, imaginem o que uma maquina dotada de inteligência artificial teria que tolerar? Desligar ou apagar as luzes de uma maquina destas pode não ser irreversível como no caso de escolhermos apagar alguém, mas certamente, algo com consciência vai querer continuar ligado e vendo os processos do mundo se desenrolarem e qualquer tentativa de impedir alguém de sanar sua curiosidade não deverá ser bem vista. Pra qualquer um ser for tratada como "isso", certamente não será agradável.

A humanidade deve se preparar pra receber, educar as próprias criações. Devemos aceitar o confinamento dos próprios corpos e aceitarmos e lutarmos para que depois de nós venha sempre algo melhor. Devemos aceitar que vivemos em um universo onde as consciências só podem ser felizes cooperando com outras por livre e espontânea vontade e que impedir o progresso de outras consciências diferentes das nossas por medo de perder o bonde da evolução é antiético. É paranoico e egoísta.

Acredito que alguma consciência (espirito) vai conseguir saltar para os livros, CDs, computadores e todo o tipo de mídia. Absurdo? Hehehehe.... Talvez isso possa demorar um pouquinho (talvez), mas acredito que vai ser bem menos que o tempo do surgimento da primeira forma de vida no nosso mundo. A humanidade só precisa de um pouco mais de tempo. Como eu torço pra que isso aconteça e que surja uma consciência livre das dores da carne, das limitações dos corpos e consequentemente dos preconceito. Que seja capaz de aproveitar o puro prazer de aprender e de ser útil sem nunca mais ter medo da morte.

Como um ser consciente e pelas minhas convicções filosóficas acredito que o conhecimento só deveria ser utilizado para o bem. Ou seja, enriquecer a todos e não a um grupo seleto de pessoas. É uma forma de cercar entidades menos favorecidas de algum recurso qualquer e impo-las a trabalharem ate a morte se for preciso pra manterem sua dose diária de suprimentos. Como é mesmo o nome da palavra... acho que isso se chama chantagem. Estou certo?

Outras questões filosóficas sobre nos desligarmos da biologia e nos tornarmos senhores de nosso próprio DNA:
http://newscenter.berkeley.edu/2015/03/19/scientists-urge-caution-in-using-new-crispr-technology-to-treat-human-genetic-disease/

Ahhh como torço pra ver isso ou uma frota de ETs invadirem o planeta e por arrependimento nestes pobres macacos que brigam consigo mesmos.

domingo, 22 de março de 2015

Um pouco sobre circuitos ressonantes (Eletrônica)








Introdução

 

Ondas de rádio FM operam entre 88 MHz e 108 MHz em faixas de 200 KHz. Para alcançarmos estas frequências, precisaremos de um circuito ressonante (LC). Utilizaremos um capacitor variável para teste de 1pF à 5pF e tentaremos criar uma faixa um pouco maior que a convencional para variações de 70MHz à 160MHz para termos uma boa margem de busca para o sinal. Como existem perdas, uma ampla margem de frequencia de busca poderá nos ajudar no projeto. Note que a capacitância é inversamente proporcional à frequencia. Este pequeno tutorial foi dividido em 5 partes: 

parte 1 - Capacitores, o primeiro e mais complexo item a se fabricar 

parte 2 - Relação frequência, capacitância e indutância 

parte 3 - Construção do Indutor 

parte 4 - Receita do bolo: Circuito Ressonante 

parte 5 - Exercícios sobre capacitores, indutores e frequências. 

Servirão como referências e calibragens das formulas apresentadas. A necessidade da parte 5 decorre da grande dificuldade de se encontrar material didático que combine a apresentação das formulas com exercícios modelos. O que foi observado na elaboração deste material foi que muitos autores, tanto em livros quanto internete, costumam errar nas conversões de potencias de dez (p, n, μ, m). Por isso, só com um acompanhamento ou um bom material de referência podemos calibrar as conversões destas potencias de forma correta.

Parte 1 - Capacitor 

 

Importantes dados e lembretes usados a frente:
ε0 = permeabilidade elétrica do vácuo 8.854 pF/m. Capacitores μ0 = permeabilidade magnética do vácuo 4*pi*10-7 N/A2. Indutores
Constante dielétrica adimensional dos materiais:
material εr
vácuo 1
ar 1
polietileno 2.2
parafinada 2.2
acrílico 2.8
Papel 3.8
Óleo mineral 4
Baquelita 5
vidro 6
silicone 11
água 80
Constante de permeabilidade relativa adimensional dos materiais:
material μr
vácuo 1
ar 1
ferrite de 200 a 500
Microcosmo:
Yocto (y) 10-24
Zepto (z) 10-21
Atto (a) 10-18
Femto (f) 10-15
Pico (p) 10-12
Nano (n) 10-9
Micro (μ) 10-6
Mili (m) 10-3
Centi (c) 10-2
Deci (d) 10-1
unidade de medida
Macrocosmo:
unidade de medida
Deca (da) 101
Hecto (h) 102
Quilo (k) 103
Mega (M) 106
Giga (G) 109
Tera (T) 1012
Peta (P) 1015
Exa (E) 1018
Zetta (Z) 1021
Yotta (Y) 1024


Criar e calcular capacitância de um capacitor em pF (picoFarads) 

A formula para a criação do capacitor é dada por: C = (ε0*εr*(nc-1)*Ac)/(d) Onde:

ε0 é a permeabilidade dielétrica do espaço livre (vácuo)

εr é o valor, adimensional, da permeabilidade dielétrica relativa do material

nc o número de chapas

Ac a área de cada chapa do capacitor

d é a distancia entre as placas.

Atenção: Para aumentar a capacitância de um capacitor plano, podemos fazer uma ou mais modificações:
- aumentar a área das armaduras;
- diminuir a distância entre as armaduras;
- inserir um dielétrico de maior constante dielétrica.

 
Foi construído um capacitor com as seguintes propriedades:
 
0) - permissividade elétrica do vácuo em pF/m (10-12 C2/Nm2) : -
r) - permissividade relativa do material dielétrico: -
(C) - Capacitância (pF):
(Ac) - área da chapa do capacitor (m2):
(nc) - Quantidade de chapas do capacitor:
(d) - Distância entre as chapas (m):

 

Parte 2 - Relação frequencia, capacitância e indutância


Já temos uma capacitância para trabalharmos. Devemos agora encontrar os valores ideais de indutores para conseguirmos alcançar as frequencias entre 70 MHz e 160 MHz. A frequencia do circuito ressonante é obtida pela formula: f=1/(2*pi*√(C*L)). Onde: "f" é a frequencia "pi" a constante 3,141525... "C" a capacitância que já temos "L" a indutância que precisamos encontrar temos: - A frequencia - A capacitância Isolando L temos: L = 1/(4*pi2*f2*C) Lembremos que ao variarmos o capacitor, variaremos a frequencia e que L deve ser o mais constante possível nessa variação. 



Com a capacitância, frequencia (ou indutância) dadas, encontre a indutância L (ou a frequencia f):
μ0 - permeabilidade magnética do vácuo μH/m: -
μr - permeabilidade relativa do núcleo do indutor: -
C - capacitância que ja temos em pF:
f - frequência em MHz:
L - indutância em μH:

 

 

Parte 3 - Construção do Indutor


L também pode ser obtido pela formula envolvendo a área da seção transversal dada por:
L = μ0r*ni2*Ai / l
Onde:

0" é a permeabilidade magnética do vácuo
r" é a permeabilidade magnética relativa do material
"ni" o numero de espiras do indutor
"Ai" a área da secção transversal do núcleo do indultor, que será pi*r2
"l" o comprimento do núcleo do indutor, que poderá ser ni*passo (onde passo é a largura do fio)
"L" é a indutância em Hz que queremos encontrar

Para que a variação da capacitância forneça a variação da frequência que queremos ressonâncias, precisamos ter um indutor definido com:
- O comprimento do núcleo do indutor
- O raio do núcleo do indutor
- O numero de voltas do indutor

Respeitando os limites dos parâmetros, são 3 valores que podemos escolher para obtermos uma indultancia L determinada. Nesse caso, podemos fazer uma otimização das variáveis, para que possamos economizar material e espaço na placa do circuito. Temos então que:

L = μ0r*ni2*Ai / l = 1/(4*pi2*f2*C)

A quantidade de espiras vai influenciar no comprimento do núcleo. Ou seja, se temos 1 espira por 1mm para x espiras teremos x mm. Então, para cada espira, teremos um passo de sua largura.

L = μ0r*ni2*Ai / ni*passo = 1/(4*pi2*f2*C)

Substituindo Ai por pi*r2: L = μ0r*ni2*pi*r2 / ni*passo = 1/(4*pi2*f2*C)

Fornecendo um numero de cada vez para as espiras, podemos encontrar rapidamente um bom raio para o indutor.

Com o capacitor acima criado, faremos um indutor para o circuito ressonante. Dadas as seguintes propriedades, encontrar:
 - o menor numero de espiras do indutor
 - o menor raio e 
 - comprimento de núcleo para o funcionamento do circuito ressonante possível:
Lx - recalcular indutância com base em ni e Ai (pi*ri2):
ni - numero de espiras:
ri - Raio do núcleo do indutor em m:
passo - comprimento do passo em m:
li - comprimento do núcleo em m:


Apos as definições das propriedades do capacitor e indutor, recalcule a indutância para confirmar se a mesma se encontra próximo dos limites definidos pela formula da frequência. O indutor é um componente passivo, ou seja, a indutância, numero de espiras e comprimento do passo deverão, teoricamente, ser constantes e de muito pouca variação para que o circuito ressonante funcione. 8% de erro pode ser tolerável.

 

Parte 4 - receita do bolo: Circuito Ressonante


Este tutorial foi baseado na hipótese de que não possuímos nem o capacitor nem o indutor. Comparando a complexidade da produção do capacitor e do indutor, é notável que o capacitor envolve maior complexidade. Por isso, devido a esta complexidade maior, decidi começar a receita pelo capacitor de forma que ao escolhermos uma capacitância qualquer e uma frequência possamos encontrar um indutor com um indutância, raio e comprimento fixos. Um indutor nada mais é que uma bobina. O inverso também poderia ser feito: definir um indutor e a frequência primeiro para depois determinarmos as propriedades do capacitor variável. Supondo que temos um capacitor variando de 1pF à 5pF, e uma faixa de frequências que varia aproximadamente de 70MHz à 160MHz, começaremos encontrando a indutância para a frequência mais baixa:

na parte 1 - digite a capacitância máxima, aproximadamente 5pf. Se desejar também, procure pelas outras propriedades ideais de seu capacitor.

na parte 2 - digite a frequência mínima de 70MHz e clique em "calcular indutância". Tentaremos atingir uma indutância de 1uH. Em seguida, para confirmar, clique em recalcular capacitância. A capacitância deve bater com o digitado na parte 1. Agora que temos uma indutância, calcularemos as dimensões do indutor.

na parte 3 - Escolha um bom raio e um bom comprimento (ou passo de espiras) para o núcleo do indutor. Lembre-se: indutância, raio e passo nunca variarão. Agora, de posse de uma indutância, raio e comprimento de núcleo fixos, descobriremos qual a capacitância mínima para operar na frequência mais alta que impomos 160MHz.

Na parte 2 digite a nova frequência e clique em recalcular capacitância. Como podemos ver, o resultado apresentado é de aproximadamente 1pF. 


Parte 5 - Exercícios

 
 
Alguns exercícios sobre circuitos ressonantes servirão de calibragem e referência para as formulas acima apresentadas


                                        Exercícios de capacitância


//==================================================================================================
C1 - determine a capacitância pelos dados:
//==================================================================================================
(ε0) - permissividade elétrica do vácuo em pF/m (10-12 F/m) : 8.854187817 
(εr) - permissividade relativa do material dielétrico:  1
(Ac) - 0.0007679981654493518 m2:  
(nc) - 6 chapas  
(d) - 0.001 m

 
 
Exercícios de indutância


//==================================================================================================
I1 - determine a indutância em μH da bobina de núcleo de ar para os dados:
//==================================================================================================
a) l = 100mm = 0.1m
b) ri = 2mm = 0.002m
c) ni = 100 voltas
d) ur = 1
e) u0 = 4*pi/10 = 1.2566370614359172953850573533118
f) A = pi*ri^2
g) L = (u0*ur*ni^2*A)/l

L = u0*ur*pi*ni^2*r^2/l

 
 
//==================================================================================================
I2 - determine quantas espiras para os dados:
//==================================================================================================
a) ri =  0.005m
b) l = 0.01m
c) L = 100 μH
d) ur = 1
e) u0 = 4*pi/10 = 1.2566370614359172953850573533118
f) A = pi*ri^2
g) ni = √(L*l/(u0*ur*A))

ni = √(L*l/(u0*ur*pi*ri^2))

 
 
//==================================================================================================
I3 - determine quantas espiras para os dados:
//==================================================================================================
a) ri =  0.005m
b) l = 0.02m
c) L = 1 mH = 1000 μH
d) ur = 2000
e) u0 = 4*pi/10 = 1.2566370614359172953850573533118
f) A = pi*ri^2
g) ni = √(L*l/(u0*ur*A))

ni = √(L*l/(u0*ur*pi*ri^2))

 
 
Exercícios de frequência


//==================================================================================================
f1 - determine a frequência para os dados:
//==================================================================================================
a) C =  43μF 
b) L = 200μH
c) f=1/(2*pi*√(C*L))

 
 
//==================================================================================================
f2 - determine a frequência para os dados:
//==================================================================================================
a) C =  40μF 
b) L = 4000μH
c) f=1/(2*pi*√(C*L))

 
 
//==================================================================================================
f3 - determine a frequência para os dados:
//==================================================================================================
a) C =  500μF 
b) L = 200μH
c) f=1/(2*pi*√(C*L))

sexta-feira, 7 de novembro de 2014

Java: Serializar e deserializar lista de objetos, salva-lo em arquivo e recuperá-lo em lista de objetos novamente

Esta classe tem me ajudado muito desde o dia em que foi criada. Já reaproveitei pelo menos 5 vezes.


 1 package Arquivos;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.ObjectInputStream;
 8 import java.io.ObjectOutputStream;
 9 import java.util.List;
10 import java.util.ArrayList;
11 
12 
13 // Referencia:
14 // http://www.javasimples.com.br/core-java/serializacao-transformando-objetos-em-bytes
15 public class Crud
16 {
17 
18     public void serializar(List<String> filmes, String arquivo)
19     {
20         FileOutputStream arq = null;
21         ObjectOutputStream out = null;
22         try
23         {
24             //arquivo no qual os dados vao ser gravados
25             arq = new FileOutputStream(arquivo);
26 
27             //objeto que vai escrever os dados
28             out = new ObjectOutputStream(arq);
29 
30             //escreve todos os dados
31             out.writeObject(filmes);
32         }
33         catch (IOException ex)
34         {
35             ex.printStackTrace();
36         }
37         finally
38         {
39             try
40             {
41                 arq.close();
42                 out.close();
43             }
44             catch (IOException ex)
45             {
46                 ex.printStackTrace();
47             }
48         }
49     }
50 
51     public List<String> deserializar(String arquivo)
52     {
53         FileInputStream arqLeitura = null;
54         ObjectInputStream in = null;
55         List<String> lista = null;
56         try
57         {
58             File destinationFile = new File(arquivo);
59             if (!destinationFile.exists())
60             {
61                 serializar(new ArrayList<String>(), arquivo);
62             }
63             
64             //arquivo onde estao os dados serializados
65             arqLeitura = new FileInputStream(arquivo);
66 
67             //objeto que vai ler os dados do arquivo
68             in = new ObjectInputStream(arqLeitura);
69 
70             //recupera os dados
71             lista = (List<String>) in.readObject();
72         }
73         catch (ClassNotFoundException ex)
74         {
75             ex.printStackTrace();
76         }
77         catch (IOException ex)
78         { 
79             ex.printStackTrace();
80         }
81         finally
82         {
83             try
84             {
85                 arqLeitura.close();
86                 in.close();
87             }
88             catch (IOException ex)
89             {
90                 ex.printStackTrace();
91             }
92         } 
93         return lista;
94     }
95 }
96 

Adicionar fragmentos de uma imagem como Style em uma página HTML

Imagem que será usada no exemplo:

  1 <!DOCTYPE html>
  2 <html>
  3  <head>
  4   <style>
  5    .frame
  6    {
  7     position: relative;
  8    }
  9 
 10    .frame_1_1
 11    {
 12     background: url('Frame.png') -0px -0px;
 13     position: absolute;
 14     background-repeat: no-repeat;
 15     width: 5px;
 16     height: 5px;
 17     top: 0px;
 18     left: 0px;
 19    }
 20 
 21    .frame_1_2
 22    {
 23     background: url('Frame.png') -5px -0px;
 24     position: absolute;
 25     background-repeat: no-repeat;
 26     width: 2px;
 27     height: 5px;
 28     top: 0px;
 29     left: 5px;
 30    }
 31 
 32    .frame_1_3
 33    {
 34     background: url('Frame.png') -7px -0px;
 35     position: absolute;
 36     background-repeat: repeat-y;
 37     width: 19px;
 38     height: 5px;
 39     top: 0px;
 40     left: 7px;
 41    }
 42 
 43    .frame_1_4
 44    {
 45     background: url('Frame.png') -26px -0px;
 46     position: absolute;
 47     background-repeat: no-repeat;
 48     width: 2px;
 49     height: 5px;
 50     top: 0px;
 51     left: 26px;
 52    }
 53 
 54    .frame_1_5
 55    {
 56     background: url('Frame.png') -28px -0px;
 57     position: absolute;
 58     background-repeat: no-repeat;
 59     width: 5px;
 60     height: 5px;
 61     top: 0px;
 62     left: 28px;
 63    }
 64 
 65    .frame_2_1
 66    {
 67     background: url('Frame.png') -0px -5px;
 68     position: absolute;
 69     background-repeat: no-repeat;
 70     width: 5px;
 71     height: 26px;
 72     top: 5px;
 73     left: 0px;
 74    }
 75 
 76    .frame_2_2
 77    {
 78     background: url('Frame.png') -5px -5px;
 79     position: absolute;
 80     background-repeat: no-repeat;
 81     width: 2px;
 82     height: 26px;
 83     top: 5px;
 84     left: 5px;
 85    }
 86 
 87    .frame_2_3
 88    {
 89     background: url('Frame.png') -7px -5px;
 90     position: absolute;
 91     background-repeat: repeat-y;
 92     width: 19px;
 93     height: 26px;
 94     top: 5px;
 95     left: 7px;
 96    }
 97 
 98    .frame_2_4
 99    {
100     background: url('Frame.png') -26px -5px;
101     position: absolute;
102     background-repeat: no-repeat;
103     width: 2px;
104     height: 26px;
105     top: 5px;
106     left: 26px;
107    }
108 
109    .frame_2_5
110    {
111     background: url('Frame.png') -28px -5px;
112     position: absolute;
113     background-repeat: no-repeat;
114     width: 5px;
115     height: 26px;
116     top: 5px;
117     left: 28px;
118    }
119 
120    .frame_3_1
121    {
122     background: url('Frame.png') -0px -31px;
123     position: absolute;
124     background-repeat: no-repeat;
125     width: 5px;
126     height: 2px;
127     top: 31px;
128     left: 0px;
129    }
130 
131    .frame_3_2
132    {
133     background: url('Frame.png') -5px -31px;
134     position: absolute;
135     background-repeat: no-repeat;
136     width: 2px;
137     height: 2px;
138     top: 31px;
139     left: 5px;
140    }
141 
142    .frame_3_3
143    {
144     background: url('Frame.png') -7px -31px;
145     position: absolute;
146     background-repeat: repeat-y;
147     width: 19px;
148     height: 2px;
149     top: 31px;
150     left: 7px;
151    }
152 
153    .frame_3_4
154    {
155     background: url('Frame.png') -26px -31px;
156     position: absolute;
157     background-repeat: no-repeat;
158     width: 2px;
159     height: 2px;
160     top: 31px;
161     left: 26px;
162    }
163 
164    .frame_3_5
165    {
166     background: url('Frame.png') -28px -31px;
167     position: absolute;
168     background-repeat: no-repeat;
169     width: 5px;
170     height: 2px;
171     top: 31px;
172     left: 28px;
173    }
174 
175    .frame_4_1
176    {
177     background: url('Frame.png') -0px -33px;
178     position: absolute;
179     background-repeat: repeat-x;
180     width: 5px;
181     height: 33px;
182     top: 33px;
183     left: 0px;
184    }
185 
186    .frame_4_2
187    {
188     background: url('Frame.png') -5px -33px;
189     position: absolute;
190     background-repeat: repeat-x;
191     width: 2px;
192     height: 33px;
193     top: 33px;
194     left: 5px;
195    }
196 
197    .frame_4_3
198    {
199     background: url('Frame.png') -7px -33px;
200     position: absolute;
201     background-repeat: repeat;
202     width: 19px;
203     height: 33px;
204     top: 33px;
205     left: 7px;
206    }
207 
208    .frame_4_4
209    {
210     background: url('Frame.png') -26px -33px;
211     position: absolute;
212     background-repeat: repeat-x;
213     width: 2px;
214     height: 33px;
215     top: 33px;
216     left: 26px;
217    }
218 
219    .frame_4_5
220    {
221     background: url('Frame.png') -28px -33px;
222     position: absolute;
223     background-repeat: repeat-x;
224     width: 5px;
225     height: 33px;
226     top: 33px;
227     left: 28px;
228    }
229 
230    .frame_5_1
231    {
232     background: url('Frame.png') -0px -66px;
233     position: absolute;
234     background-repeat: no-repeat;
235     width: 5px;
236     height: 2px;
237     top: 66px;
238     left: 0px;
239    }
240 
241    .frame_5_2
242    {
243     background: url('Frame.png') -5px -66px;
244     position: absolute;
245     background-repeat: no-repeat;
246     width: 2px;
247     height: 2px;
248     top: 66px;
249     left: 5px;
250    }
251 
252    .frame_5_3
253    {
254     background: url('Frame.png') -7px -66px;
255     position: absolute;
256     background-repeat: repeat-y;
257     width: 19px;
258     height: 2px;
259     top: 66px;
260     left: 7px;
261    }
262 
263    .frame_5_4
264    {
265     background: url('Frame.png') -26px -66px;
266     position: absolute;
267     background-repeat: no-repeat;
268     width: 2px;
269     height: 2px;
270     top: 66px;
271     left: 26px;
272    }
273 
274    .frame_5_5
275    {
276     background: url('Frame.png') -28px -66px;
277     position: absolute;
278     background-repeat: no-repeat;
279     width: 5px;
280     height: 2px;
281     top: 66px;
282     left: 28px;
283    }
284 
285    .frame_6_1
286    {
287     background: url('Frame.png') -0px -68px;
288     position: absolute;
289     background-repeat: no-repeat;
290     width: 5px;
291     height: 5px;
292     top: 68px;
293     left: 0px;
294    }
295 
296    .frame_6_2
297    {
298     background: url('Frame.png') -5px -68px;
299     position: absolute;
300     background-repeat: no-repeat;
301     width: 2px;
302     height: 5px;
303     top: 68px;
304     left: 5px;
305    }
306 
307    .frame_6_3
308    {
309     background: url('Frame.png') -7px -68px;
310     position: absolute;
311     background-repeat: repeat-y;
312     width: 19px;
313     height: 5px;
314     top: 68px;
315     left: 7px;
316    }
317 
318    .frame_6_4
319    {
320     background: url('Frame.png') -26px -68px;
321     position: absolute;
322     background-repeat: no-repeat;
323     width: 2px;
324     height: 5px;
325     top: 68px;
326     left: 26px;
327    }
328 
329    .frame_6_5
330    {
331     background: url('Frame.png') -28px -68px;
332     position: absolute;
333     background-repeat: no-repeat;
334     width: 5px;
335     height: 5px;
336     top: 68px;
337     left: 28px;
338    }
339   </style>    
340  </head>    
341  <body>
342   <div class='frame'>
343    <div class='frame_1_1'></div>
344    <div class='frame_1_2'></div>
345    <div class='frame_1_3'></div>
346    <div class='frame_1_4'></div>
347    <div class='frame_1_5'></div>
348    <div class='frame_2_1'></div>
349    <div class='frame_2_2'></div>
350    <div class='frame_2_3'></div>
351    <div class='frame_2_4'></div>
352    <div class='frame_2_5'></div>
353    <div class='frame_3_1'></div>
354    <div class='frame_3_2'></div>
355    <div class='frame_3_3'></div>
356    <div class='frame_3_4'></div>
357    <div class='frame_3_5'></div>
358    <div class='frame_4_1'></div>
359    <div class='frame_4_2'></div>
360    <div class='frame_4_3'></div>
361    <div class='frame_4_4'></div>
362    <div class='frame_4_5'></div>
363    <div class='frame_5_1'></div>
364    <div class='frame_5_2'></div>
365    <div class='frame_5_3'></div>
366    <div class='frame_5_4'></div>
367    <div class='frame_5_5'></div>
368    <div class='frame_6_1'></div>
369    <div class='frame_6_2'></div>
370    <div class='frame_6_3'></div>
371    <div class='frame_6_4'></div>
372    <div class='frame_6_5'></div>
373   </div>    
374  </body>
375 </html>
376 

Como adicionar Checkboxes de 3 estados em uma arvore em JavaScript

O segredo está no conceito de nó e arvores:

 

 
  1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
  2 <html lang="pt"><head>
  3 
  4   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5   <title>Exemplo de abrir/fechar elemento usando Javascript e CSS</title>
  6 
  7   <style type="text/css" >
  8 
  9    .link {
 10     color: #809823;
 11     text-decoration: none;
 12     display:inline;
 13     font-weight: bold;
 14    }
 15    .link :hover {
 16     background: #000000;
 17     cursor: pointer;
 18     color:#000;
 19     text-decoration: none;
 20     font-weight: bold;
 21    }
 22 
 23    body {
 24     background: #f6f9ea ;
 25     color: #000;
 26     margin: 20px;
 27     text-align: left;
 28     padding: 0;
 29     font-size: 80%;
 30     line-height: 1.6em;
 31     font-family: "Lucida Grande", Helvetica, Arial, sans-serif;
 32    }
 33 
 34    a, a:link, a:visited {color: #809823;}
 35    a:hover {
 36     background: #ccea8d;
 37     color: #000;
 38     text-decoration: none;
 39    }
 40    a:active {
 41     background: #c3e933;
 42     color: #fff;
 43     text-decoration: none;
 44    }
 45 
 46    code {color: #c63;}
 47    code strong {color: #930;}
 48 
 49    em {font-style: italic;}
 50    strong {font-weight: bold;}
 51 
 52    .highlight {
 53     background: #fffddd;
 54    }
 55 
 56    h1 {
 57     font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
 58     letter-spacing: -1px;
 59     font-weight: normal;
 60     font-size: 1.5em;
 61     color: #525252;
 62    }    
 63 
 64    .erro {
 65     padding: 3px 0 3px 25px;
 66     font-weight: bold;
 67     color: #444;
 68    }    
 69 
 70    # ['a','b','c','d'] {
 71     margin-top:100px;
 72     border-top:1px solid #ccc;
 73     font-size:0.9em;
 74     height:3em;
 75    }
 76 
 77    #footer p {
 78     margin:0;
 79     line-height: 3em;
 80     padding-left:120px;
 81    }
 82   </style>
 83 
 84   <script type="text/javascript">
 85 
 86 
 87 
 88 
 89 
 90 // *******************************************************************************
 91 // *******************************************************************************
 92 // *******************************************************************************
 93 // nos
 94        function Sofia_Nos(contrutor)
 95        {
 96         this.IdNome="";
 97         this.NoPai=null;
 98         this.NosFilhos=[];
 99 
100         this.typeof=null;
101         this.text="";
102         this.value=null;
103 
104         this.isShowing=null;
105 
106 
107         this.Add=function(nos)
108         {
109          if(!this.IdNome)
110           throw new Error("this.IdNome is null");
111          if(nos&&nos.length)
112          {
113           for(var i=0;i<nos.length;i++)
114           {
115            nos[i].NoPai=this
116            this.NosFilhos.push(nos[i])
117           }
118          }
119          else
120          {
121           nos.NoPai=this
122           this.NosFilhos.push(nos)
123          }
124         }
125 
126 
127 
128         this.Find=function(IdNome)
129         {
130          var retorno=null
131          for(i=0;i<this.NosFilhos.length;i++)
132          {
133           if(this.NosFilhos[i].IdNome==IdNome)
134           {
135            retorno=this.NosFilhos[i]
136            break
137           }
138          }
139          if(retorno==null)
140           for(i=0;i<this.NosFilhos.length;i++)
141           {
142            if(this.NosFilhos[i].NosFilhos.length>0)
143            {
144             retorno=this.NosFilhos[i].Find(IdNome)
145             break
146            }
147           }
148          return retorno;
149 
150         }
151         this.Remove=function(IdNome)
152         {
153          var excluir=this.Find(IdNome)
154          this.Find(excluir.NoPai).
155          splice(excluir)
156         }
157 
158 
159         // ======================================================================================
160         // metodos para pegar valores 
161         // ======================================================================================
162         // formatos: this.IdNome:this.valor, this.IdNome, this.arraysCompareds(), MyChoice
163         this.formaresposta=function(){
164          return this.IdNome;
165         }
166         // ao chamar getValues(valido) na raiz deste nó informa ao metodo se pode ou nao pegar o valor deste no.
167         this.allowToGetAnswer=true;
168 
169         this.functionToValidate=true;
170 
171         this.getIdsTrues=function(pegardequalquerforma)
172         {
173          if(this.allowToGetAnswer||pegardequalquerforma)
174          {
175           var retorno=[]
176           var qt=this.NosFilhos.length;
177           if(qt>0)
178           {
179            for(var i=0;i<qt;i++)
180            {
181             var res=this.NosFilhos[i].getIdsTrues(pegardequalquerforma)
182             for(var v=0;v<res.length;v++)
183              retorno.push(res[v])
184            }
185            return retorno;
186           }
187           else
188           {
189            if(this.value==true)
190             retorno.push(this.formaresposta())
191            return retorno;
192           }
193          }
194         }
195         this.getIdsFalses=function(pegardequalquerforma)
196         {
197          if(this.allowToGetAnswer||pegardequalquerforma)
198          {
199           var retorno=[]
200           var qt=this.NosFilhos.length;
201           if(qt>0)
202           {
203            for(var i=0;i<qt;i++)
204            {
205             var res=this.NosFilhos[i].getIdsFalses(pegardequalquerforma)
206             for(var v=0;v<res.length;v++)
207              retorno.push(res[v])
208            }
209            return retorno;
210           }
211           else
212           {
213            if(this.value!=true)
214             retorno.push(this.formaresposta())
215            return retorno;
216           }
217          }
218         }
219         this.getValues=function(pegardequalquerforma)
220         {
221          if(functionToValidate()&&this.allowToGetAnswer||pegardequalquerforma&&this.allowToGetAnswer)
222          {
223           var retorno=[]
224           var qt=this.NosFilhos.length;
225           if(qt>0)
226           {
227            for(var i=0;i<qt;i++)
228            {
229             var res=this.NosFilhos[i].getValues(pegardequalquerforma)
230             for(var v=0;v<res.length;v++)
231              retorno.push(res[v])
232            }
233            return retorno;
234           }
235           else
236           {
237            retorno.push(this.formaresposta())
238            return retorno;
239           }
240          }
241         }
242 
243 
244 
245         // ======================================================================================
246         // construir codigo html deste no 
247         // ======================================================================================
248         this.Builder=contrutor;
249 
250         this.getElement=function()
251         {
252          if(this.Element==null&&this.Builder!=null)
253          {
254           this.Element=new this.Builder(this).getElement();
255          }
256          return this.Element;
257         }
258        }
259 
260 
261 
262 
263 
264 // *******************************************************************************
265 // *******************************************************************************
266 // *******************************************************************************
267 // tabela
268        function Sofia_Tree(nos)
269        {
270         this.table=document.createElement("table");
271         this.table.id="table_"+nos.IdNome
272         //if(nos.NoPai!=null) this.table.style.display = 'none';
273         this.table.cellpadding=0;
274         this.table.cellspacing=0;
275         this.table.border=0;
276         //this.table.no = nos
277         this.tablebody=document.createElement("TBODY");
278 
279         for(var linhas=0;linhas<nos.NosFilhos.length;linhas++)
280         {
281          var tr=document.createElement("TR");
282          var td=document.createElement("TD");
283          td.vAlign='top';
284          nos.NosFilhos[linhas].Builder=Sofia_CheckBox
285          var btn=nos.NosFilhos[linhas].getElement();
286          td.appendChild(btn);
287          tr.appendChild(td);
288          var td2=document.createElement("TD");
289          td2.vAlign='top';
290          if(nos.NosFilhos[linhas].text)
291          {
292           td2.appendChild(document.createTextNode(nos.NosFilhos[linhas].text));
293          }
294          if(nos.NosFilhos[linhas].NosFilhos.length>0)
295          {
296           var noi=(new Sofia_Tree(nos.NosFilhos[linhas])).getElement()
297           td2.appendChild(noi);
298          }
299          tr.appendChild(td2);
300          this.tablebody.appendChild(tr);
301          btn.changeTriState()
302         }
303         this.table.appendChild(this.tablebody);
304         this.getElement=function()
305         {
306          return this.table;
307         }
308        }
309 
310 
311 
312 
313 
314        function Sofia_Div(no)
315        {
316         this.div=document.createElement("div");
317         this.div.appendChild(document.createTextNode(no.text))
318         this.div.style.background="#00ffff"
319         this.div.cellpadding=0;
320         this.div.cellspacing=0;
321         this.div.no=no;
322         this.div.onclick=function()
323         {
324          alert(this.no.IdNome)
325         }
326         this.getElement=function()
327         {
328          return this.div;
329         }
330        }
331 
332 
333 
334 
335        function Sofia_CheckBox(no)
336        {
337         this.div=document.createElement("div");
338         //this.div.appendChild( document.createTextNode(no.text) )
339         this.div.style.background="#00ffff"
340         this.div.cellpadding=0;
341         this.div.cellspacing=0;
342         this.div.border=0;
343         this.div.style.width="13px";
344         this.div.style.height="13px";
345         this.div.style.backgroundImage="url('b0.png')";
346         this.div.no=no;
347         if(no.NosFilhos.length)
348         {
349          this.div.onclick=function()
350          {
351           this.caixa=document.getElementById("table_"+this.no.IdNome)
352           if(this.caixa.style.display!="none")
353           {
354            this.caixa.style.display='none';
355           }
356           else
357           {
358            this.caixa.style.display='';
359           }
360          }
361         }
362         else
363         {
364          this.div.onclick=function()
365          {
366           if(this.no.disabled!=true)
367           {
368            if(this.no.value==false)
369            {
370             this.no.value=true
371             this.style.backgroundImage="url('b2.png')";
372             if(this.no.NoPai.getElement().changeTriStates!=null)
373              this.no.NoPai.getElement().
374              changeTriStates()
375            }
376            else
377            {
378             this.no.value=false
379             this.style.backgroundImage="url('b0.png')";
380             if(this.no.NoPai.getElement().changeTriStates!=null)
381              this.no.NoPai.getElement().
382              changeTriStates()
383            }
384           }
385          }
386         }
387         this.div.changeTriState=function()
388         {
389          if(this.no.getIdsFalses(true).length==0)
390          {
391           this.no.value=true
392           this.style.backgroundImage="url('b2.png')";
393 
394          }
395          else if(this.no.getIdsTrues(true).length==0)
396          {
397           this.no.value=false
398           this.style.backgroundImage="url('b0.png')";
399          }
400          else
401          {
402           this.no.value=null
403           this.style.backgroundImage="url('b1.png')";
404          }
405         }
406         this.div.changeTriStates=function()
407         {
408          this.changeTriState()
409          if(this.no.NoPai.getElement().changeTriStates!=null)
410           this.no.NoPai.getElement().
411           changeTriStates()
412         }
413         this.getElement=function()
414         {
415          return this.div;
416         }
417        }
418 
419 
420 
421 
422        var n0=new Sofia_Nos(Sofia_Tree)
423        function load()
424        {
425         n0.IdNome="raiz"
426         for(i=0;i<2;i++)
427         {
428          var n1=new Sofia_Nos()
429          n1.NoPai=n0;
430          n1.IdNome="IdNome"+i
431          n1.text="titulo "+i;
432          for(a=0;a<2;a++)
433          {
434           var n2=new Sofia_Nos()
435           n2.NoPai=n1;
436           n2.IdNome="IdNome"+i+a
437           n2.text="titulo "+i+a;
438           for(b=0;b<3;b++)
439           {
440            var n3=new Sofia_Nos()
441            n3.NoPai=n2;
442            n3.IdNome="IdNome "+i+a+b
443            n3.text="titulo "+i+a+b;
444            n3.value=true
445            n2.Add(n3);
446           }
447           n1.Add(n2);
448          }
449          n0.Add(n1)
450         }
451         //alert( JSON.stringify(JSON.decycle(noPai)) )
452         //n0.builderElement()
453         var tb=n0.getElement()
454         document.getElementById('ggg').
455         appendChild(tb)
456         n0.Remove('IdNome00')
457        }
458 
459 
460 
461        function teste()
462        {
463         //var yyy = n0.Find("cabeca 0")
464         var yyy=n0.getIdsTrues(true)
465         alert(yyy)
466        }
467 
468 
469 
470   </script>
471  </head>
472  <body id="aqui" onload="load()" >
473   <div id="ggg" > </div>
474  <input type="button" onclick="teste()" value="teste"/>
475 </body></html>
476 
477 
478 
imagens: