quinta-feira, 22 de outubro de 2026

Short essay: If you could choose one book that has shaped your intellectual or spiritual journey the most, which one would it be, and why is its message still vital today?

Because the intellectual development may not be disassociated with spiritual development, the Bible excels as a really worthy literature, indeed. So, the Bible is my choise as the literature that shapped my development at most.

The wisdom should be the ultimate goal of any person. Please, consider wisdom from now on as the concept of knollege and good spiritual development.

So a wisdom person have its knoledges governed by good spirit.

But the inverse is true, too. The not good spirit really give bad destinations to knolege. And we can easily see it in in disputes for belic and politic influential power, por example. The atomic bomb is just one another example. 

Is there a midle term? Like, not so good and not so bad? The knoledge will never be neutral! It's because the spirit will never be neutral too.

The Bible just exposed this kind of reflections, with a lot of good and bad examples about intelectual and spiritual attitudes.

The Bible propose that intellectual and spiritual can be improoved and oriented to good things, to good attitudes and shows how to achieve this kind of improovements. 

So, it was easy (for me) to choose the Bible as my preferred book(s) because it have the potential to improove intellectual and spiritual development of persons. It's still relevant for this today.


quarta-feira, 26 de fevereiro de 2025

O significado da palavra Amor e seu poder

 Os dicionários trazem muitos significados para a palavra amor. O senso comum então, é muito mais sortido nesse sentido. Um dos significados, entretanto, parece ter sido esquecido. Lembrá-lo pode ser a diferença entre felicidade e a tristeza, a vida e a morte, dependendo da sua intensidade.

Amor é o quanto você está decidido a abrir mão de você mesmo por uma outra pessoa. Só isso. O leitor mais atento vai perceber que adotando esse significado, o contrário de amor está mais próximo de egoísmo que de ódio.

Outra decorrência desse significado é de que não se trata de um sentimento, mas de uma decisão consciente e, nos dias de hoje, terrivelmente difícil.

Esse amor, não tem contra indicação. 

Mas amar assim, verdadeiramente, por meio de uma iniciativa nossa mesmo, é quase impossível. 

Provavelmente, todas as crises sociais, conjugais, econômicas, morais... decorrem da crise da falta desse amor.

Só com a ajuda de Deus é possível amar assim. Que revolução seria hein???!!!

 

 

 

 

quinta-feira, 29 de agosto de 2024

 

Síntese do treinamento: https://www-periodicos-capes-gov-br.ez87.periodicos.capes.gov.br/index.php/treinamentos/calend%C3%A1rio.html

Dados abertos e Ciência aberta tem muito em comum.

Dados Abertos refere-se a publicação de dados dentro dos princípios FAIR e Ciência aberta preconiza disponibilização de todas as informações (também dentro do princípio FAIR) em todas as fazes e contextos de uma pesquisa.

Sendo assim a Ciência aberta promove a transparência acerca de como os cientístas colaboram, reproduzem, auditam e compartilham os dados e informações relevantes relativas a cada etapa de uma pesquisa. Idealmente, todos os stakeholders, financiadores também abrem os dados nesse contexto de transparência.

Um dos movimendos dentro do contexto da Ciencia Aberta é a Ciência Cidadã. Trata-se de uma iniciativa onde o cidadão, não cientísta, participa voluntariamente de algum projeto científico como por exemplo eBird, galaxyzoo dentre outros. Em geral a participação se dá no fornecimento de dados. Vale citar também o re3data como um indexador global de dados de pesquisas.

Outro movimento importante é o são os pré-prints que disponibiliza artigos submetidos à publicação antes mesmo de serem publicados em repositórios como por exemplo da scielo.. Mais sobre pré-prints aqui

O que foi novo pra mim foi a importância de citação de dados. Me parece que não há normas ABNT específicas para isso, mas existe  iniciativas icpsr e  datacite.

