Nobody here reads e-mails. Avoid sending e-mails. If you need to send an e-mail to someone, notify him/her on Slack in order to actually have them reading it.
First week on a startup.
Die, e-mail, die, die. Finally!
Nobody here reads e-mails. Avoid sending e-mails. If you need to send an e-mail to someone, notify him/her on Slack in order to actually have them reading it.
First week on a startup.
Die, e-mail, die, die. Finally!
I’ve seen companies saying they have Big Data because they implemented Hadoop or a data lake and maybe Spark.
That’s just wrong.
Big Data, or more precisely, to be Data Driven, is a state where the data a company produces can be reused, as soon as possible, to optimize itself. And there are many ways to reuse data: all meetings and decisions happen with abundance of data, or recently generated data instantly feeds machine learning algorithms to optimize transactions, just to name a few situations.
To be Driven by Data is part culture and part infrastructure. On the infrastructure side, IT teams still struggle with limited visions about how data should flow pervasively and how access should be granted. They fear about security and performance while they should fear of missing out the data opportunity.
Data Streaming is a breakthrough recent technology that is here to help with more fluent data access. For an agile and effective data architecture, Data Streaming is much more strategic and important than just a bigger data warehouse because it is the component that can unleash your data and finally make it useful.
Todo mundo quer ser rico e eu também.
E aí numa conversa descobri que meu ideal sagitariano e estóico de riqueza não é muito comum.
Prá começar, carro de luxo nem pensar. Prá que continuar preocupado com multas, batidas, lugar prá estacionar, depreciação? Quando eu for rico, só vou andar de táxi. Atravessar a cidade prá visitar a irmã? Táxi. Viagenzinha pro interior com a família? Táxi. Prá ver a paisagem, ler, conversar, cochilar.
Refeições eu faria em restaurantes. Todas as 3 refeições do dia. Todos os dias. Nunca mais me preocuparia se tá faltando ovo e brócolis e nem se as coisas na geladeira já vão estragar. Louça suja não existiria para mim. E o melhor: nunca mais teria que pensar 3 vezes ao dia o que preparar para as crianças comerem. Eu quero é ver o cardápio. Mas aí eu seria tão rico que também teria nutricionista prá prestar serviço ao vivo de montar refeição saudável e balanceada em todos os lugares que fossemos comer.
Cobertura? Casa de luxo? Faço nenhuma questão porque ainda teria que me preocupar com decoração que impressione amigos, manutenções sem fim, despensa de comida e material de limpeza, o que acumular e o que jogar fora. Quero não. Eu moraria em hotel mesmo. Cinco estrelas, claro. Tipo suíte do Copacabana Palace ou do Tangará, que já provei e aprovei para morar longas temporadas. Enjoei da decoração, do bairro, da cidade? Fácil, é só pagar a conta e ir a outro hotel. Ou resort. Ou outro lugar com serviço completo, daqueles que você sai para tomar café e volta e já tá tudo arrumado e dobrado.
“Ah, mas alguma hora cê não vai querer voltar prum canto que é só seu?” Não. Entendo que “voltar” presume “ter ido embora”, e creio que nunca fui embora de mim mesmo. A nossa morada somos nós mesmos, né não?!
“Ah, mas onde você vai guardar suas coisas?” Na nuvem e numas 2 malas de roupas, ou menos. O resto das coisas eu abriria mão imediatamente por esse estilo de vida desprendido e sem planejamento.
“Ah, mas aí cê estraga os filhos”. Verdade, eu precisaria pensar melhor nessa parte, mas dá uma preguiça…
Dizem que eu tenho uma concepção de pobre sobre essa riqueza pretérita. Chame do que quiser, eu só não quero compromissos, responsabilidades, ter que fazer compras, contratar manutenções para eletrodomésticos etc. Desprendimento seria o centro. Até a própria riqueza seria um acessório só para viabilizar conforto e mais desprendimento.
Pronto falei, podem jogar as pedras.
Se homens nadam e mulheres voam, não vamos esperar que mulheres queiram nadar e vice-versa.
É inegável que mulheres e homens são diferentes. Eu não sei como e porque isso acontece. E me é difícil entender se essas diferenças (ou partes delas) são causadas pela sociedade e ambiente (preconceitos) ou se são naturais. Só sei que não podemos mais tolerar as diferenças causadas claramente por preconceitos, enquanto devemos sim estimular e aproveitar diferenças naturais para que cada ser humano realize o máximo de sua natureza e potencial.
Tudo isso também se aplica a outros tipos de diversidade. LGBT, PcD, grupos étnicos etc.
— extraído de comentário que escrevi num post da colega Cintia Barcelos
Me colocaram num grupo de nômades digitais cujas discussões são nada menos que absolutamente inspiradoras.
São pessoas desprendidas e provavelmente sem filhos que têm profissões que levam de forma remota, pela Internet, e que passam a vida viajando.
Discutem se os próximos meses devem passar nas Maldivas, Tenerife ou Tailândia. Contam o paraíso que foi tal e tal lugar onde ficaram N meses.
Não é algo novo, mas a cultura do trabalho remoto recebeu o aval maior pela pandemia e a Nação dos Nômades Digitais deve crescer nos próximos anos.
Claro que algumas coisas ajudam: ter renda em moeda forte — para pagar barato por produtos e serviços em lugares distantes do planeta —, ter um trabalho que permite essa situação — ou ser rico mesmo — e não ter filhos — para ser desprendido e ganhar agilidade para ir e vir.
Mesmo achando que já vivo no paraíso, preciso confessar que esse modo de viver me atrai e faço planos secretos de catar a namorada e virarmos nômades assim que os filhos alcançarem a alta adolescência.
Alguns lugares que eu voltaria ou passaria com prazer uma temporada:
Hibiki, Tashkent, Nova York, interiorizão dos EUA, Piemonte, Tenerife, Hamburgo, Carolina do Norte em maio, Addis Abeba, Ibiza, Belém do Pará…
E você?
Apache Spark is like Python’s Pandas and is like SQL databases. It can manipulate datasets, filter, integrate, transform.
But Spark was designed from scratch with horizontal scalability and parallelism in mind, which makes it capable of handling datasets with billions or even unknown number of rows — even if a bit less flexible than Pandas.
This is not new in the industry. Enterprise editions of commercial SQL databases are parallel and scalable since a very long time, being also very expensive in all levels of the stack: service/support, software and hardware.
But Spark is free software. And can use Hadoop — also a free software — as scalable and highly available storage, on cheap commodity hardware. In addition, it has a vibrant community and a democratic ecosystem of services and support.
As with all Open Source, Apache Spark changes the economic landscape of massive data processing systems market, taking money out of a few proprietary HW and SW vendors and pulverizing it locally on people and support.
Programming is the art of creating flexible engines that can be easily extended as new features are needed over time.
Experienced programmers use Design Patterns to help make engine’s functions, features and structure (materialized as code) easily and clearly extensible.
Young programmers must learn and use Design Patterns, and Refactoring Guru has a very nice starting point.
Hoje eu recebi minha cidadania portuguesa! Minha irmã foi na minha cola e também se deu bem, como todos que seguem minhas dicas 😎
Read MoreOntem eu perdi na praia chave do carro, chinelos e máscara de mergulho.
A chave achei metros de distância embrulhada numa toalha nada a ver.
Os chinelos, depois de ½ hora procurando desesperado, o amigo me diz que foram usados prá marcar os limites do gol 50m prá lá. E tavam lá mesmo, enfiados bonitinhos na vertical na areia.
A máscara de mergulho a onda me levou num belo dum caldo que arruinou os planos de snorkeling. 3 horas depois a maré trouxe de volta e meu filho achou.
Na volta encontrei a redenção no sorvete de doce de abóbora com coco no Rocha de Maresias.
Praia linda, dia perfeito, final feliz.
Saudade de uma bela viagem de férias. Se a pandemia nos ancora em casa, podemos pelo menos lembrar as passadas e planejar as próximas. Abaixo estão as memórias de algumas viagens que fiz e farei. Quero me inspirar com as suas também.
Saudade de férias em hotel de luxo de alguma praia europeia, Biarritz (que só passei num dia de chuva), Noli na costa da Ligúria, ou a que fiz em Sitges na Cataluña, mesmo que a trabalho. Ilha da Madeira, Tenerife, Ibiza, me aguardem!
Read More2020 list of desired hard skills for data professionals. From the most essential to the more difficult ones.
Please remember this list has only hard skills. Ethics, domain and industry knowledge, communication are very important soft skills that won’t fit in this list.
Generally speaking, beginning of the list is where Data Analysts are (up to ≈11). Data Engineers get up to the middle of list (up to ≈18). And Scientists get all the list.
There is also the following graph that I’ve produced:
Podemos agradecer ao virus corona por ajudar a erradicar os leitores de dedo para uso banal como catraca de academias, recepções de prédios comerciais e residenciais etc. Eu nunca relei meus dedos nesses leitores e você deveria fazer o mesmo, pois da perspectiva de Segurança da Informação aquilo é um engodo. E da perspectiva de Higiene, é nojento.
Leitores de dedo são uma “maravilha” para armazenar e socializar germes, bem como sucos vitais que todos nós expelimos (suor e todo tipo de meleca). Se você está envolvido em projetos que implantam esse tipo de tecnologia, prefira outras biometrias superiores que já estão em todo lugar, como reconhecimento facial de múltiplas câmeras.
Este post tem a objetiva intenção de te dar asco de leitores de dedo.
Sobre esse tweet, eu queria dizer que não é bem isso; deixe-me explicar do ponto de vista de um vegetariano.
Nós VGs, passamos muito bem sem carne. E também nem faço questão da tal proteína vegetal texturizada (imitação de carne) porque não é assim “gostoso” e é muito processado.
A questão central é que é muito fácil fazer comida gostosa com carne. Só por um salzinho e fritar que fica ótimo. Dá muito mais trabalho cozinhar gostoso sem carne, exige mais temperos, mais conhecimento de pratos internacionais, mais ingredientes, mais tempo de preparo etc. E os estabelecimentos geralmente não estão preparados para isso, ou não têm tempo, ou seus cozinheiros têm conhecimento elementar (só sabem cozinhar gostoso com carne). Isso acontece com todas as pessoas que cozinham para nós, em todos os lugares e épocas da nossa vida.
Read MoremacOS Catalina doesn’t ship with Python 3, only 2. But you can still get 3 from Apple, updated regularly through system’s official update methods. You don’t need to get the awful Anaconda on you Mac to play with Python.
Python 3 is shipped by Xcode Command Line Tools. To get it installed (without the heavy Xcode GUI), type this in your terminal:
xcode-select --install
This way, every time Apple releases an update, you’ll get it.
Settings window will pop so wait 5 minutes for the installation to finish.
If you already have complete Xcode installed, this step was unnecessary (you already had Python 3 installed) and you can continue to the next section of the tutorial.
In case you already have Python installed under your user and modules downloaded with pip, remove it:
rm -rf ${HOME}/Caches/com.apple.python/${HOME}/Library/Python \ ${HOME}/Library/Python/ \ ${HOME}/Library/Caches/pip
Now that you get a useful Python 3 installation, use pip3 to install Python modules that you’ll need. Don’t forget to use –user to get things installed on your home folder so you won’t pollute your overall system. For my personal use, I need the complete machine learning, data wrangling and Jupyter suite:
pip3 install --user sqlalchemy pip3 install --user matplotlib pip3 install --user pandas pip3 install --user jupyterlab pip3 install --user PyMySQL pip3 install --user configobj pip3 install --user requests pip3 install --user seaborn pip3 install --user bs4 pip3 install --user xgboost pip3 install --user scikit_learn
But you might need other things as Django or other sqlalchemy drivers. Set yourself at home and install them with pip3.
For modules that require compilation and special library, say crypto, do it like this:
CFLAGS="-I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/include" \ LDFLAGS="-L/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib" \ pip3 install --user pycrypto
For some reason, Apple installs many different Python 3 binaries in different places of the system. The one that gets installed on /usr/bin/python3 has problems loading some libraries and instrumentation with install_name_tool would be required. So lets just use the binary that works better:
export PATH=/Library/Developer/CommandLineTools/usr/bin:$PATH
Commands installed by pip3 will be available in the ~/Library/Python/3.7/bin/ folder, so just add it to your PATH:
export PATH=$PATH:~/Library/Python/3.7/bin/
Now I can simply type jupyter-lab anywhere in the terminal or command line to make it fire my browser and get a Jupyter environment.
Xcode Command Line Tools will get you a full hand of other useful developer tools, such as git, subversion, GCC and LLVM compilers and linkers, make, m4 and a complete Python 3 distribution. You can see most of its installation on /Library/Developer/CommandLineTools folder.
For production and high end processing I’ll still use Python on Linux with my preferred distribution’s default packages (no Anaconda). But this method of getting Python on macOS is fastest and cleanest to get you going on your own data scientist laptop without a VM nor a container.
Se sua missão é entregar dados a usuários, soluções de Business Intelligence open source baseadas em Python emergem como opções muito atrativas frente aos proprietários MicroStrategy, PowerBI, Cognos, Google Data Studio, Tableau etc.
Read MoreNo circuito dos restaurantes bem-brasileiros de São Paulo, lanço aqui 3 que são notáveis: o Capim Santo, o Jiquitaia e o Tordesilhas. Valorizam tudo da nossa cultura, culinária, música, decoração e sobremesas e por isso são também ótimas opções para turistas que visitam a cidade.
A foto é do maravilhoso curry de camarão com leite de coco do Capim Santo, onde há também um delicioso caldinho de milho entre outras entradas muito elaboradas. Do Tordesilhas, lembro da maravilhosa seleção de cachaças, loucas para se misturarem aos cajus e maracujás, e também os bobós, moquecas, farofas, xinxins e pimentas. O Jiquitaia também tem batidas inusitadas, ingredientes brasileiríssimos e uma mão no fusion.
Toda baianidade também se experimenta no Rota do Acarajé, lá na Santa Cecília, onde além dos pratos impecáveis, oferecem um extenso cardápio de cachaças e batidas de frutas. O Mestiço também tem alma brazuca mas criou uma ponte de sabores com a Ásia remota.
E não se pode esquecer os milhares de restaurantes de esquina paulistanos que tipicamente e religiosamente servem toda 2ª virado à paulista e feijoada na 4ª. Mas não se comparam a busca da perfeição em todos os sentidos dos que citei no começo.
E você, teria mais dicas ?
Minha headline no LinkedIn é só prá inglês ver. Esta é a verdadeira:
Notório Saber em gostosuras do milho, especialmente O Sorvete • Crítico de Margherita das pizzarias paulistanas • PhD em Audição Musical com doutorado em Música Instrumental Brasileira e mestrado em Música Clássica
A profissão de Cientista de Dados ganhou notoriedade e eminência nos últimos anos. Uma figura que tem saído do círculo hipster das startups e invadindo empresas de todos os tamanhos. Até os mais tradicionais executivos já compreendem que, tendo seu negócio entrando na era da informação e se tornado uma usina de dados, há que se lançar mão de profissionais especializados, que saibam como tirar proveito de todos esses dados.
Mas será que está claramente compreendido qual é o papel do Cientista de Dados? Sabe-se o que esperar dele? Consegue-se usufruir de todo o seu potencial?
Enquanto os outros profissionais da área de dados, se aproximam ou mais do TI (como o engenheiro de dados) ou mais do negócio (como o analista de dados), o Cientista trabalha o tempo todo junto às duas áreas.
Enquanto os outros profissionais de dados tratam da curadoria, performance, qualidade, apresentação de informações que existem, o foco principal do Cientista de Dados é calcular tendências e inferir dados que ainda não existem.
O Cientista de Dados está próximo do negócio. Entende sua semântica, desafios e necessidades. E tem plena consciência das informações que tem a sua disposição, sejam privadas ou públicas. E quais novas informações pode derivar delas. Navegar nesses dois mundos — dados e negócios — permite ao Cientista de Dados fazer melhores perguntas e já trazer respostas sobre o negócio — respostas que são os dados que ainda não existem. Por exemplo:
Repare que muitas dessas perguntas estão relacionadas ao futuro, a informações que não existem ainda. Cientistas de Dados conseguem prever o futuro — ou a probabilidades de eventos acontecerem — e é por isso que são verdadeiros oráculos.
Essa capacidade do Cientista de Dados também coloca-o na posição de literalmente poder calcular a chance de sucesso de uma determinada iniciativa de negócio.
Em 2013, Gartner explicou ao mundo o nexo das novas forças de TI, onde Dados, Mobilidade e Redes Sociais têm um papel determinante para o sucesso de qualquer empresa que quer se manter moderna.
Fica claro que a Mobilidade é a rota para uma organização chegar nas pessoas, sejam elas clientes ou colaboradores. Alavancar também o poder colaborativo das Redes Sociais para fomentar uso e fazer os Dados circularem. No começo dessa era, houve uma corrida para empresas criarem suas apps, que nada mais eram do que o catálogo digital de seus produtos, ou seu site institucional no smartphone, ou até mesmo prover diretamente os dados a seus usuários, como seu saldo ou extrato. Pouca novidade até aqui. Mas a era da Mobilidade representa o momento histórico em que organizações passam a estar constantemente ao lado de seus clientes e colaboradores, quando acordam, quando trabalham, quando almoçam, quando vão dormir. Mais ainda: se o usuário der permissão para a app, ela poderá chamá-lo para interagir ou entregar uma novidade, através das notificações que aparecem na tela.
Mas qual informação a app vai entregar proativamente ao usuário? Quando? Onde? É o Cientista de Dados que tem a responsabilidade de fazer a ponte entre os dados virgens e a app do usuário, no sentido de entregar a informação certa na hora e no lugar adequado, com o objetivo de tocar o coração de quem usa.
As possibilidades são infinitas. Um exemplo no varejo é determinar quais são os clientes que devem receber uma notificação às 11:45 da manhã informando que já está disponível na loja nas redondezas onde ele costuma almoçar um produto que vai lhes interessar.
Um outro campo interessantíssimo para o Cientista de Dados é próximo ao fenômeno da Internet das Coisas, onde sensores coletam constantemente dados do ambiente a sua volta. Inclui-se aqui também sensores biométricos, que medem indicadores do corpo humano, como características do sono, pressão sangüínea, alimentação etc. O Cientista de Dados é a figura que agrega esses dados — que isoladamente têm baixa significância — encontra correlações pouco óbvias e é capaz de re-injetá-los no processo do negócio para assim transformá-lo, otimizando ações que outrora eram reativas, em proativas.
Dizem que o Cientista de Dados é um estatístico que conhece mais ferramentas computacionais que um estatístico médio. Ou também um programador que conhece mais estatística que um programador médio.
Base sólida em matemática, probabilidade e pensamento estatístico, boas noções de econometria, bons conhecimentos em ferramentas computacionais como machine learning, fazem um Cientista de Dados ser prático e mão-na-massa. Multidisciplinaridade e traquejo para circular nos corredores do negócio são extremamente importantes também. Apesar de seu pé na programação, o estereótipo engraçado do programador que vive a base de pizza e cafeina não combina muito bem com o Cientista de Dados.
Claro, há bons profissionais que não programam ou deixaram de ser mão-na-massa. Estes acabam atuando coma uma espécie de CDO (chief digital officer), com o adicional de que têm experiências mais concretas sobre onde pode-se chegar com os dados. Mesmo assim, ele terá que lançar mão de outros Cientistas de Dados que programam e são mais mão-na-massa.
O Cientista de Dados geralmente programa em Python, usa Jupyter e é bom conhecedor do ferramental de visualização e gráficos dessa linguagem, bem como as de machine learning e inferência estatística. SciKit Learn, StatsModel, Pandas, Seaborn, XGBoost, Shapley é o arroz-com-feijão deste profissional.
Respire fundo e arregace as mangas caso escolha ser um Cientista de Dados. A gama de disciplinas exigidas é larga. Vai de matemática, programação, TI, até o negócio, cultura e intuição sobre o mundo a sua volta. Prepare-se para programar com ferramentas avançadas e que sempre estarão em voga. Prepare-se para conhecer o negócio em nível matemático e também multicultural e multidisciplinar.
Mas chegando lá, você será singular em sua roda. Terá uma posição sob os holofotes em seu meio profissional, devido a sua bagagem de conhecimentos e capacidade de transformação.
Para se apreciar uma bela vista, é necessário escalar uma alta montanha. E o Cientista de Dados é o que está em seu topo.
Qualquer café da manhã de um típico hotel israelense tem:
Read MoreEsta campanha presidencial foi uma das experiências mais incríveis e inesperadas da minha vida. Contundente também.
Nos revelamos nas redes e deixamos positiva e negativamente surpresos muitos amigos. Mas nossa faceta política é só uma entre muitas que nos constituem como humanos legítimos e complexos. Se a faceta de gostos políticos de um amigo me decepcionou, sua faceta musical, profissional, culinária ou de pai/mãe pode me fascinar. E vice-versa.
Meu objetivo de vida é eliminar minhas complexidades interiores para viver em constante fascínio com todos. Conectando o meu elementar humano com o elementar humano de todos a minha volta.
Ao contrário do que se pensa, os robôs da campanha via WhatsApp não enviaram as fake news diretamente para milhões de brasileiros. Enviavam só para algumas centenas de grupos extremistas enormes como “Direita é o Poder”, “Parada Hétero” etc. A partir daí, seus usuários humanos propagavam organicamente os memes e fakes pelos seus grupos de família, escola e trabalho, que por sua vez também os propagavam. E foi assim que a maioria dos brasileiros receberam de seus próprios amigos (e não de robôs) a enxurrada de memes que vimos ao longo de setembro.
Todas as campanhas políticas da história lançaram mão de disseminação de boatos, propaganda enganosa, disseminação de medo, incerteza e dúvida. Essas construções da mente são, inclusive, uma das característica que nos diferenciam dos outros animais, conforme citam Yuval Harari em seu livro Sapiens e outros autores.
Mas na campanha presidencial brasileira de 2018 isso foi levado a níveis extremamente nocivos devido a junção inédita de 3 fatores:
Foi no começo de setembro que observei um aumento expressivo na disseminação de memes nos grupos da escola e da família que faço parte. É difícil saber se é puramente orgânico ou se foi estimulado por uma campanha de robôs alguns níveis antes. No meu caso, o conteúdo era encaminhado sempre por 3 usuários, um deles declaradamente de extrema direita e muito ativo politicamente.
O video da denuncia, que mostra o próprio Bolsonaro e a tela do WhatsApp em atualização frenética devido ao envio robótico de mensagens (que emergiu em 2 de outubro de 2018), revela os grupos de muito interesse através de seus nomes: “Direita é o Poder”, “Direita Ativa”, “Direita Agreste”, “BolsoMito”, “Direita Aprendiz”, “Parada Hétero” etc. Essa lista específica de grupos, aquela alta velocidade anormal de recebimento de mensagens, nas mãos de Bolsonaro, para mim comprovam o uso consciente de robôs de envio de mensagens de campanha. Todos os brasileiros puderam observar a eficácia dessa campanha visto a enxurrada de memes de ódio e escárnio que recebemos em nossos celulares. Muitos infelizmente foram permeáveis a esse ódio constante e insistentemente comunicado.
O aplicativo registra quando uma mensagem é encaminhada, pode-se ver o “Forward” ou “Encaminhado” sobre o balão da mensagem. Por trás dos panos, o aplicativo guarda uma série de metadados sobre a mensagem que numa análise forense nos servidores do WhatsApp permitiriam recriar toda a trajetória da mensagem, mesmo que o conteúdo em si é criptografado na transmissão entre usuários. Em outras palavras, via mandado judicial ou outro pedido formal, o WhatsApp seria capaz de dar um relatório completo sobre o conteúdo, incluindo quando o meme foi inicialmente publicado na rede, de qual endereço de internet, se foi usado um computador ou celular, de qual marca, de que região do planeta, número de telefone do usuário e eventualmente até seu usuário Facebook.
Qualquer tipo de limitação ou restrição não é a solução de longo prazo, mesmo porque o aplicativo não sabe diferenciar entre receitas de bolo e memes de ódio. Criar restrições para um tipo, valerão desnecessariamente para o outro tipo de conteúdo.
O que falta no WhatsApp é um mecanismo para que usuários denunciem conteúdo impróprio, colocando-o numa espécie de quarentena e assim evitar que outros usuários, inclusive em outros grupos façam qualquer coisa com tal conteúdo problemático. No Facebook, funcionalidade similar já foi implementada após os problemas nas eleições do Trump. Uma proposta para o WhatsApp seria o usuário selecionar o conteúdo ofensivo e denunciá-lo via alguma opção inédita no aplicativo. Uma vez decidido que é ofensivo/falso, o conteúdo passaria a ter uma moldura vermelha ou outra marca visual clara aos usuários informando que ele é problemático. O aplicativo inibiria e bloquearia outras operações sobre esse conteúdo também, como encaminhamentos, salvar no rolo da câmera etc.
Mas tudo isso, só para as próximas eleições.
One of the most interesting features of the new HEIF/HEIC image format — and a true expected innovation — is lossless compression.
Read MoreSe você está numa encruzilhada para escolher uma linguagem de computador para aprender a programar, escolha Python.
Read MoreJupyter Notebooks are the elegant way that Data Scientists work and all software needed to run them are already pre-packaged on Fedora (and any other Linux distribution). It is encouraged to use your distribution’s packaging infrastructure to install Python packages. Avoid at any cost installing Python packages with pip, conda, anaconda and from source code. The reasons for this good practice are security, ease of use, to keep the system clean and to make installation procedures easily reproducible in DevOps scenarios.
O coração pulou num show praticamente privado que Caetano Veloso nos concedeu na Casa do Povo. Uma hora de canções conhecidíssimas, que ele poderia ter extendido por muito mais tempo, pois tem repertório para tal. Performou super afinado, em ótima forma e técnica e fez questão de espontaneamente se declarar “de esquerda” no palco.
Após o show tive o privilégio de conversar com a figura quase mítica. Contou histórias sobre as décadas de 60, 70, 80 etc. Contei que ao longo de seu show lembrei de sua canção «Prá Ninguém» e ele por sua vez contou sua história, desconhecida para mim. Em 1993 Chico Buarque escreveu a música «Para Todos» que Caetano ouviu pela primeira vez na casa do autor e chorou de emoção ali mesmo. «Prá Ninguém» é a resposta de Caetano para a canção de Chico, poema musicado que cita um monte de cantores e suas canções famosas compostas por outros. Disse também, quase como um segredo, que João Gilberto adora a canção de Chico, e a partir daí contou diversas histórias malucas sobre João.
Que noite !
Ovo de páscoa é 3 a 6 vezes mais caro que a mesma quantidade de chocolate em barra. Seres humanos não comem papel celofane. Nem peixes, nem tartarugas do mar, que é onde vai parar, em forma de poluição, boa parte dessas embalagens vistosas. Faça um favor à inteligência de seus filhos e à sua, e ao planeta evitando esses produtos caros e oportunistas. A páscoa e seus ovos é uma excelente oportunidade para uma aula de educação financeira no supermercado aos seus filhos, já que escolas em geral não ensinam isso. Consumo consciente.
No CIAB 2017 (semana passada) a Câmara Interbancária de Pagamentos e bancos coligados apresentaram uma importante realização com Blockchain.
Read MoreEis uma lista de dicas que costumo mandar para amigos que vão para Paris. Dicas que não são encontradas em qualquer lugar. Procure fazer tudo a pé.
Tem um mapa com alguns desses pontos aqui.
Instale o Google Maps no seu celular e copie esse mapa pro seu Google Drive prá fazer os landmarks aparecerem no seu celular.
Tem os landmarks famosos aqui, mas não é o roteiro que eu focaria: https://en.wikipedia.org/wiki/Landmarks_in_Paris
Here is a curated list of active, responsive and valid BitTorrent trackers. Add them to the list of trackers of your torrents to increase your chance of finding peers and improve download speed.
Read More
A Internet sofreu um ataque de grandes proporções recentemente, conhecido como WannaCry. Nada melhor do que aproveitar o medinho que isso causou nas pessoas para se protegerem de próximos ataques. Siga as dicas aqui sozinho, ou peça para um amigo te ajudar a configurar seu computador. É tudo gratuito e fácil. As duas primeiras são para Windows, o resto serve para qualquer pessoa.
Tem a sorveteria SnowFall na rua Prates e na Oscar Freire. As taças são enormes e alguns sabores muito diferentes, como o de chá verde (foto) e o de pó de soja.
A base de todas as taças é a tal neve, feita na hora do pedido por uma máquina coreana exclusiva. A neve é feita de leite, leite condensado e açúcar, e a máquina a congela e transforma num tipo de raspadinha na hora.
Os sorvetes são menos doces e são acompanhados de feijão azuki e outras coisas desconhecidas para nós, mas que são muito populares na Coreia.
Como as taças são grandes, recomendo almoçar sorvete. Se você já vier “almoçado”, talvez a taça seja de mais. Aí eles têm opções de picolés muito bons ou de macarrons com sorvete (também meio grandes).
Definitivamente um lugar prá voltar !
When Sun and then Oracle bought MySQL AB, the company behind the original development, MySQL open source database development governance gradually closed. Now, only Oracle writes updates. Updates from other sources — individuals or other companies — are ignored. MySQL is still open source, but it has a closed governance.
MySQL is one of the most popular databases in the world. Every WordPress and Drupal website runs on top of MySQL, as well as the majority of generic Ruby, Django, Flask and PHP apps which have MySQL as their database of choice.
When an open source project becomes this popular and essential, we say it is gaining momentum. MySQL is so popular that it is bigger than its creators. In practical terms, that means its creators can disappear and the community will take over the project and continue its evolution. It also means the software is solid, support is abundant and local, sometimes a commodity or even free.
In the case of MySQL, the source code was forked by the community, and the MariaDB project started from there. Nowadays, when somebody says he is “using MySQL”, he is in fact probably using MariaDB, which has evolved from where MySQL stopped in time.
Open source software’s momentum serves as a powerful insurance policy for the investment of time and resources an individual or enterprise user will put into it. This is the true benefit behind Linux as an operating system, Samba as a file server, Apache HTTPD as a web server, Hadoop, Docker, MongoDB, PHP, Python, JQuery, Bootstrap and other hyper-essential open source projects, each on its own level of the stack. Open source momentum is the safe antidote to technology lock-in. Having learned that lesson over the last decade, enterprises are now looking for the new functionalities that are gaining momentum: cloud management software, big data, analytics, integration middleware and application frameworks.
On the open domain, the only two non-functional things that matter in the long term are whether it is open source and if it has attained momentum in the community and industry. None of this is related to how the software is being written, but this is exactly what open governance is concerned with: the how.
Open source governance is the policy that promotes a democratic approach to participating in the development and strategic direction of a specific open source project. It is an effective strategy to attract developers and IT industry players to a single open source project with the objective of attaining momentum faster. It looks to avoid community fragmentation and ensure the commitment of IT industry players.
Open governance alone does not guarantee that the software will be good, popular or useful (though formal open governance only happens on projects that have already captured some attention of IT industry leaders). A few examples of open source projects that have formal open governance are CloudFoundry, OpenStack, JQuery and all the projects under the Apache Software Foundation umbrella.
For users, the indirect benefit of open governance is only related to the speed the open source project reaches momentum and high popularity.
Open governance is important only for the people looking to govern or contribute. If you just want to use, open source momentum is far more important.
I once found on the internet the RDM software and found it useful.
I’ve created packages for easier installation, but I didn’t write the software. My packaging was published on GitHub but its not maintained anymore; I’m not using the software anymore.
Subject
tagCreator
tag based on camera modelThere was a time that Apple macOS was the best platform to handle multimedia (audio, image, video). This might be still true in the GUI space. But Linux presents a much wider range of possibilities when you go to the command line, specially if you want to:
The Open Source community has produced state of the art command line tools as ffmpeg
, exiftool
and others, which I use every day to do non-trivial things, along with Shell advanced scripting. Sure, you can get these tools installed on Mac or Windows, and you can even use almost all these recipes on these platforms, but Linux is the native platform for these tools, and easier to get the environment ready.
These are my personal notes and I encourage you to understand each step of the recipes and adapt to your workflows. It is organized in Audio, Video and Image+Photo sections.
I use Fedora Linux and I mention Fedora package names to be installed. You can easily find same packages on your Ubuntu, Debian, Gentoo etc, and use these same recipes.
ffprobe file.mp3
ffprobe file.m4v
ffprobe file.mkv
ls *flac | while read f; do ffmpeg -i "$f" -acodec alac -vn "${f[@]/%flac/m4a}" < /dev/null; done
ls *flac | while read f; do ffmpeg -i "$f" -qscale:a 2 -vn "${f[@]/%flac/mp3}" < /dev/null; done
First, make sure you have Negativo17 build of FFMPEG, so run this as root:
dnf config-manager --add-repo=http://negativo17.org/repos/fedora-multimedia.repo dnf update ffmpeg
Now encode:
ls *flac | while read f; do ffmpeg -i "$f" -vn -c:a libfdk_aac -vbr 5 -movflags +faststart "${f[@]/%flac/m4a}" < /dev/null; done
Has been said the Fraunhofer AAC library can’t be legally linked to ffmpeg due to license terms violation. In addition, ffmpeg’s default AAC encoder has been improved and is almost as good as Fraunhofer’s, specially for constant bit rate compression. In this case, this is the command:
ls *flac | while read f; do ffmpeg -i "$f" -vn -c:a aac -b:a 256k -movflags +faststart "${f[@]/%flac/m4a}" < /dev/null; done
This is one of my favorites, extremely powerful. Very useful when you get a Hi-Fi, complete but useless WMA-Lossless collection and need to convert it losslesslly to something more portable, ALAC in this case. Change the FMT=flac
to FMT=wav
or FMT=wma
(only when it is WMA-Lossless) to match your source files. Don’t forget to tag the generated files.
FMT=flac # Create identical directory structure under new "alac" folder find . -type d | while read d; do mkdir -p "alac/$d" done find . -name "*$FMT" | sort | while read f; do ffmpeg -i "$f" -acodec alac -vn "alac/${f[@]/%$FMT/m4a}" < /dev/null; mp4tags -E "Deezer lossless files (https://github.com/Ghostfly/deezDL) + 'ffmpeg -acodec alac'" "alac/${f[@]/%$FMT/m4a}"; done
iPhone and iPod music player can display the file’s embedded lyrics and this is a cool feature. There are several ways to get lyrics into your music files. If you download music from Deezer using SMLoadr, you’ll get files with embedded lyrics. Then, the FLAC to ALAC process above will correctly transport the lyrics to the M4A container. Another method is to use beets music tagger and one of its plugins, though it is very slow for beets to fetch lyrics of entire albums from the Internet.
The third method is manual. Let lyrics.txt
be a text file with your lyrics. To tag it into your music.m4a
, just do this:
mp4tags -L "$(cat lyrics.txt)" music.m4a
And then check to see the embedded lyrics:
ffprobe music.m4a 2>&1 | less
If some of your friends has the horrible tendency to commit this crime and rip CDs as 1 file for entire CD, there is an automation to fix it. APE is the most difficult and this is what I’ll show. FLAC and WAV are shortcuts of this method.
ffmpeg -i audio-cd.ape audio-cd.wav
iconv -f Latin1 -t UTF-8 audio-cd.cue | shnsplit -t "%n · %p ♫ %t" audio-cd.wav
ls *wav | while read f; do ffmpeg -i "$f" -acodec alac -vn "${f[@]/%wav/m4a}" < /dev/null; done
This will get you lossless ALAC files converted from the intermediary WAV files. You can also convert them into FLAC or MP3 using variations of the above recipes.
Now the files are ready for your tagger.
This is a lossless and fast process, chapters and subtitles are added as tags and streams to the file; audio and video streams are not reencoded.
bash$ file subtitles_file.srt subtitles_file.srt: ISO-8859 text, with CRLF line terminators
It is not UTF-8 encoded, it is some ISO-8859 variant, which I need to know to correctly convert it. My example uses a Brazilian Portuguese subtitle file, which I know is ISO-8859-15 (latin1) encoded because most latin scripts use this encoding.
bash$ iconv -f latin1 -t utf8 subtitles_file.srt > subtitles_file_utf8.srt bash$ file subtitles_file_utf8.srt subtitles_file_utf8.srt: UTF-8 Unicode text, with CRLF line terminators
bash$ cat chapters.txt CHAPTER01=00:00:00.000 CHAPTER01NAME=Chapter 1 CHAPTER02=00:04:31.605 CHAPTER02NAME=Chapter 2 CHAPTER03=00:12:52.063 CHAPTER03NAME=Chapter 3 …
MP4Box -ipod \ -itags 'track=The Movie Name:cover=cover.jpg' \ -add 'subtitles_file_utf8.srt:lang=por' \ -chap 'chapters.txt:lang=eng' \ movie.mp4
The MP4Box command is part of GPac.
OpenSubtitles.org has a large collection of subtitles in many languages and you can search its database with the IMDB ID of the movie. And ChapterDB has the same for chapters files.
Since iTunes can tag and beautify your movie files in Windows and Mac, libmp4v2
can do the same on Linux. Here we’ll use it to add the movie cover image we downloaded from IMDB along with some movie metadata for Woody Allen’s 2011 movie Midnight in Paris:
mp4tags -H 1 -i movie -y 2011 -a "Woody Allen" -s "Midnight in Paris" -m "While on a trip to Paris with his..." "Midnight in Paris.m4v" mp4art -k -z --add cover.jpg "Midnight in Paris.m4v"
This way the movie file will look good and in the correct place when transferred to your iPod/iPad/iPhone.
Of course, make sure the right package is installed first:
dnf install libmp4v2
File extensions MOV, MP4, M4V, M4A are the same format from the ISO MPEG-4 standard. They have different names just to give a hint to the user about what they carry.
dnf -y install libdvdcss vobcopy
mount /dev/sr0 /mnt/dvd; cd /target/folder; vobcopy -m /mnt/dvd .
You’ll get a directory tree with decrypted VOB and BUP files. You can generate an ISO file from them or, much more practical, use HandBrake to convert the DVD titles into MP4/M4V (more compatible with wide range of devices) or MKV/WEBM files.
Modern iPhones can record videos at 240 or 120fps so when you’ll watch them at 30fps they’ll look slow-motion. But regular players will play them at 240 or 120fps, hiding the slo-mo effect.
We’ll need to handle audio and video in different ways. The video FPS fix from 240 to 30 is loss less, the audio stretching is lossy.
# make sure you have the right packages installed dnf install mkvtoolnix sox gpac faac
#!/bin/bash # Script by Avi Alkalay # Freely distributable f="$1" ofps=30 noext=${f%.*} ext=${f##*.} # Get original video frame rate ifps=`ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 "$f" < /dev/null | sed -e 's|/1||'` echo # exit if not high frame rate [[ "$ifps" -ne 120 ]] && [[ "$ifps" -ne 240 ]] && exit fpsRate=$((ifps/ofps)) fpsRateInv=`awk "BEGIN {print $ofps/$ifps}"` # loss less video conversion into 30fps through repackaging into MKV mkvmerge -d 0 -A -S -T \ --default-duration 0:${ofps}fps \ "$f" -o "v$noext.mkv" # loss less repack from MKV to MP4 ffmpeg -loglevel quiet -i "v$noext.mkv" -vcodec copy "v$noext.mp4" echo # extract subtitles, if original movie has it ffmpeg -loglevel quiet -i "$f" "s$noext.srt" echo # resync subtitles using similar method with mkvmerge mkvmerge --sync "0:0,${fpsRate}" "s$noext.srt" -o "s$noext.mkv" # get simple synced SRT file rm "s$noext.srt" ffmpeg -i "s$noext.mkv" "s$noext.srt" # remove undesired formating from subtitles sed -i -e 's|<font size="8"><font face="Helvetica">\(.*\)</font></font>|\1|' "s$noext.srt" # extract audio to WAV format ffmpeg -loglevel quiet -i "$f" "$noext.wav" # make audio longer based on ratio of input and output framerates sox "$noext.wav" "a$noext.wav" speed $fpsRateInv # lossy stretched audio conversion back into AAC (M4A) 64kbps (because we know the original audio was mono 64kbps) faac -q 200 -w -s --artist a "a$noext.wav" # repack stretched audio and video into original file while removing the original audio and video tracks cp "$f" "${noext}-slow.${ext}" MP4Box -ipod -rem 1 -rem 2 -rem 3 -add "v$noext.mp4" -add "a$noext.m4a" -add "s$noext.srt" "${noext}-slow.${ext}" # remove temporary files rm -f "$noext.wav" "a$noext.wav" "v$noext.mkv" "v$noext.mp4" "a$noext.m4a" "s$noext.srt" "s$noext.mkv"
If the audio is already AAC-encoded (may also be ALAC-encoded), create an MP4/M4V file:
ffmpeg -loop 1 -framerate 0.2 -i photo.jpg -i song.m4a -shortest -c:v libx264 -tune stillimage -vf scale=960:-1 -c:a copy movie.m4v
The above method will create a very efficient 0.2 frames per second (-framerate 0.2) H.264 video from the photo while simply adding the audio losslessly. Such very-low-frames-per-second video may present sync problems with subtitles on some players. In this case simply remove the -framerate 0.2 parameter to get a regular 25fps video with the cost of a bigger file size.
The -vf scale=960:-1 parameter tells FFMPEG to resize the image to 960px width and calculate the proportional height. Remove it in case you want a video with the same resolution of the photo. A 12 megapixels photo file (around 4032×3024) will get you a near 4K video.
If the audio is MP3, create an MKV file:
ffmpeg -loop 1 -framerate 0.2 -i photo.jpg -i song.mp3 -shortest -c:v libx264 -tune stillimage -vf scale=960:-1 -c:a copy movie.mkv
If audio is not AAC/M4A but you still want an M4V file, convert audio to AAC 192kbps:
ffmpeg -loop 1 -framerate 0.2 -i photo.jpg -i song.mp3 -shortest -c:v libx264 -tune stillimage -vf scale=960:-1 -c:a aac -strict experimental -b:a 192k movie.m4v
See more about FFMPEG photo resizing.
There is also a more efficient and completely lossless way to turn a photo into a video with audio, using extended podcast techniques. But thats much more complicated and requires advanced use of GPAC’s MP4Box and NHML. In case you are curious, see the Podcast::chapterize()
and Podcast::imagify()
methods in my music-podcaster script. The trick is to create an NHML (XML) file referencing the image(s) and add it as a track to the M4A audio file.
mkdir noexif; exiftool -filename -T -if '(not $datetimeoriginal or ($datetimeoriginal eq "0000:00:00 00:00:00"))' *HEIC *JPG *jpg | while read f; do mv "$f" noexif/; done
Warning: use this only if image files have correct creation time on filesystem and if they don’t have an EXIF header.
exiftool -overwrite_original '-DateTimeOriginal< ${FileModifyDate}' *CR2 *JPG *jpg
jhead -autorot -cmd "jpegtran -progressive '&i' > '&o'" -ft *jpg
This process will rename silly, sequential, confusing and meaningless photo file names as they come from your camera into a readable, sorteable and useful format. Example:
IMG_1234.JPG
➡ 2015.07.24-17.21.33 • Max playing with water【iPhone 6s✚】.jpg
Note that new file name has the date and time it was taken, whats in the photo and the camera model that was used.
exiftool -overwrite_original '-OriginalFileName<${filename}' *CR2 *JPG *jpg
exiftool '-filename<${DateTimeOriginal} 【${Model}】%.c.%e' -d %Y.%m.%d-%H.%M.%S *CR2 *HEIC *JPG *jpg
\ls *HEIC *JPG *jpg *heic | while read f; do nf=`echo "$f" | sed -e 's/0.JPG/.jpg/i; s/0.HEIC/.heic/i'`; t=`echo "$f" | sed -e 's/0.JPG/1.jpg/i; s/0.HEIC/1.heic/i'`; [[ ! -f "$t" ]] && mv "$f" "$nf"; done
Alternative for macOS without SED:
\ls *HEIC *JPG *jpg *heic | perl -e ' while (<>) { chop; $nf=$_; $t=$_; $nf=~s/0.JPG/.jpg/i; $nf=~s/0.HEIC/.heic/i; $t=~s/0.JPG/1.jpg/i; $t=~s/0.HEIC/1.heic/i; rename($_,$nf) if (! -e $t); }'
\ls *HEIC *JPG | while read f; do nf=`echo "$f" | sed -e 's/JPG/jpg/; s/HEIC/heic/'`; mv "$f" "$nf"; done
\ls *HEIC *JPG *jpg *heic | while read f; do nf=`echo "$f" | sed -e 's/Canon PowerShot G1 X/Canon G1X/; s/iPhone 6s Plus/iPhone 6s✚/; s/iPhone 7 Plus/iPhone 7✚/; s/Canon PowerShot SD990 IS/Canon SD990 IS/; s/HEIC/heic/; s/JPG/jpg/;'`; mv "$f" "$nf"; done
You’ll get file names as 2015.07.24-17.21.33 【Canon 5D Mark II】.jpg. If you took more then 1 photo in the same second, exiftool will automatically add an index before the extension.
Subject
tag\ls *【*】* | while read f; do s=`exiftool -T -Subject "$f"`; if [[ " $s" != " -" ]]; then nf=`echo "$f" | sed -e "s/ 【/ • $s 【/; s/\:/∶/g;"`; mv "$f" "$nf"; fi; done
exiftool '-filename<${DateTimeOriginal} • ${Subject} 【${Model}】%.c.%e' -d %Y.%m.%d-%H.%M.%S *CR2 *JPG *HEIC *jpg *heic
exiftool -T -Model *jpg | sort -u
Output is the list of camera models on this photos:
Canon EOS REBEL T5i DSC-H100 iPhone 4 iPhone 4S iPhone 5 iPhone 6 iPhone 6s Plus
CRE="John Doe"; exiftool -overwrite_original -creator="$CRE" -by-line="$CRE" -Artist="$CRE" -if '$Model=~/DSC-H100/' *.jpg CRE="Jane Black"; exiftool -overwrite_original -creator="$CRE" -by-line="$CRE" -Artist="$CRE" -if '$Model=~/Canon EOS REBEL T5i/' *.jpg CRE="Mary Doe"; exiftool -overwrite_original -creator="$CRE" -by-line="$CRE" -Artist="$CRE" -if '$Model=~/iPhone 5/' *.jpg CRE="Peter Black"; exiftool -overwrite_original -creator="$CRE" -by-line="$CRE" -Artist="$CRE" -if '$Model=~/iPhone 4S/' *.jpg CRE="Avi Alkalay"; exiftool -overwrite_original -creator="$CRE" -by-line="$CRE" -Artist="$CRE" -if '$Model=~/iPhone 6s Plus/' *.jpg
If you geometrically mark people faces and their names in your photos using tools as Picasa, you can easily search for the photos which contain “Suzan” or “Marcelo” this way:
exiftool -fast -r -T -Directory -FileName -RegionName -if '$RegionName=~/Suzan|Marcelo/' .
-Directory, -FileName and -RegionName specify the things you want to see in the output. You can remove -RegionName for a cleaner output.
The -r is to search recursively. This is pretty powerful.
Your camera will tag your photos only with local time on CreateDate or DateTimeOriginal tags. There is another set of tags called GPSDateStamp and GPSTimeStamp that must contain the UTC time the photos were taken, but your camera won’t help you here. Hopefully you can derive these values if you know the timezone the photos were taken. Here are two examples, one for photos taken in timezone -02:00 (Brazil daylight savings time) and on timezone +09:00 (Japan):
exiftool -overwrite_original '-gpsdatestamp<${CreateDate}-02:00' '-gpstimestamp<${CreateDate}-02:00' '-TimeZone<-02:00' '-TimeZoneCity<São Paulo' *.jpg
exiftool -overwrite_original '-gpsdatestamp<${CreateDate}+09:00' '-gpstimestamp<${CreateDate}+09:00' '-TimeZone<+09:00' '-TimeZoneCity<Tokio' Japan_Photos_folder
Use exiftool to check results on a modified photo:
exiftool -s -G -time:all -gps:all 2013.10.12-23.45.36-139.jpg [EXIF] CreateDate : 2013:10:12 23:45:36 [Composite] GPSDateTime : 2013:10:13 01:45:36Z [EXIF] GPSDateStamp : 2013:10:13 [EXIF] GPSTimeStamp : 01:45:36
This shows that the local time when the photo was taken was 2013:10:12 23:45:36. To use exiftool to set timezone to -02:00 actually means to find the correct UTC time, which can be seen on GPSDateTime as 2013:10:13 01:45:36Z. The difference between these two tags gives us the timezone. So we can read photo time as 2013:10:12 23:45:36-02:00.
Moves is an amazing app for your smartphone that simply records for yourself (not social and not shared) everywhere you go and all places visited, 24h a day.
exiftool -overwrite_original -api GeoMaxExtSecs=86400 -geotag ../moves_export/gpx/yearly/storyline/storyline_2015.gpx '-geotime<${CreateDate}-08:00' Folder_with_photos_from_trip_to_Las_Vegas
Some important notes:
montage -mode concatenate -tile 1x8 *jpg COMPOSED.JPG
montage -mode concatenate -tile 8x1 *jpg COMPOSED.JPG
montage -mode concatenate -tile 4x2 *jpg COMPOSED.JPG
The montage command is part of the ImageMagick package.
This document explains working examples on how to use Bluemix platform advanced features such as:
cf
command line interface, including DockerFor this, I’ll use the following source code structure:
github.com/avibrazil/bluemix-docker-kickstart
The source code currently brings to life (as an example), integrated with some Bluemix services and Docker infrastructure, a PHP application (the WordPress popular blogging platform), but it could be any Python, Java, Ruby etc app.
I feel it is important to position what Bluemix really is and which of its parts we are going to use. Bluemix is composed of 3 different things:
cf
command from your laptop. IBM has extended this part of Bluemix with functions not currently available on CloudFoundry, notably the capability of executing regular VMs and Docker containers.This tutorial will dive into #1 and some parts of #3, while using some services from #2.
When fully provisioned, the entire architecture will look like this. Several Bluemix services (MySQL, Object store) packaged into a CloudFoundry App (bridge app) that serves some Docker containers that in turns do the real work. Credentials to access those services will be automatically provided to the containers as environment variables (VCAP_SERVICES
).
The example source code repo contains boilerplate code that is intentionally generic and clean so you can easily fork, add and modify it to fit your needs. Here is what it contains:
bridge-app
folder and manifest.yml
filemanifest.yml
that defines app name, dependencies and other characteristics to deploy the app contents under bridge-app
.containers
phpinfo
and wordpress
directories, but there are some other useful examples you can use..bluemix
folderadmin
folderThe easiest way to deploy the app is through DevOps Services:
Conceptually, these are the things you need to do to fully deploy an app with Docker on Bluemix:
The idea is to encapsulate all these steps in code so deployments can be done entirely unattended. Its what I call brainless 1-click deployment. There are 2 ways to do that:
admin/deploy
script in our code..bluemix/pipeline.yml
file.From here, we will detail each of these steps both as commands (on the script) and as stages of the pipeline.
I used the cf marketplace
command to find the service names and plans available. ClearDB provides MySQL as a service. And just as an example, I’ll provision an additional Object Storage service. Note the similarities between both methods.
cf create-service \ cleardb \ spark \ bridge-app-database; cf create-service \ Object-Storage \ Free \ bridge-app-object-store;
When you deploy your app to Bluemix, DevOps Services will read your manifest.yml
and automatically provision whatever is under the declared-services block. In our case:
declared-services: bridge-app-database: label: cleardb plan: spark bridge-app-object-store: label: Object-Storage plan: Free
The manifest.yml
file has all the details about our CF app. Name, size, CF build pack to use, dependencies (as the ones instantiated in previous stage). So a plain cf push
will use it and do the job. Since this app is just a bridge between our containers and the services, we’ll use minimum resources and the minimum noop-buildpack
. After this stage you’ll be able to see the app running on your Bluemix console.
The heavy lifting here is done by the Dockerfile
s. We’ll use base CentOS images with official packages only in an attempt to use best practices. See phpinfo and wordpress Dockerfiles to understand how I improved a basic OS to become what I need.
The cf ic
command is basically a clone of the well known docker
command, but pre-configured to use Bluemix Docker infrastructure. There is simple documentation to install the IBM Containers plugin to cf
.
cf ic build \ -t phpinfo_image \ containers/phpinfo/; cf ic build \ -t wordpress_image \ containers/wordpress/;
Stages handling this are “➋ Build phpinfo Container” and “➍ Build wordpress Container”.
Open these stages and note how image names are set.
After this stage, you can query your Bluemix private Docker Registry and see the images there. Like this:
$ cf ic images REPOSITORY TAG IMAGE ID CREATED SIZE registry.ng.bluemix.net/avibrazil/phpinfo_image latest 69d78b3ce0df 3 days ago 104.2 MB registry.ng.bluemix.net/avibrazil/wordpress_image latest a801735fae08 3 days ago 117.2 MB
A Docker image is not yet a container. A Docker container is an image that is being executed.
To make our tutorial richer, we’ll run 2 sets of containers:
cf ic run \ -P \ --env 'CCS_BIND_APP=bridge-app-name' \ --name phpinfo_instance \ registry.ng.bluemix.net/avibrazil/phpinfo_image; IP=`cf ic ip request | grep "IP address" | sed -e "s/.* \"\(.*\)\" .*/\1/"`; cf ic ip bind $IP phpinfo_instance;
Equivalent stage is “➌ Deploy phpinfo Container”.
Open this stage and note how some environment variables are defined, specially the BIND_TO
.
Bluemix DevOps Services default scripts use these environment variables to correctly deploy the containers.
The CCS_BIND_APP
on the script and BIND_TO
on the pipeline are key here. Their mission is to make the bridge-app’s VCAP_SERVICES
available to this container as environment variables.
In CloudFoundry, VCAP_SERVICES
is an environment variable containing a JSON document with all credentials needed to actually access the app’s provisioned APIs, middleware and services, such as host names, users and passwords. See an example below.
cf ic group create \ -P \ --env 'CCS_BIND_APP=bridge-app-name' \ --auto \ --desired 2 \ --name wordpress_group_instance \ registry.ng.bluemix.net/avibrazil/wordpress_image cf ic route map \ --hostname some-name-wordpress \ --domain $DOMAIN \ wordpress_group_instance
The cf ic group create
creates a container group and runs them at once.
The cf ic route map
command configures Bluemix load balancer to capture traffic to http://some-name-wordpress
.mybluemix.net and route it to the wordpress_group_instance
container group.
Equivalent stage is “➎ Deploy wordpress Container Group”.
Look in this stage’s Environment Properties how I’m configuring container group.
I had to manually modify the standard deployment script, disabling deploycontainer and enabling deploygroup.
At this point, WordPress (the app that we deployed) is up and running inside a Docker container, and already using the ClearDB MySQL database provided by Bluemix. Access the URL of your wordpress container group and you will see this:
Bluemix dashboard also shows the components running:
But the most interesting evidence you can see accessing the phpinfo container URL or IP. Scroll to the environment variables section to see all services credentials available as environment variables from VCAP_SERVICES:
I use these credentials to configure WordPress while building the Dockerfile, so it can find its database when executing:
. . . RUN yum -y install epel-release;\ yum -y install wordpress patch;\ yum clean all;\ sed -i '\ s/.localhost./getenv("VCAP_SERVICES_CLEARDB_0_CREDENTIALS_HOSTNAME")/ ; \ s/.database_name_here./getenv("VCAP_SERVICES_CLEARDB_0_CREDENTIALS_NAME")/ ; \ s/.username_here./getenv("VCAP_SERVICES_CLEARDB_0_CREDENTIALS_USERNAME")/ ; \ s/.password_here./getenv("VCAP_SERVICES_CLEARDB_0_CREDENTIALS_PASSWORD")/ ; \ ' /etc/wordpress/wp-config.php;\ cd /etc/httpd/conf.d; patch < /tmp/wordpress.conf.patch;\ rm /tmp/wordpress.conf.patch . . .
So I’m using sed
, the text-editor-as-a-command, to edit WordPress configuration file (/etc/wordpress/wp-config.php
) and change some patterns there into appropriate getenv() calls to grab credentials provided by VCAP_SERVICES
.
The containers folder in the source code presents one folder per image, each is an example of different Dockerfiles. We use only the wordpress and phpinfo ones here. But I’d like to highlight some best practices.
A Dockerfile is a script that defines how a container image should be built. A container image is very similar to a VM image, the difference is more related to the file formats that they are stored. VMs uses QCOW, VMDK etc while Docker uses layered filesystem images. From the application installation perspective, all the rest is almost the same. But only only Docker and its Dockerfile provides a super easy way to describe how to prepare an image focusing mostly only on your application. The only way to automate this process on the old Virtual Machine universe is through techniques such as Red Hat’s kickstart. This automated OS installation aspect of Dockerfiles might seem obscure or unimportant but is actually the core of what makes viable a modern DevOps culture.
patch
command in your Dockerfile, as I did on wordpress Dockerfile.diff -Naur configfile.txt.org configfile.txt > configfile.patch
Then see the wordpress Dockerfile to understand how to apply it.
.zip
or .tar.gz
) from the Internet. In the wordpress Dockerfile I enabled the official EPEL repository so I can install WordPress with YUM. Same happens on the Django and NGINX Dockerfiles. Also note how I don’t have to worry about installing PHP and MySQL client libraries – they get installed automatically when YUM installs wordpress package, because PHP and MySQL are dependencies.CloudFoundry (the execution environment behind Bluemix) has its own Open Source container technology called Warden. And CloudFoundry’s Dockerfile-equivalent is called Buildpack. Just to illustrate, here is a WordPress buildpack for CloudFoundry and Bluemix.
To chose to go with Docker in some parts of your application means to give up some native integrations and facilities naturally and automatically provided by Bluemix. With Docker you’ll have to control and manage some more things for yourself. So go with Docker, instead of a buildpack, if:
The best balance is to use Bluemix services/APIs/middleware and native buildpacks/runtimes whenever possible, and go with Docker on specific situations. Leveraging the integration that Docker on Bluemix provides.
O mercado de trabalho tende a dar menos valor a conhecimento acumulado (técnico ou em forma de aptidão) e mais valor à capacidade de assumir responsabilidades e entregar. O ideal é ter um bom equilibro entre esses 2 pilares: conhecimento e responsabilidade.
A contratação é geralmente feita com base na experiência, conhecimento demonstrados, mas a escalada na carreira dentro de uma mesma empresa depende mais do 2º pilar, o da responsabilidade.
Ambiente perfeito de trabalho é aquele onde o profissional usa bem seu conhecimento em projetos que lhe promovem envolvimento, talvez até emocional, onde a responsabilidade sobre eles acontece de forma natural.
Hoje de manhã botei prá ricochetear os filhos mais lindos do mundo junto com a companheira mais linda do mundo, ouvindo a música mais linda do mundo (concerto de piano №2 de Rachmaninoff) enquanto traçávamos a fruta mais gostosa do mundo (uma manga tinindo de madura). Uma manhã gloriosa.
I’ve searched for a long time and finally found a US regular bank that will let me open a free checking account. It is BBVA Compass bank.
All these services are free: ATM withdraw and deposit (BBVA’s and AllPoint ATMs), full featured Internet banking, full featured mobile banking, Visa debit card, Apple Pay and more. The non-free services are listed here and exact rates depend on the US state where the account was opened.
To open a checking account, you must personally visit a physical branch in US and spend 40 minutes on an interview. You will leave the branch with an open account and routing numbers containing a $26 balance plus valid user and password that can be used on BBVA’s app and Internet banking. Free Visa debit card will arrive to some US address in a week or two, so no ATM until then.
They have 2 free checking account types. You should chose the one that includes free or charge AllPoint ATM usage which are very popular throughout US, and can be found in almost every 7 Eleven store. Use the AllPoint app to find one near you. Read More
WordPress is packaged for Fedora and can be installed as a regular RPM (with DNF/YUM). The benefits of this method are that you don’t need to mess around with configuration files, filesystem permissions and since everything is pre-packaged to work together, additional configurations are minimal. At the end of this 3 minutes tutorial, you’ll get a running WordPress under an SSL-enabled Apache using MariaDB as its backend.
All commands need to be executed as root. Read More