terça-feira, 24 de maio de 2011

Shell script de inserção em base de dados MYSQL

Como estou com o saco meu cheio ... Não achando mais o erro resolvi colocar meu shell script parcial baseado em http://thobias.org/doc/shell_bd.html"

#!/bin/bash
#EsseShellScript=/home/danilo/scripts/testeSGDB.sh ;
#$/bin/bash /home/danilo/scripts/testeSGDB.sh ;
arquivoComOsDadosJaFormatados=/home/danilo/Documentos/compartilhadaSAMBA0777/testes/arquivoFormatadoTestes.txt ;
arquivo_SQL_gerado=/home/danilo/Documentos/compartilhadaSAMBA0777/testes/sql_gerado.sql ;
usuarioDoBD=shell ;
senhadousuarioDoBD=shell ;
usuarioDoBD2=root ;
senhadousuarioDoBD2=udesc ;
dBdousuarioDoBD=mysql_bash ;
Agenda=agenda ;
Nome=nome ;
#Outra possibilidade é fazer um script para ler do teclado uma nova entrada para a base:

# prompt> cat input_3.sh
#!/bin/bash
#
# Repare que a data para o MySQL é aaaa-mm-dd
#
#
# Testa se a data recebida, no formato do MySQL, é válida ou não
#checa_data(){
#[ $(echo "$1" | sed 's,[12][0-9]\{3\}/\(0[1-9]\|1[012]\)/\(0[1-9]\|[12][0-9]\|3[01]\),,') ] &&
#return 1 || return 0
#}
#
#echo "Entre com os dados para incluir na agenda"
#echo
#read -p "Nome : " nome
#read -p "Telefone : " fone
#read -p "E-Mail : " mail
#read -n2 -p "Aniversário (dia/mes/ano): " dia
#read -n2 -p "/" mes
#read -n4 -p "/" ano
#echo

#colocamos na variável aniver a data no formato do MySQL
#aniver="$ano/$mes/$dia"
#echo

# se a data não for nula
#if [ "$ano" -o "$mes" -o "$dia" ];then
# testa se a data é válida
# checa_data "$aniver" || { echo "ERRO: Data de aniversário inválida";exit; }
#fi

# não aceitamos nomes nulo
# [ "$nome" ] || { echo "ERRO: nome inválido";exit; }

# read -p "Deseja Incluir (s/n)? "
#if [ "$REPLY" = "s" ];then
# mysql -u thobias -e\
# "INSERT INTO agenda VALUES('$nome','$fone','$mail','$aniver')" $dBdousuarioDoBD
#
# [ "$?" = "0" ] && echo "Operacao OK" || echo "Operação: ERRO"
#fi
#
#prompt>
#
#Executando:
#
# prompt> ./input_3.sh
#Entre com os dados para incluir na agenda
#
#Nome : Formiga Atomica
#Telefone :
#E-Mail : formiga@formigueiro.com
#Aniversário (dia/mes/ano): 12/12/1930
#
#Deseja Incluir (s/n)? s
#Operacao OK
#prompt>
#

function clearSCREEN()
{
clear; clear; clear;
}
function explicacaoDoqueFoiFeito()
{
echo "";
}
function funcaoCabecario()
{
echo -e "\n Exemplo de shell script simples para demonstrar a conexão com banco de dados mysql \n Por Danilo Matias. \n Nenhum direito reservado, nenhuma restrição relacionada à distribuição dele , apenas não me responsabilizo pela utilização desse shell script em qualquer ambiente que seja.\n Ele apenas serve para provar que sei programar em shell script, e caso alguém queira implementar um sistema com acesso a banco de dados em shell script, pode verificar um exemplo de como se faz \n \
Apenas lembrando, que o acesso a banco da dados em shell script é o acesso que o usuário pode fazer com uma linha de comando em modo texto, devido a isso, ele é extremamente flexível\n \
Tomara que seja útil para mais alguém, pois para mim está sendo para demonstrar as funcionalidades, tudo o que foi feito aqui, foi baseado no que o colega Thobias Salazar Trevisan colocou em seu sítio (Site, homepage, página web, página de internet ...), \n http://thobias.org/doc/shell_bd.html \
\n \
Qualquer dúvida acesse o site do Thobias, muito bom mesmo!\
\n Um grande abraço !\
\n" ;
#firefox http://thobias.org/doc/shell_bd.html http://www.youtube.com/watch?v=MVO8OO0Y0UU&feature=related

explicacaoDoqueFoiFeito

}
function inserirApartirDeArquivoPreviamenteFormatado(){
IFS=:
# a linha acima indica que o separador é o ":"
while read nome fone mail aniver;do
echo
echo "Nome: $nome"
echo "Telefone: $fone"
echo "mail: $mail"
echo "Aniversário: $aniver"

mysql -u $usuarioDoBD -f -e \
"INSERT INTO $Agenda VALUES('$nome','$fone','$mail','$aniver')" $dBdousuarioDoBD

[ "$?" = "0" ] && echo "Operacao OK" || echo "Operação: ERRO"
done < $arquivoComOsDadosJaFormatados
}

function criarArquivo_SQL_ApartirDeArquivoPreviamenteFormatado(){
IFS=:
# a linha acima (IFS=:) indica que o separador é o ":"
while read nome fone mail aniver;do
echo "INSERT INTO $Agenda VALUES('$nome','$fone','$mail','$aniver');">>$arquivo_SQL_gerado ;
done < $arquivoComOsDadosJaFormatados
}
function inserirDadosApartirDeArquivo_SQL_gerado(){
mysql -u $usuarioDoBD -f $dBdousuarioDoBD < $arquivo_SQL_gerado ;
}
function inserirDadosApartirDeArquivo_SQL_gerado2(){
criarArquivo_SQL_ApartirDeArquivoPreviamenteFormatado
inserirDadosApartirDeArquivo_SQL_gerado
}