Há portanto uma intersecção bastante clara entre os conceitos de Dados Abertos e Ciência Aberta não só no sentido em que se pode publicar os dados da pesquisa como Dado Aberto ( em repositórios como a arca, dentre outros ) mas não só os dados mas promover a transparência da pesquisa em todas as suas fazes.


 




segunda-feira, 19 de abril de 2021

Android Studio Behind a Proxy

 

Quando vc está atrás de um proxy corporativo o Android Studio já percebe e te mostra uma caixa de diálogo pra vc cololocar onde está o seu proxy, seu usuário e senha senha.

Entretanto, isso não é suficiente pra continuar desenvolvendo, pelo menos foi a minha experiência.

 É necessário vc encontrar o gradle-wrapper.properties no diretorio gradle/wrapper do seu projeto e colocar a seguinte configuração que aí vai buildar direitinho...


#Mon Apr 19 10:52:53 BRT 2021
systemProp.proxySet="true"
systemProp.http.proxyHost=ProxyIP
systemProp.http.proxyPort=ProxyPort
systemProp.http.proxyUser=SeuUsuario
systemProp.http.proxyPassword=SuaSenhaDoProxy
#systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost
 
systemProp.https.proxyHost=IpDoSeuProxy
systemProp.https.proxyPort=PortaDoProxy
systemProp.https.proxyUser=SeuUsuario
systemProp.https.proxyPassword=SuaSenha
#systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

systemProp.gradle.wrapperPassword=IpDoSeuProxy
systemProp.jdk.http.auth.tunneling.disabledSchemes=""

systemProp.all.proxyHost=IpDoSeuProxy
systemProp.all.proxyPort=PortaDoSeuProxy
systemProp.all.proxyPassword=SuaSenha

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip

terça-feira, 30 de março de 2021

elisp: iterar em uma lista mostrando resultado no proprio buffer


Eu tava precisando constatar se um determinado diretorio estava fazendo parte do meu load-path ja que meu (require 'ess-site) nao tava funcionando.

 

Entao pra checar todos os diretorio pertenciam a minha load-path, o codigo abaixo caiu como uma luva... coloque ele no seu buffer de *scratch* que ele vai te mostrar no proprio buffer o resultado

 

  (mapcar
   (lambda(x)     
     (insert x)
     (insert ?\n))
   load-path)

 

 

mapcar é uma funcao estilo foreach da vida...

pensa no lambda como uma arrow function ou simplesmentente um funcao anonima

dentro dela tem o insert que insere no mesmo buffer que vc esta no mesmo local onde o seu cursor esta

insert ?\n insere carriage return pra linha

load-path e uma lista e mais ou menos como um classpath de onde se pode dar require pra carregar codigo lisp 



domingo, 23 de abril de 2017

Bug em hotdeploy do tomcat apache-tomcat-8.5.13




Caso vc esteja querendo fazer um hotdeploy do seu war conforme abaixo:

curl --upload-file target/fzl_web_primefaces-1.0-SNAPSHOT.war  "http://admin:admin123@fzl_tomcat8:8080/manager/text/deploy?path=/fzl_web_primefaces&update=true"

Não vai funcionar.

Troquei a versão 8.5.13 pela apache-tomcat-8.5.14 e funcionou ok.

Refs:

http://stackoverflow.com/questions/43205092/deploying-in-tomcat-with-exception-cannot-find-operation-isserviced/43232552

https://gist.github.com/pete911/6111816





sábado, 23 de julho de 2016

exportar código fonte a partir do org-mode


Esse não é um tutorial sobre usar
1) org-mode, nem como 2) exportar seu texto para html com o org-mode, nem tampouco como 3) formatar código fonte em html.  Para saber mais sobre isso é só consultar os links ao final deste post.
Vou direto ao assunto. Você está digitando um tutorial, por exemplo, e neste tutorial tem código fonte e você está usando org-mode, como eu. A exportação é ótima claro, mas ocorre que meus códigos fontes não saíam formatados e vou postar como eu consegui fazer isso com o https://highlightjs.org/.

A maneira como se faz é exatamente como você faria se você estivesse editando um html, mas como você está no org-mode você precisa fazer isso usando as seguintes configurações do head




o resultado disso, na no html que é exportado é o seguinte...




segunda-feira, 2 de maio de 2016



Atividade 5.1 - Envio de arquivo

 

Olá pessoal.

Este post é uma tarefa/atividade do curso de formação pedagógica que estou fazendo, portanto,  para os alunos fica disponivel as video aulas e para o público em geral, mais uma fonte de informações.

A disciplina que motivou a video aula é "Criação e Editoração de Imagens" para o curso de "Informática para Internet".

O assunto é a utilização de recursos e técnicas do Gimp,software livre para editoração de imagens.

Bom estudo, pessoal.




 









sábado, 7 de fevereiro de 2015

o seu recordmydesktop tá dando nos nervos?



Já fiz vários screencasts com o recordmydesktop mas por algum motivo, no meu fedora 20 ele está renderizando horrivelmente.


Eu já sabia que dava pra fazer os screencasts com o ffmpeg, mas tem um
milhão de opções pra conseguir um comando que resulta em um screencast aceitável.

Pesquisando na web encontrei alguém que configurou um comandoshow de bola pra fazer screencasts com o ffmpeg e o printipal benefício desse comando foi que o audio não perde a sincronia como o vídeo.

O comando "Rufus" só tinha um probleminha com relação ao meu ambiente, mas segue os dois pra efeitos de comparação.

Link do post do "Rufus":

http://rufuspollock.org/2012/07/28/problems-with-recordmydesktop-and-a-command-line-alternative/

Comando dele:
ffmpeg -f alsa -itsoffset 00:00:02.000 -ac 2 -i hw:0,0 -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 15 -i :0.0 -sameq -f avi -s wvga -y screencast.avi

No meu caso ficou assim:
ffmpeg -f alsa -itsoffset 00:00:02.000 -ac 2 -i hw:1,0 -f x11grab -s 1366x768 -r 15 -i :0.0  -f avi -s wvga -y -qscale 5 screencast2.avi

Bom, então fica o registro pra quem estiver com problemas com o recordmydesktop e quizer experimentar esse comando.


PS:
No meu Fedora 21 esse comando funcionou blz também...
 ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s $(xdpyinfo | grep dimensions | awk '{print $2}') -i :0.0 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -crf 0 -threads 0 output.mkv

O ffmpeg está disponível no repositório rpmfusion.


++++++++++++++++++++++++++++++++++++++ostar+++++++
Estou editando este post porque gostaria de compartilhar mais uma lateração no comando já que tive que reinstalar meu fedora em outro note.

Eis o comando que funcionou, o que muda nos demais está em negrito.
ffmpeg -f alsa -ac 2 -i hw:1.0 -f x11grab -r 30 -s $(xdpyinfo | grep dimensions | awk '{print $2}') -i :0.0 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -crf 0 -threads 0 output.mkv

Fiz essa modificação porque o screencast não estava saindo com  som e por isso indiquei pro ffmpeg qual é o dispositivo correto.
Pra consultar os dispositivos que vc tem na sua máquina:
arecord -l
ou cat /proc/asound/cards






segunda-feira, 10 de novembro de 2014

yet another post about dual boot with windows 8


Acho que todo mundo que usa linux e adquiriu um laptop recentemente já passou pela dificuldade de configurar um dual boot pra manter o windows 8 original.

Em geral, o pessoal relata sua experiência e isso é bom.
Eis como eu resolvi.

Primeiramente, não tive paciência de configurar o grub pra funcionar com UEFI, então fui pelo caminho mais simples e pra mim funcionou.