function inserirDadosApartirDeArquivo_SQL_gerado3_1(){
cat $arquivo_SQL_gerado | mysql -u $usuarioDoBD -f $dBdousuarioDoBD
}
function inserirDadosApartirDeArquivo_SQL_gerado3(){
criarArquivo_SQL_ApartirDeArquivoPreviamenteFormatado
inserirDadosApartirDeArquivo_SQL_gerado3_1
}
function select_Agenda_simples1(){
# essa função não está funcionando direito, para não perder muito tempo partirei para o resto
#tente achar o erro
# Testa pra ver se é procura exata ou parcial
echo -e "\n select_Agenda_simples1(\"$1\") \n"
if [ "$1" = "${*#*\*}" ];then
# Faz pesquisa exata do nome
mysql -u $usuarioDoBD -e\
"SELECT * FROM $Agenda WHERE $Nome = '$*'" $dBdousuarioDoBD

# Procura por partes do nome
else
# ${*//\\*/%} = troca todos * por %, que é o curinga do LIKE
mysql -u $usuarioDoBD -e\
"SELECT * FROM $Agenda WHERE $Nome LIKE '${*//\\*/%}'" $dBdousuarioDoBD ;
echo "caiu no else ( ${*//\\*/%} )"
fi


}
function testar_select_Agenda_simples1(){



select_Agenda_simples1 "*Super*" ;
select_Agenda_simples1 "Super*" ;
select_Agenda_simples1 "Super" ;
select_Agenda_simples1 "*super*" ;
select_Agenda_simples1 "super*" ;
select_Agenda_simples1 "super" ;
select_Agenda_simples1 "super man" ;

select_Agenda_simples1 "super man" ;
select_Agenda_simples1 "bat" ;
select_Agenda_simples1 "*bat*" ;
select_Agenda_simples1 "*atm*" ;
select_Agenda_simples1 "\"*\"" ;
select_Agenda_simples1 "*" ;

}
# Testa se a data recebida, no formato do MySQL, é válida ou não
function checa_data(){
[ $(echo "$1" | sed 's,[12][0-9]\{3\}/\(0[1-9]\|1[012]\)/\(0[1-9]\|[12][0-9]\|3[01]\),,') ] &&
return 1 || return 0
}
# Retorna quantas linhas a query SQL alterou na base de dados
function linha(){
sed -n '/^Query/s/.*, \([0-9]\+\) row.*/\1/p'
}


function atualizar_Registro_simples1(){


}
function testar_atualizar_Registro_simples1(){


}


function funcao100(){
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "create database IF NOT EXISTS mysql_bash" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n"
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "GRANT ALL PRIVILEGES ON *.* TO shell@localhost IDENTIFIED BY 'shell' WITH GRANT OPTION" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
# mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "GRANT ALL PRIVILEGES ON *.* TO shell@'%' IDENTIFIED BY 'shell' WITH GRANT OPTION" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "GRANT CREATE, DROP, SELECT, INSERT, UPDATE, DELETE ON mysql_bash.* TO shell@localhost" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e " GRANT ALL PRIVILEGES ON *.* TO shell@'%'" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e " flush privileges" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "select User, Host from mysql.user " $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "show databases " $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "show full processlist" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#echo -e "\n\n Tableas da Base: mysql_bash" ;mysql -h localhost -u $usuarioDoBD -e "show tables" $dBdousuarioDoBD ;echo -e "\n\n $?\n\n" ;
#echo -e "\n\n Tableas da Base: dm" ;mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "show tables" dm ;echo -e "\n\n $?\n\n" ;
#echo -e "\n\n Tableas da Base: mysql" ;mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "show tables" mysql ;echo -e "\n\n $?\n\n" ;
#echo -e "\n\n Tableas da Base: phpmyadmin" ;mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "show tables" phpmyadmin ;echo -e "\n\n $?\n\n" ;
#echo -e "\n\n Tableas da Base: information_schema" ;mysql -h localhost -u $usuarioDoBD2 -p$senhadousuarioDoBD2 -e "show tables" information_schema ;echo -e "\n\n $?\n\n" ;
#mysql -u shell -pshell -e "CREATE TABLE IF NOT EXISTS $Agenda (nome VARCHAR(50) NOT NULL PRIMARY KEY,telefone VARCHAR(150), email VARCHAR(35), aniversario DATE)" $dBdousuarioDoBD ;
#mysql -h localhost -u $usuarioDoBD -e "show tables" $dBdousuarioDoBD ;
#mysql -h localhost -u $usuarioDoBD -e "desc $Agenda" $dBdousuarioDoBD ;
#echo $? ;
#inserirApartirDeArquivoPreviamenteFormatado "$arquivoComOsDadosJaFormatados"
#inserirDadosApartirDeArquivo_SQL_gerado3
#inserirDadosApartirDeArquivo_SQL_gerado2
mysql -u shell -p$senhadousuarioDoBD -e "select * from $Agenda" mysql_bash ;
testar_select_Agenda_simples1 ;
# cat $arquivo_SQL_gerado ;

}

function funcaoMAIN()
{
clearSCREEN ;
funcaoCabecario ;
funcao100 ;


}
funcaoMAIN
https://yt8tjq.sn2.livefilestore.com/y1pUb7prBnxlUhBBQ_4gss6lIwnXQKEwH_AWqQQT6gxthEOShcS7AKoLaiHaPUBRVIPlhBNt_yhej4VUX1B7nVByuQhTCOz-jal/testeSGDB.sh?download&psid=1


https://yt8tjq.sn2.livefilestore.com/y1pvyRi_MA7EDGWI5pfL7g8uqpknG73yjSXvMm2Je0LLHqtVHAvD4u4Qd7IszElJNLdo7ZC74-m7kASBtmzPHOgwoJs7MA-ma5Q/atualiza.sh?download&psid=1