Bom, primeiramente, fiz o que quase todo mundo tem que fazer mesmo: Usei o gerenciador de disco do windows pra liberar espaço pra criar uma partiçao nova e instalei meu ubuntu (mini)[1] pelo pendrive. Na fase de particionar o disco crieu uma partição /boot (5 MB), / (5 GB) e /home (240 GB).

O que aconteceu? O de sempre: quando eu ligava o note bootava o windows 8 pelo UEFI. Desabilitei o UEFI e mesmo pelo modo de boot legado o meu ubuntu não bootava. Só bootava se eu colocasse o pendrive.

Então eu bootei meu ubuntu pelo pendrive mesmo, a e fiz o seguinte[2]:

sudo update-grub 
sudo grub-install /dev/sda
Resultado final:
Quando quero usar o windows 8 booto com o UEFI.
Quando quero usar o ubuntu, booto pelo modo legado.


Referências:
[1] Linux wagpc 3.13.0-39-generic #66-Ubuntu SMP Tue Oct 28 13:30:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

[2] http://ubuntuforums.org/showthread.php?t=2028699 

segunda-feira, 13 de outubro de 2014

ffmpeg virou avconv




Apesar de a Ubuntu ser uma distribuição maravilhosa, pra mim,ela tem um "q" de comercial. Por isso certas atitudes mais "empresarias" que "communities like..." surgem do nada...

Por exemplo, o pacote ffmpeg é um já consagrado... pra que mudar? Tá bom, mudou pra um fork melhor. Sei lá... não sei em que melhorou, mas agora não tem mais ffmepg.

Pra conseguir usar o velho e bom ffmpeg dê esse commando...
 
sudo add-apt-repository 'deb http://ppa.launchpad.net/jon-severinsson/ffmpeg/ubuntu '"$(cat /etc/*-release | grep "DISTRIB_CODENAME=" | cut -d "=" -f2)"' main' && sudo apt-get update
depois,
apt-get install ffmpeg


como root, esse comando funcionou ok pra mim...
trocando ffmpeg por avconv funciona também...

ffmpeg -f alsa -i pulse -f x11grab -r 25 -s 1280x720 -i :0.0+0,24 -acodec pcm_s16le  -vcodec libx264 -threads 0 output.mkv 


 
fFontes:
http://ubuntuforums.org/showthread.php?t=2219550 
http://wiki.oz9aec.net/index.php/High_quality_screen_capture_with_Ffmpeg

terça-feira, 17 de junho de 2014

Ninguém considera que a Bíblia tem a solução, mas...



Os dias são maus. Isso não é uma opinião pessoal, os dias são maus mesmo. Mesmo em meio ao sofrimento e num contexo onde a vida é tão difícil, há uma esperança, uma solução: "o fruto do justo é árvore de vida(...) Pv11:39.

Talvez o caro leitor conteste a tese acerca de que os dias são maus e repleto de sofrimentos. Talvez o meu leitor esteja olhan para sua própria situação (qualidade de vida) e considerando que o quadro não é tão ruim assim. E sendo assim, nem seria o caso de se preocupar com alguma solução proveniente não ortodoxa, muito menos alguma proveniente da Bíblia.

Mas se nós deixar-mos de olhar pros nossos próprios umbigos e olhar para a para a situação da grande massa das pessoas, e não raro para pessoas próximas de nós, a situação é mesmo de sofrimento dos mais diversos e de uma péssima qualidade de vida.

O gosto da vida, na verdade, segunda a Bíblia, provém principalmente dessa pequena frase "o fruto do justo é arvore da vida". Em outras palavra, pra dar gosto na vida é necessário encontrarmos nessa tragétória os frutos de justos, os quais são citados em Gálatas 5:22, quais sejam:  amor, gozo, paz , longanimidade, benignidade, bondade, fidelidade, mansidão, domínio próprio.

A vida teria sabor se esses frutos não fossem tão raros e tão restritos as pessoas mais próximas e íntimas. Mudaria o quadro.

Fica o convite para mudar o mundo, dando os frutos do Espírito. Lembranto entretanto que esses frutos de altruísmo não pode ser gerados na natureza marcadamente egoísta humana. Por isso que a Bíblia chama de frutos do Espírito. Aceitar Jesus é o caminho. Por mais qualquer coisa que se possa imaginar sobre esse argumento. Aceitar Jesus de verdade é a solução. Nem estou falando de igrejas e ministérios, estou falando de fornecer à todas as pessoas os frutos do Espírito. Veja um exemplo da história recente.

https://www.youtube.com/watch?v=dXE_NFjwqQM
(com esse vídeo também não estou defendendo o pentecostalismo, pois que o fruto do espírito não tem nada a ver com essa questão)




domingo, 16 de fevereiro de 2014

Devocional: Ajudando a compreender a Justiça de Deus

Textos Bíblicos:
Mt 25:1-13 (Parábola das 10 Virgens)
Mt 25:14:30 (Parábola dos Talentos)
Mt 25:31-46 (O grande Julgamento)

Nem sempre é de fácil aceitação e de fácil compreensão o fato de haver um julgamento final. O fato de que pessoas serão salvas e outras condenadas eternamente. Esse julgamento divino pode ser considerado justo?

Este post expõe uma tentativa de se compreender melhor tal questão fazendo uso, para tanto, do contexto dos textos bíblicos citados acima, o qual relaciona esse Julgamento Divino  ao ato de "amparar".

Na parábola das 10 virgens Jesus quiz alertar sobre a necessidade de que seja "comprado de graça" o azeite para lamparinas. Entretanto faz-se necessário fazer isso dentro de um período aceitável. Se ainda houver tempo suficiente para analisarmos  as outras duas parábolas é porque ainda há tempo aceitável.

A parábola dos talentos tem a ver com vida material e financeira, com recursos. Deixa claro que os bens que Deus dá a alguém é para aumentar a riqueza de Deus: Almas salvas, almas amparadas. Aquele que colocar seus talentos (leia-se recursos materiais) à disposição para isso, pode-se considerar alguém prudente, com azeite em sua lamparina. Dentro do contexto da parábola essa pessoa vai ficar mais próspera ainda.

A parábola do grande julgamento deixa claro a relação das palavras "amor e amparo" com a prudência, e com os recursos materiais no sentido de que aqueles que ampararam a quem a Jesus chamou de "meus  pequeninos irmãos" (MT 25:40) entraram para a "posse do reino que vos está preparado desde a fundação do mundo". Enquanto que áqueles que tendo algum recurso, mesmo que apenas unzinho talento, deixou "desamparadas" essas pessoas, resta a condenação para um "castigo eterno" (MT 25:46).

Se a pessoa desamparada for alguém a quem você (eu) ama(o) de verdade, esse juízo vai lhe (me) parecer mais justo que injusto. Tanto justo quanto for o amor que tivermos por tal pessoa.

Sendo, assim é salutar considerar que a compreensão da Justiça de Deus, dentro desse contexto, tem a ver com a capacidade de amar. Vamos comprender isso tanto quanto for nossa capacidade de amar.

Nem precisa falar que individual e socialmente a verdadeira crise a noticiar e a enfrentar é a da dificuldade de amar e consequentemente de compreender a justiça de Deus.









Primeiro de 2014


Senhor, como de costume, sempre faço uma oração como o primeiro post do ano. Gostaria portanto de me colocar diante de Ti para lhe dizer algo:

Os anos estão passando rapidamente e este é um ano incomun para nós brasileiros por causa dos eventos sociais que estão planejados para acontecerem. Além dos feriados nacionais, a copa e as eleições. Sem falar de outros eventos que ocorrerão também no ambito individual.

Diante disso, quero primiramente agradecer pela oportunidade de viver esses eventos, mas quero pedir sabedoria a todos nós para que possamos aprender a lidar com a complexidade que essa rapidez de sucessão de muitos eventos implica.