http://cid-9654f940db7bb11a.skydrive.live.com/redir.aspx?page=play&resid=9654F940DB7BB11A!2540

sábado, 21 de maio de 2011

Shell Script para Recompilar kernel do linux apartir do Kenell.org usando o ubuntu 10.04 amd64

Testei apenas no notebook com o ubuntu 10.04 generic versão 64 bits

Basta baixar o seguinte shell script e mandar ele ser executado com o /bin/bash
https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/tCompilarKernel.sh

Dei um:
/bin/bash /home/$USER/Download/tCompilarKernel.sh
no terminal (lembrando que para abrir o terminal, basta pressionar simultaneamente as teclas (Ctrl+Alt+t))
E compilei o Kernel
Apenas lembrando que o script foi desenvolvido com base naas informações apresentadas em:

https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04.html(http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04)

https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04%5E_PARTE2.html(http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04?pagina=2)

Na verdade foram seguidos rigorosamente todos os passos mencionados nessas páginas.
O arquivo para shell script para desinstalar o kernel pode ser baixado em:
https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/desinstalarKernelCompilado.sh
Para desinstalar basta dar um:
/bin/bash /home/$USER/Download/desinstalarKernelCompilado.sh
no terminal
Todos esses arquivos podem ser baixados compactados em tar.gz em:
https://cid-9654f940db7bb11a.photos.live.com/self.aspx/algunsShellScriptsPublicos/compilarKenellinux.tar.gz

Apenas explicando um pouquinho como alterar o shell script tCompilarKernel.sh
para compilar o seu kernel desejado, bem como ajustar adequadamente o arquivo desinstalarKernelCompilado.sh
para desinstalar o kernel desejado:

Primeiramente, antes de tudo acesse

http://kernel.org/
para saber qual é a última versão estável do kernel (núcleo) do linux

Passo 2:
Abra os arquivos /home/$USER/Download/tCompilarKernel.sh e /usr/bin/gedit /home/$USER/Download/desinstalarKernelCompilado.sh
Você pode abri-los no terminal com o gedit utilizando-se dos comandos:

/usr/bin/gedit /home/$USER/Download/tCompilarKernel.sh

/usr/bin/gedit /home/$USER/Download/desinstalarKernelCompilado.sh

A variável "versao_Kernel1" é a versão com 3 caracteres, no caso do script 2.6
um caracter para o "2", 1 para o "." e 1 para o "6", totalizando 3 caracteres.
A variável "versao_Kernel2parte" é a segunda parte da versão do kernel, por exemplo
nesse shell script do jeito que está deseja-se baixar o kernel: 2.6.39, logo ela é a parte da versão que vêm depois do "2.6", no nosso caso 39
A variável "idDMKernell" são os caracteres em caixa baixa (em letras minúsculas) que serão inseridos no nome do kernel (Aparecerão no GRUB, quando reiniciar o computador )
A variável "tipoDMCustomizacao", dependerá da máquina onde está compilando o kernel, eu tive que esperar o comando
"sudo fakeroot make-kpkg --initrd ..."
para saber o .deb que gerado, são os últimos caracteres gerados antes do ".deb" e depois do útimo ponto ".", antes do ".deb"
Na variável "linkExatoDoKernel" não é aconselhável editar, pois ela está apenas montando o url para poder baixar o kernel
"TITULO_DO_SCRIPT" é o título que aparecerá logo no começo assim que é executado o shell script
E "diretorioOndeEstaOKernel" utilizei apenas para guardar a localização onde baixei o arquivo para poder compilar o kernel, é aconselhável não mexer também nela.

Uma característica interessante nesse shell script é que ele "imprime" ("mostra na console"), o tempo que demora para compilar (faz isso utilizando o comando "time" ), também explica o que está fazendo, através de mensagens na console

Já o shell script desinstalar, possui as mesmas variável, com as mesmas finalidades,

o comando "cd /usr/src/" serve apenas para "chegar" até a pasta onde estão os .debs
da instalação do kernel compilado

Em ambos os scripts usei funções, para demonstrar o uso de funções em shell script

Uma dica para realmente ver quanto tempo demorou a compilação comente a linha no script:
'echo2 "sudo shutdown -r now";'
'sudo shutdown -r now'

Apenas para se ter uma idéia:
real 110m38.292s
user 110m58.760s
sys 15m39.770s

São os tempos totais de execução do script de compilação

Esse tempo:
real 106m58.319s
user 108m59.410s
sys 15m18.770s
Apenas para executar o comando:
sudo fakeroot make-kpkg --initrd --append-to-version=-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte kernel_image kernel_headers
Isso em um Intel Core 2 Quad CPU Q8200 @ 2.33 GHz, com 4 GB de RAM DDR2
1 Hora e 51 minutos, praticamente duas horas inteiras ...!
Agora imagine no notebook que têm 1/4 dessa capacidade ???

Apenas mais um detalhe importante a mencionar, quando colocamos algum valor na variável idDMKernell, os drivers proprietários, não são reconhecidos automaticamente, por exemplo nesse core quad não é reconhecida a placa de vídeo devido ao simples "dm" no nome do kernel


Os conteúdos dos shells scripts /usr/bin/gedit /home/$USER/Download/desinstalarKernelCompilado.sh e /home/$USER/Download/tCompilarKernel.sh são respectivamente:
============================================================================================
#!/bin/bash
versao_Kernel1="2.6";
versao_Kernel2parte="39";
diretorioOndeEstaOKernel="";
tipoDMCustomizacao="Custom_amd64.deb";
idDMKernell="dm";
function principal2(){
echo -e "\n cd /usr/src/ \n" ;
cd /usr/src/ ;
echo -e "\n sudo dpkg -r linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte \n\n";
sudo dpkg -r linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte
echo -e "\n sudo dpkg -r linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte \n\n"
sudo dpkg -r linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte

}

time principal2

============================================================================================
============================================================================================
#!/bin/bash
versao_Kernel1="2.6";
versao_Kernel2parte="39";
diretorioOndeEstaOKernel="";
idDMKernell="dm";
tipoDMCustomizacao="Custom_amd64.deb";
linkExatoDoKernel="http://www.kernel.org/pub/linux/kernel/v$versao_Kernel1/linux-$versao_Kernel1.$versao_Kernel2parte.tar.bz2";
TITULO_DO_SCRIPT=" Shell Script para compilação do kernel do linux";
function Executa_e_mostra_o_comando2(){


echo -e "\n\n Executado o comando: \n $1 \n Ai acima. \n\n";
echo -e "\n \n $2 \n \n";
}
function Executa_e_mostra_o_comando1(){
Executa_e_mostra_o_comando2 "$1" "`$1`" ;
}
function Executa_e_mostra_o_comando1ComoSudo(){
Executa_e_mostra_o_comando1 "sudo $1" ;
}
function apenas_mostra_o_comando2(){ echo -e "\n\n Executado o comando: \n $1 \n\n"; }
function echo2(){

echo -e "\n\n $1 \n\n";

}
function echo2(){ echo -e "\n\n $1 \n\n"; }

function echoCLR2(){ clear; clear; clear ;echo -e "\n\n $1 \n\n"; }
function echoLinha2(){ echo -e "=========================================================================================="; }
function echoLinha1(){ echo -e "__________________________________________________________________________________________"; }
function echoLinha1t(){ echo -e "------------------------------------------------------------------------------------------"; }
function echoHead(){
echoCLR2 "`echoLinha2`" ;
date;
echo2 "$TITULO_DO_SCRIPT";
echo2 "`echoLinha1`";

}
function creditos2(){
echo2 "Shell Script desenvolvido por Danilo Matias, sendo bem sincero; o importante é que faça bom proveito, sem licença sem uso, sem cachaça nenhuma \n
Fiz ele copiando os dados da página:
\n http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04
\n
Se desejar ver: de um: \n
firefox http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04 \n
Mas chega de lorota, vamos executar o shellscript \n Vou abrir em referência ao autor
";
firefox http://www.vivaolinux.com.br/artigo/Recompilando-o-Kernel-no-Ubuntu-Linux-9.04

}
function passo1(){

echo2 "Fiz este passo-a-passo pois achei muito complicados todos os artigos que eu vi para realizar esta tarefa. A distribuição Linux utilizada foi o Ubuntu 9.04, mas pode ser utilizado também no Debian. Siga os passos rigorosamente e com cuidado! \n\n Fiz este passo-a-passo pois achei muito complicados todos os artigos que eu vi para realizar esta tarefa. A distribuição Linux utilizada foi o Ubuntu 9.04, mas pode ser utilizado também no Debian. Siga os passos rigorosamente e com cuidado! \n O kernel é o coração do sistema, é sempre bom estar com ele atualizado, pois as novas versões sempre trazem novidades e correções. \n Neste artigo farei um passo-a-passo de como recompilar seu kernel no Linux Ubuntu 9.04 ou Debian. Recompilar o kernel é um processo demorado e que exige muita paciência, mas não é difícil e sim trabalhoso! \n Siga os passos à risca e saíra tudo certinho. \n
A distro utilizada foi o Ubuntu 9.04 32 bits. A versão mais atual do kernel (no momento em que estou escrevendo este artigo) e que eu vou utilizar nesse artigo é a 2.6.29.2. \n Preparando a compilação \n Baixe o kernel de sua preferência no site: http://kernel.org \n
Os estáveis terminam com um número par os instáveis com um ímpar (o arquivo tem aproximadamente 50 MB). \n

Extraia em uma pasta qualquer, dando um duplo clique e clicando em extrair ou vá até a pasta onde está o arquivo e extraia através do comando:
\n No meu caso, como coloquei na variável: linkExatoDoKernel , que é composta de versao_Kernel1, que é a versão do kernel, no caso: $versao_Kernel1 , e versao_Kernel2parte, que é o número da versão que completa,
no caso é: $versao_Kernel2parte, ou seja a versão exata é: $versao_Kernel1.$versao_Kernel2parte, o que me permite montar a variável para baixar o kernel: linkExatoDoKernel, que no caso é: \n $linkExatoDoKernel
\n\n Passo: 1\n\n Baixando a versão do kernel: \n $versao_Kernel1.$versao_Kernel2parte ";
diretorioOndeEstaOKernel=$PWD;
Executa_e_mostra_o_comando1 "wget -c $linkExatoDoKernel" ;
}
function passo2(){
local descompctar4="linux-$versao_Kernel1.$versao_Kernel2parte.tar.bz2";
local descompctar3="tar xjfv $descompctar4";
echo " Passo: 2";
echo2 " Descompactar o kernel: $versao_Kernel1.$versao_Kernel2parte";
Executa_e_mostra_o_comando1 "$descompctar3" ;
}