Senhor, nos dê da sua sabedoria. Ensina-nos e ajuda-nos a pensar de acordo com sua Palavra. Peço isso pra que haja menos dores e sofrimento e desamparados. Peço isso para sua Glória. Amém.



sábado, 9 de novembro de 2013

CSCW (Resuminho baseado no Weekpedia)



Um dos possíveis pontos fortes de uma organização é sua capacidade de prover um suporte ao trabalho colaborativo entre as pessoas envolvidas em seus processos de trabalho.

Dizer que "trabalho colaborativo" é importante é uma redundancia, mas, dizer que é necessário compreender o assunto pode não ser. Portanto, segue um pequeno resuminho informal que pode organizar as idéias para um estudo sobre o assunto.


CSCW - Computed Supported Collaborative Work [1,2] é um conceito amplo onde o "trabalho colaborativo" está inserido. O quadro [3] dá a idéia perfeita das maneiras em que o trabalho colaborativo pode acontecer e define também um conceito específico para cada uma dessas maneiras sendo definidas com base nas dimensões "tempo" e "espaço":

Trabalho
ao Mesmo tempo e no mesmo espaço
ao Mesmo tempo e em espaços diferentes
em momentos diferentes e no mesmo espaço
em momentos direrentes e em espaços diferentes

As diferentes categorias de softwares podem ser classificadas dentro dessas caterogorias. Entender isso pode ajudar em muito na análise das necessidades do negócio e das soluções potencias a ser adotada.

Esse é o ponto de partida. Agora é só ler as referências e as que elas citam pra começar a entender do assunto...


1 - http://pt.wikipedia.org/wiki/CSCW
2 - http://en.wikipedia.org/wiki/Computer-supported_cooperative_work
3 - http://en.wikipedia.org/wiki/File:Cscwmatrix.jpg

terça-feira, 8 de outubro de 2013

Minhas impressões sobre o filme As Melhores Coisas do Mundo



Acabei de assistir ao filme ."As Melhores Coisas do Mundo", Impressiona o poder que a obra tem de provocar, de maneira bastante intensa (acredite) os diversos sentimentos de quem assiste, pois a proposta de pensar/filosofar sobre a vida é instintivamente irrecusável.

As observações que faço abaixo não são técnicas e sim subjetivas.  O objetivo do post é parabenizar os profissionais envolvidos no trabalho e aceitar a proposta de refletir um pouco mais sobre o filme e sobre a vida.

O filme retrata a vida de um adolescente. Não arrisco a dizer que são exageradas as situações a que o o adolescente foi exposto porque a sociedade de hoje é "diabolicamente" desafiadora. Digo diabolicamente no sentido literal mesmo! Justifico isso por considerar que todo sofrimento causado por ações que são fora do que a Bíblia aponta como abençoadoras são decorrentes de influência maligna. Não precisa concordar, mas fica o convite para se constatar. Minhas impressão é a de que foi exatamente esse tipo de sofrimento o mais frequente entre os personagens, o que faz do filme um porta retrato da sociedade hodierna.

Mas, no contexto geral da obra, a vida brilha como a bênção de Deus que é.  A luta pela sobrevivência em sociedade e pela preservação da sanidade mental é uma constante. Todos os personagens conseguem, de uma maneira ou de outra, sobreviver e continuar lutando.  E essa foi a bela lição que o filme mostrou.

Mostrou também que há vitória para as pessoas que tem um caráter irretocável, como foi o caso do personagem principal, o adolescente, que a meu ver, se deu bem no final do filme. Eu diria, foi abençoado!

A única dissonância entre o filme e a realidade (pelo menos a que eu conheço) é o conhecimento e não raro o apego à cultura, e em particular, à cultura brasileira com seus ícones e momentos históricos importantes.  Infelizmente, me parece que a juventude de hoje nem saberia de que se trata esse assunto.