function passo3(){
echo " Passo: 3";
echo2 "Abra um terminal e logue-se como root: ";
Executa_e_mostra_o_comando1ComoSudo "/bin/sh /bin/sh.old";
Executa_e_mostra_o_comando1ComoSudo "ln -s /bin/bash /bin/sh";

}
function passo4(){
echo " Passo: 4";
echo2 "Instalaremos alguns novos pacotes necessários: "
Executa_e_mostra_o_comando1ComoSudo "apt-get update";
Executa_e_mostra_o_comando1ComoSudo "apt-get install fakeroot kernel-package bzip2 gcc libncurses5-dev wget";
echo2 "Lembra daquela pasta que você extraiu o arquivo do kernel? Então, agora nós vamos copiá-la para a pasta /usr/src, como esta pasta só pode ser alterada pelo root, faremos isso via terminal. \n Vá até a pasta onde você extraiu a pasta do kernel.\n Nesse caso: $diretorioOndeEstaOKernel";
Executa_e_mostra_o_comando1 "cd $diretorioOndeEstaOKernel" ;
Executa_e_mostra_o_comando1ComoSudo "mv $diretorioOndeEstaOKernel/linux-$versao_Kernel1.$versao_Kernel2parte /usr/src/" ;
echo2 "Agora vamos criar um link (atalho) para a pasta o kernel. Vá até a pasta /usr/src: "
echo "cd /usr/src/" ;
cd /usr/src/ ;
echo2 "E crie o link:"
echo -e "\n sudo ln -s linux-$versao_Kernel1.$versao_Kernel2parte linux \n " ;
sudo ln -s linux-$versao_Kernel1.$versao_Kernel2parte linux
echo -e "\n Agora vamos \"entrar\" no link:\n " ;
echo -e "\n cd /usr/src/linux/ \n" ;
cd /usr/src/linux/ ;
echo -e "\n Salvando a configuração do nosso kernel atual para depois aproveitá-la: \n" ;
echo2 "sudo cp /boot/config-$(uname -r) ./.config" ;
sudo cp /boot/config-`uname -r` ./.config
echo2 "Chegamos na parte legal! Vamos configurar nosso kernel de acordo com nossas necessidades (talvez a maior vantagem do software open source)" ;
echo2 "Na próxima etapa: \n [Parte opcional] Se você quiser aproveitar a configuração do seu kernel atual o momento é esse! Acesse a opção "Load an Alternate Configuration File", dê OK e escolha o arquivo que a gente salvou anteriormente. \n Se o seu kernel anterior já estava otimizado para sua máquina e você quer apenas atualizar seu kernel, simplesmente dê ESC e escolha "Save". Caso contrário modifique as configurações no menu conforme suas necessidades. O menu é bem intuitivo, bastando para marcar um módulo para instalação, ir até ele e digitar "y" ou "n" para não instalar, ou ainda "m" para deixar como módulo e você carregá-lo somente quando for necessário. Na internet há várias dicas para configurá-lo. \n Depois de tudo feito aperte ESC e escolha Save. \n Feito isso você pode passar para a próxima página! " ;
echo2 "sudo make menuconfig" ;
sudo make menuconfig ;
echo2 "Agora vamos à compilação propriamente dita" ;
echo2 "sudo make-kpkg clean " ;
sudo make-kpkg clean ;
echo2 " Mostrando quanto tempo efetivamente demora para compilar o kernel \n time sudo fakeroot make-kpkg --initrd --append-to-version=-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte kernel_image kernel_headers " ;
time sudo fakeroot make-kpkg --initrd --append-to-version=-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte kernel_image kernel_headers
}
function passo5(){
echo2 "Agora que já foi compilado vamos instalar o kernel previamente compilado"
echo2 "cd /usr/src/";
cd /usr/src/ ;
echo2 "sudo dpkg -i linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao$(echo "_")Kernel1.$versao_Kernel2parte_$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao";
sudo dpkg -i linux-image-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte$(echo "_")$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao
echo2 "Espere acabar e vamos para o próximo:";
echo2 "sudo dpkg -i linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte$(echo "_")$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao";
sudo dpkg -i linux-headers-$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte$(echo "_")$versao_Kernel1.$versao_Kernel2parte-kernel$idDMKernell$versao_Kernel1.$versao_Kernel2parte-10.00.$tipoDMCustomizacao
echo2 "Após feito isso seu kernel deve estar instalado e pronto para ser usado! \n Após feito isso seu kernel deve estar instalado e pronto para ser usado! \n ";
echo2 "Role o documento para baixo e verifique se foram adicionadas novas entradas com o nome de seu kernel, se sim tudo pronto e vamos reiniciar o computador pra ver como ficou:";
echo2 "Após o computador reiniciar, abra um terminal e digite \"uname -r\" para ver qual a versão do kernel que está rodando, se for a que você instalou, parabéns, você recompilou seu kernel com sucesso! \n Teve um kernel panic? Calma, seu kernel antigo ainda está no grub, basta iniciar por ele e recompilar seu kernel novamente procurando pelo erro que você cometeu. ";
echo2 "sudo shutdown -r now";
sudo shutdown -r now

}
#_________________________________________________________________________________________________________

function principal2(){
echoHead ;
creditos2 ;
passo1 ;
passo2 ;
passo3 ;
passo4 ;
passo5 ;

}

time principal2
============================================================================================

Função em shell script para mostrar o comando que está sendo executado e executar

Se você é como eu, quer fazer um shell script que mostra os comandos, que estão sendo executados, não apenas os resultado, mas se enche o saco de ter que ficar digitando echo o comando seus problemias se acabaram-se:
http://www.youtube.com/watch?v=PwZSD1dZ6dg&feature=related
As seguintes 2 funções abaixo fazer o que você quer, apenas se chamando uma função.
--------------------------------------------------------------------------
#!/bin/bash
function Executa_e_mostra_o_comando2(){
echo -e "\n\n Executando o comando: \n $1 \n\n";
echo -e "\n \n $2 \n \n";
}
function Executa_e_mostra_o_comando1(){
Executa_e_mostra_o_comando2 "$1" "`$1`"
}
Executa_e_mostra_o_comando1 "ls -la"
--------------------------------------------------------------------------
Nesse shell script quero mostrar o ls -la e o resultado dele, para isso apenas chamei a função