Por fim, valeu a pena assistir.  Que bom saber que temos profissionais capazes de produzir um trabalho com esse nível altíssimo de qualidade. E que Deus nos ajude como sociedade. Estamos precisando!

Deus abençoe!!!


terça-feira, 2 de julho de 2013

Hora do servidor andando mais rápida que o normal

SITUAÇÃO DE TESTE EM QUE O HORA DO SISTEMA TEM QUE AVANÇAR MAIS RÁPIDO QUE O NORMAL

Temos um software que está em fase de testes em que muitas das regras de negócio tem a ver com a data. Então não dá pra esperar 3 meses de verdade pra testar se uma regra foi codificada corretamente.
Uma solução para testar essas regras é a de que o tempo passasse mais rápido, e como o tempo do sistema desenvolvido tem como base o do próprio servidor em que está hospedado então a questão era só fazer o horário do servidor avançar mais rapidamente.

Haveria muitas formas de fazer isso, mas uma delas é a seguinte:
(a cada minuto queremos acrescentar uma hora no horário do servidor)

#!/bin/bash
horaatual_com_1hora_a_mais=$(date +"%m/%d/%Y %H:%M:%S" -d +1hour)
date --set="$horaatual_com_1hora_a_mais"


nomear esse script como

server_time_forward.sh
e colocar no crontab da seguinte maneira:

0-59/1 * * * * root /home/administrador/fzlbpms/bin/crontab/server_time_forward.sh





sábado, 5 de janeiro de 2013

retorno de uma função em shellscript


referencia:
http://www.linuxjournal.com/content/return-values-bash-functions

(estou supondo que o leitor sabe criar arquivos de shellscript e executa-los, sabe criar  e executar funções com shellscripts e conhece sobre escopo de variáveis se nao souber he so googlar sobre shellscript...)


Funções em shellscript nao retornam valor para quem a chamou, elas retornam ou zero (signafica que rodou ok) ou um (que deu algum erro).

Uma alternativa pra obter valores da funcao seria fazer com que elas funcionem como procedimentos,  fazendo que elas apenas alterem uma variável global e apos rodar a funcao voce consulta o valor da variavel global.Por exemplo.


global_current_pid="not-defined-yet"
get_current_pid(){
    global_current_pid=$$;
}
get_current_pid
echo "$global_current_pid"



Mas usar variáveis globais pode ser desafiador para scripts grandes. Por isso é que as linguagens modernas fazer permitem recursos de variáveis locais que podem ser retornadas pela funcao.
Então outra alternativa seria a técnica de substituição de comando.


get_current_pid(){
    echo $$;
}
echo $(get_current_pid)


mas eu percebi que pra isso funcionar, tem que tomar um pequeno cuidado, o que pra mim, em particular passa a ser um problema e vou explicar o porquê depois. Vamos ver o problema primeiro:


get_current_pid(){
    echo "getting current pid..."
    echo $$;
}
echo $(get_current_pid)

meu retorno ficou...

[wagner@fzlbpmshost bin]$ ./fzl_utils.sh
getting current pid... 2842



ou seja, quando a gente coloca alguns echos para imprimir algumas informações sobre o que esta acontecendo durante a execução do código o retorno da função fica poluído com essas informações. Como uma pessoa muito comum eu sempre coloco echos para entender melhor o que esta acontecendo o que faz dessa opcao algo inviavel pra mim (pelo menos enquanto nao encontro uma solucao pra isso).

a outra alternativa é usar eval...
vamos ao exemplo, depois a gente analisa...



get_current_pid(){
    echo "(inside function... ) getting current pid..."
    to_be_returned=$1
    eval $to_be_returned="'$$'"   
}

get_current_pid pidReceivedFromFunc
echo "$pidReceivedFromFunc"



executando isso, obtem-se:

[wagner@fzlbpmshost bin]$ ./fzl_utils.sh
(inside function... ) getting current pid...
4509


to_be_returned=$1 significa que a mesma variavel que a função recebeu será aquela que desejamos retornar, por isso coloquei um nome bem sugestivo "to_be_returned" :)
Mas pra entender bem o que vem depois você vai ter que perceber aqui um detalhe do que está contecendo...
coloque, por curiosidade a seguinte linha no script, pra ele ficar assim...


get_current_pid(){
    echo "(inside function... ) getting current pid..."
    echo $1
    to_be_returned=$1
    eval $to_be_returned="'$$'"   
}

get_current_pid pidReceivedFromFunc
echo "$pidReceivedFromFunc"



executando de novo, obtem-se:

[wagner@fzlbpmshost bin]$ ./fzl_utils.sh
(inside function... ) getting current pid...
pidReceivedFromFunc
4526

Caramba, o que a nossa funcao recebeu na verdade foi o nome da variavel que quem chamou definiu...


opa, agora sim, dá pra falar do eval:


primeiro uma definição:
eval significa que o que vem depois  sera interpretada de novo. de novo. Ou seja,  o script quando esta rodando já esta sendo interpretado pelo bash pra que seja executado de fato, mas quando chega nessa linha o bash interpreta o eval primeiro e quando isso acontece o bash fica sabendo que vai ter que interpretar de novo o que vem depois desse eval pra depois sim rodar isso que vem depois

agora vendo como isso aconteceu no codigo:
o bash quendo vê o eval ele fica bem esperto com o que vem depois desse eval

e o bash vai perceber que  varival local to_be_returned vai estar valendo $1 que é exatamente o nome da variável que a função recebeu, ou seja

to_be_returned=pidReceivedFromFunc

aí o bash vai considerar o seguinte:
"como eu (bash) percebi que tinha um eval antes de 

to_be_returned=pidReceivedFromFunc


então vou interpretar isso de novo...
pidReceivedFromFunc=$$

entao, por fim, o que acontece na verdade é que  a nossa função recebeu um nove de varíavel que acabou recebendo o valor que a função estava querenddo retornar e então quem chamou poderá consultar o que foi atribuído a essa variável e obter o retorno da função.

Qual o efeito colateral disso? Por ser uma "gambiarra" na verdade, destinada a contornar o fato de que a função em shellscript deveria se chamar na verdade procedimento, pelo fato de não retornar valor, é bem provável que haja efeitos colaterais...

veja isso...


get_current_pid(){
    echo "(inside function... ) getting current pid..."
    echo $1
    to_be_returned=$1
    eval $to_be_returned=$$
}

test_if_the_name_of_the_variable_passed_to_function_is_global(){
    echo "$pidReceivedFromFunc";
}

get_current_pid pidReceivedFromFunc
echo "$pidReceivedFromFunc"
test_if_the_name_of_the_variable_passed_to_function_is_global

essa função, que nao tem na a ver com o relacionamento entre a chamada da funcao get_current_pid e a variavel criada para obter o valor do pid corrente, acaba conhecendo essa variável criada o que faz dela uma global da mesma forma... talvez pior porque quando você vai programar com liguagens procedurais tipo cobol você já fica esperto com as variáveis globais, coloca lá uma área do código pra elas e trabalha com cuidado com relaçao ao que está acontecendo com elas enquanto que neste caso você acaba criando variáveis globais "por aí..." durante o código...

a conclusão que tiro de tudo isso é a seguinte... você vai usar shellscript...
é uma lunguagem procedural... trabalha dentro desse paradigma então, evitando gambiarras. Na verdade não há nada de errado com variáveis globais a não ser o cuidado especial que você tem que tomar com elas...

no caso de funções bem simples como essa
get_current_pid onde não é necessário echos pra ajudar entender a execução do código, então a técnica de substituição de variáveis é melhor porque não cria variáveis globais...