Executa_e_mostra_o_comando1, passando como parâmetro o ls -la.
se for estudar o script, lembre-se que o ` é o sinal de crase, para passar para a função xecuta_e_mostra_o_comando2() o resultado do comando.

Bom espero que talvez, possa ajudar a alguém por que passei uns 3 dias atrás disso.
Se não ajudar, pelo menos que faça rir ...

Obrigado ...!

sexta-feira, 6 de maio de 2011

Apenas alguns links sobre o desenvolvimento em android

http://www.google.com.br/adwords/webexpert/program.html#sourceid=awo&subid=br-pt-3p-default

http://www.google.com.br/adwords/webexpert/faq.html#sourceid=awo&subid=br-pt-3p-default

http://www.google.com.br/adwords/webexpert/

http://www.felipesilveira.com.br/desenvolvendo-para-android/


http://books.google.com/books?id=8u9wJowXfdUC&pg=PR11&dq=%22desenvolvendo+para+android%22&hl=pt-BR&ei=xCbETauULcHEgQe-vqDLBA&sa=X&oi=book_result&ct=result&resnum=1&ved=0CFYQ6AEwAA#v=onepage&q&f=false


http://www.google.com/search?q=%22desenvolvendo+para+android%22&hl=pt-BR&client=ubuntu&channel=fs&prmd=ivns&source=lnms&tbm=bks&ei=OCTETfH5K4TqgQf3xLHMBA&sa=X&oi=mode_link&ct=mode&cd=5&ved=0CBoQ_AUoBA&prmdo=1

http://www.felipesilveira.com.br/category/carreira/


http://www.felipesilveira.com.br/category/desenvolvimento-de-software/

http://www.felipesilveira.com.br/2010/05/como-usar-banco-de-dados-em-uma-aplicacao-android/

http://www.felipesilveira.com.br/2010/05/content-providers/



http://www.linuxmagazine.com.br/lm/article/programe_seu_androide

http://ploobs.com.br/?p=397

http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html


Os links que seguem não têm nada a ver com Android, mas como estou de Saco Cheio, de na faculdade, não se ensinar nada de produtivo, de ensinarem apenas o fazer na unha e só, de não ter visto se quer, conexões com banco de dados, como por exemplo com o PreparedStatement, e o desenvolvimento ensinado lá ser unicamente da maneira mais improdutiva possível, a grande maioria dos professores torce o nariz para IDEs, por exemplo, claro ensinam para desenvolver códigos para apresentar para o professor e nada mais.
Resumindo separei alguns links interessantes, que tive uma idéia do que estamos perdendo na faculdade, e o quanto estamos atrasados em relação a nossos concorrentes, a impressão que tenho é que estamos aprendendo a desenvolver, com técnicas do século passado, mas não é atoa, os caras fizeram o mestrado, o doutorado, passaram em concurso, e pra que se atualizar ???? Escrever artigos, participar de eventos unicamente defendendo os artigos é financeiramente mais atrativo, e mais cômodo, do que fazer jus ao que o estado de Santa Catarina paga pelos salários:

http://vimeo.com/19807733

O detalhe mais básico, para aprender isso ai não se passou 2 semanas lendo a tranqueira de um livro, pois uma imagem vale, mais que mil palavras, é muito fácil, dizer que não ensina IDE, claro, nem sabe utilizar, como vai ensinar ???


http://vimeo.com/drspockbr

http://blog.spock.com.br/


Totalmente insatisfeito com o meu curso ...

Ops faltou o link do git ...
http://brunograsselli.com.br/2009/02/instalar-git-no-ubuntu.html
http://help.eclipse.org/helios/index.jsp



terça-feira, 3 de maio de 2011

Já que falei de JQuery ai vão alguns links

http://jquerybrasil.org/


http://www.alexandremagno.net/blog/wp-content/uploads/exemplos/efeitos.htm

http://jquerybrasil.org/tutoriais/

http://simplesideias.com.br/usando-jquery-na-pratica/


http://jquerypassoapasso.blogspot.com/

http://www.tuliofaria.net/categoria/jquery/

http://i18n.2kminterativa.com.br/jquery/jquery-getting-started-pt_br.html

http://www.imasters.com.br/artigo/5966/javascript/jquery_e_suas_facilidades

http://www.livrojquery.com.br/




http://www.youtube.com/watch?v=AzpFlyzp2AE
http://www.youtube.com/watch?v=7URU6nAFMAI
http://www.livroajaxjquery.com.br/download.php
http://pt.wikipedia.org/wiki/JQuery
http://visualjquery.com/
http://plugins.jquery.com/


http://www.screencaster.com.br/jquery-menu-em-abas-mamao-com-acucar/
http://www.livrojquery.com.br/temp/abas/#aba1

http://www.screencaster.com.br/page/4/

http://www.screencaster.com.br/tag/ruby-on-rails/




http://www.brenooliveira.com.br/



http://www.google.com/search?q=Jquery&hl=pt-BR&lr=lang_pt&client=ubuntu&channel=fs&biw=1255&bih=543&tbs=lr:lang_1pt&tbm=vid&prmd=ivnsl&source=lnms&ei=ey3ATaH8A8rpgAfXgojuBQ&sa=X&oi=mode_link&ct=mode&cd=3&ved=0CCsQ_AUoAg
http://www.google.com/search?q=Jquery&hl=pt-BR&lr=lang_pt&client=ubuntu&channel=fs&biw=1255&bih=543&tbs=lr:lang_1pt&tbm=blg&prmd=ivnsl&source=lnms&ei=pi3ATYSOEIfagAemjp3iBQ&sa=X&oi=mode_link&ct=mode&cd=5&ved=0CCAQ_AUoBA

http://www.google.com/search?q=Jquery&hl=pt-BR&lr=lang_pt&client=ubuntu&channel=fs&biw=1255&bih=543&tbs=lr:lang_1pt&tbm=bks&prmd=ivnsl&source=lnms&ei=qy3ATbunIYjHgAeciNXvBQ&sa=X&oi=mode_link&ct=mode&cd=6&ved=0CCEQ_AUoBQ&prmdo=1

http://www.google.com/search?q=Jquery&hl=pt-BR&client=ubuntu&channel=fs&biw=1255&bih=543&prmdo=1&prmd=ivnsl&source=lnms&ei=KC7ATanDNMrogQe33aXTBQ&sa=X&oi=mode_link&ct=mode&cd=1&ved=0CCMQ_AUoAA

Links de como programar Delphi para linux com Lazarus

É isso mesmo não é necessário ficar se matando para programar exatamente tudo em modo texto, como
em c, como gcc, embora programas simples seja realmente mais rápido fazer em c, mas quando o projeto fica maior, torna-se menos produtivo fazer tudo em gcc e gedit, ou vi.
Ai vão os links:

http://vimeo.com/12671524


http://professorcarlos.blogspot.com/

http://www2.explorando.com.br/m/2010/06/videoaula-tutorial-lazarus-delphi

http://www.ecivilnet.com/softwares/lazarus_programacao_pascal.htm

http://wiki.lazarus.freepascal.org/Lazarus_Documentation/pt

http://wiki.lazarus.freepascal.org/Lazarus_Database_Tutorial/pt

http://wiki.lazarus.freepascal.org/OpenGL_Tutorial

http://wiki.lazarus.freepascal.org/Developing_with_Graphics/pt

http://www.youtube.com/watch?v=uhZApf3CIYo

http://www2.explorando.com.br/m/2010/06/videoaula-tutorial-lazarus-delphi

http://www.google.com.br/#q=programando+em+lazarus&hl=pt-BR&biw=1255&bih=578&prmd=ivns&ei=SwbATc2oFqXa0QGpquSPBQ&start=10&sa=N&bav=on.2,or.r_gc.r_pw.&fp=352abdde21b1e8a1


Muito bom mesmo, entretanto as GUI estão cada vez mais indo para os browsers, e a aplicação funcionando com processamento distribuído, parte no cliente, parte no servidor, para esses fins, utiliza-se extensivamente ajaz, JQUEry, mas isso é outra história ..

conteúdo a se colocar no arquivo /etc/sudoers para não pedir senha no sudo para comando específico e pequeno script para atualizar o sistema

#coloquei a linha abaixo no dia terça, 26 de abril de 2011 11:52 para não pedir senha ao atualizar o sistema http://www.hardware.com.br/comunidade/comando-especifico/708550/
danilo ALL=NOPASSWD: /usr/bin/apt-get update
# e abaixo para atualizar
danilo ALL=NOPASSWD: /usr/bin/apt-get upgrade
#as duas abaixo para desligar e para rebootar sem pedir senha
danilo ALL=NOPASSWD: /sbin/reboot
danilo ALL=NOPASSWD: /sbin/halt

#onde danilo é o nome do usuário
#/usr/... é a localização exata de onde estão os comandos, que se deseja o sudo sem senha
#o script /home/danilo/Documentos/scripts/shell/atualizarSistema.sh contém:
#!/bin/bash
echo -e "\n\n Atualizando o sistema \n\n\n\n" ;
echo -e "sudo apt-get update;\n" ;
sudo apt-get update;
echo -e "\n \n\n\n sudo apt-get upgrade; \n\n\n" ;
sudo apt-get upgrade;
echo -e "\n\n \n\n\n Finalizada a atualização do sistema \n\n\n\n" ;

segunda-feira, 2 de maio de 2011

links para o hyperteminal no ubuntu (ainda não testei, mas ideal para configurar roteadores cisco através a porta console)

http://www.dicasdelinux.com.br/dicas-de-linux/3452/gtkterm-um-saada-para-o-hyperterminal.html



https://fedorahosted.org/gtkterm/




http://www.vivaolinux.com.br/dica/Gtkterm-um-saida-para-o-Hyperterminal








http://www.youtube.com/results?search_query=gtkterm&aq=f


https://fedorahosted.org/gtkterm/browser







http://www.youtube.com/results?search_query=gtkterm&aq=f


http://www.google.com.br/search?q=gtkterm&hl=pt-BR&biw=1255&bih=543&prmdo=1&prmd=ivns&ei=Ut2-TZOjBqTz0gHz5PGfBg&start=10&sa=N


http://sourceforge.net/projects/gtkterm/



http://gtkterm.feige.net/

https://fedorahosted.org/gtkterm/

http://www.disca.upv.es/aperles/CheapDAQ/CheapDAQ.html


http://wiki.networksecuritytoolkit.org/nstwiki/index.php/File:Xgps-check-gpsd.png




Uma aula mais tranquila para aprender a configurar roteador (só se aprende fazendo e refazendo e refazendo:
)
http://www.youtube.com/watch?v=AGxZFiIWg-c



http://www.youtube.com/watch?v=XDdZlSug73g

http://www.youtube.com/watch?v=_xA94N__uzk


http://www.youtube.com/watch?v=ZUpK67wRsQM

http://www.youtube.com/watch?v=ZfqxJnx2a7M&feature=related


http://www.youtube.com/watch?v=5G2s7jEj2Ws

http://www.youtube.com/watch?v=yQsWUQpePco

CCNA - Using Hyperterminal to Connect to a Cisco Router.avi
http://www.youtube.com/watch?v=yQsWUQpePco


http://www.youtube.com/results?search_query=cabo+serial+cisco&aq=f

http://www.youtube.com/watch?v=6YWlEC_kKfY

Por dentro das coisas - Switches:
http://www.youtube.com/watch?v=QU03X09EPgs&feature=related


Por dentro das coisas - Firewall :

http://www.youtube.com/watch?v=RrxRAEYIfAI





Por dentro das coisas - Roteadores :


http://www.youtube.com/watch?v=4bC4J6tFifQ







http://www.youtube.com/results?search_query=cabo+serial+cisco&aq=f


A parte do que ligar no que é meio intuitiva, você Lê no aparelho o que é o que:
Um pequeno exemplo de cabo dte dce:

http://www.pixmania.com/pt/pt/3528716/art//cabo-para-cisco-cruzado-d.html


http://www.google.com/imgres?imgurl=http://img2.mlstatic.com/jm/img%3Fs%3DMLB%26f%3D153542172_9191.jpg%26v%3DO&imgrefurl=http://www.emule.com.br/lista.php%3Fkeyword%3DInterliga&usg=__99vjiDo3dgIZOIZn6H_pu_n3sNY=&h=280&w=280&sz=14&hl=pt-BR&start=3&sig2=rCBHw3L3pdjC66mGmlgwNw&zoom=0&tbnid=4noHnpIojB_60M:&tbnh=114&tbnw=114&ei=tQ6_TZSHF8LUgQeGrtisBw&prev=/search%3Fq%3Dcabo%2Bdce%2Bcisco%26hl%3Dpt-BR%26client%3Dubuntu%26hs%3DRbf%26sa%3DX%26channel%3Dfs%26biw%3D1255%26bih%3D543%26tbm%3Disch%26prmd%3Divns&itbs=1


http://www.google.com/imgres?imgurl=http://img.alibaba.com/wsphoto/v0/433119451/CISCO-CABLE-CAB-V35FC-100-cisco-Compatible-DCE-Female-Cable.summ.jpg&imgrefurl=http://pt.aliexpress.com/product-fm/406848141-CISCO-CABLE-CAB-V35FC-100-cisco-Compatible-DCE-Female-Cable-wholesalers.html&usg=__yMFry1llWj8_XDFOxwXlTdbTsTs=&h=79&w=120&sz=4&hl=pt-BR&start=1&sig2=tUrDvTmB5rrGkbCF9s9xqw&zoom=1&tbnid=X_pSwvE016IqrM:&tbnh=58&tbnw=88&ei=1g6_TcP1JIStgQfnsJigBw&prev=/search%3Fq%3Dcabo%2Bdce%2Bcisco%26hl%3Dpt-BR%26client%3Dubuntu%26sa%3DX%26channel%3Dfs%26biw%3D1255%26bih%3D543%26tbm%3Disch&itbs=1




http://produto.mercadolivre.com.br/MLB-176665675-cisco-cabo-dce-fmea-v35-smart-interliga-roteador-_JM

http://produto.mercadolivre.com.br/MLB-182435561-adaptador-dongle-serial-rj45-para-probox-pronta-entrega-_JM


http://produto.mercadolivre.com.br/MLB-175603582-cabo-serial-cisco-terminal-cable-db9-fmea-prj45-_JM


http://produto.mercadolivre.com.br/MLB-177370031-adaptador-dongle-serial-rj45-para-probox-_JM

http://www.5ti.com.br/p1817-cabo-cisco-cab-ss-v35fc.html


Mas o que aperta mesmo é o que digitar na tela do telnet certo ???

http://www.marceloeiras.com.br/cisco/config_router_cisco.htm

http://localdomain.wordpress.com/2007/08/12/aula-3-prova-640-801-configuracao-basica-de-roteadores-cisco/



http://www.juliobattisti.com.br/tutoriais/luisepedroso/comandoshow001.asp


http://www.pedropereira.net/configuracao-de-roteadores-cisco/



http://pt.scribd.com/doc/54281745/Manual-Tecnico-to-Networking



http://www.marceloeiras.com.br/cisco/


No packet tracer:

http://www.tecnodica.com.br/index.php?option=com_content&view=article&id=71:configurando-interfaces-e-roteamento-entre-dois-roteadores-cisco&catid=47:cisco&Itemid=64



http://www.marceloeiras.com.br/cisco/hard/cisco2505_01.jpg


http://www.marceloeiras.com.br/cisco/hard/cisco2505_02.jpg




http://www.marceloeiras.com.br/cisco/hard/cisco2505_03.jpg



http://www.marceloeiras.com.br/cisco/hard/memoria.jpg


http://www.marceloeiras.com.br/cisco/show_version/index.htm

http://www.marceloeiras.com.br/cisco/tcp_ip/index.html


http://www.marceloeiras.com.br/cisco/cap_2.htm

http://www.marceloeiras.com.br/cisco/osi/index.html


http://www.marceloeiras.com.br/cisco/cabo_rede.htm


http://www.marceloeiras.com.br/cisco/config_router_cisco.htm

http://www.marceloeiras.com.br/cisco/senha_800.htm


http://www.marceloeiras.com.br/cisco/senha_25xx.htm


http://www.marceloeiras.com.br/cisco/senha_26xx.htm


http://www.marceloeiras.com.br/cisco/conf_nat.htm


http://www.marceloeiras.com.br/cisco/conf_framerelay.htm


http://www.marceloeiras.com.br/cisco/snmp.htm

http://www.marceloeiras.com.br/cisco/index.htm

http://www.ataliba.eti.br/sections/old-hacking/unsekurity/texto1/basico_routers.txt


http://www.google.com/search?q=configura%C3%A7%C3%A3o+de+roteador+cisco&hl=pt-BR&client=ubuntu&channel=fs&prmd=ivns&ei=IAi_Te_YGs_PgAelydjjBg&start=10&sa=N

Para quem não fala inglês como eu não adianta muito, mas para quem fala ...:

http://smcropcisco.wetpaint.com/

Apenas alguns links de utilização do GIT

Screencast en español:
http://vimeo.com/14221590
~25 min

http://milaredev.wordpress.com/2010/03/03/usando-git/

http://febracev.wordpress.com/2009/02/04/git/
http://wiki.locaweb.com.br/pt-br/Usando_GIT_na_Hospedagem_Linux

http://www.google.com/search?q=%22usando+o+git%22&hl=pt-BR&client=ubuntu&hs=0iH&channel=fs&biw=1255&bih=543&prmdo=1&source=lnms&ei=e96-TYeuE4PbgQfRypXJCw&sa=X&oi=mode_link&ct=mode&cd=1&ved=0CBIQ_AUoAA