Organize seu dia com Any.do, um excelente app de TODO List.

Você é como eu que vive esquecendo as coisas que tem a fazer? Ou precisa lembrar diariamente de tomar seu remédio? Existem muitas apps para Android que podem te ajudar a lembrar você na suas tarefas diárias, semanais ou mensais. Porém a melhor de todas que já testei até hoje é a Any.do.

anydo

Disponível no Google Play (na App Store da Apple também), possui integração com Google Chrome através de extensão que permite adicionar e executar tarefas que são sincronizadas nos seus gadgets que possuem o any.do instalado.

Diferente dos outros apps de TODO list que usei, o any.do avisa no horário que você definiu com um sinal sonoro. Há também uma função que em determinada hora do dia (que você configura) ele pede que você “tire um tempo” para organizar suas tarefas do dia.

Baixar pelo Google Play

Pluralização em PT-BR – Rails

Ao criar-se um model/controller/view no Rails é comum o framework efetuar a pluralização do nome escolhido. Porém como a pluralização padrão segue as regras da língua inglesa, algumas palavras podem sairem erradas.

Para contornar o problema basta adicionar as regras do nosso idioma no arquivo inflections.rb presente nas pasta config/initializers.
Abaixo segue um modelo de inflections que encontrei na web

# Be sure to restart your server when you modify this file.

# Add new inflection rules using the following format
# (all these examples are active by default):
# ActiveSupport::Inflector.inflections do |inflect|
#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
#   inflect.irregular 'person', 'people'
#   inflect.uncountable %w( fish sheep )
# end
#
# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections do |inflect|
#   inflect.acronym 'RESTful'
# end
ActiveSupport::Inflector.inflections do |inflect|
inflect.clear

#general rule: add "s" to the end of the word
#casa - casas
inflect.plural /^([a-zA-z]*)a$/i, '\1as'
#pe - pes
inflect.plural /^([a-zA-z]*)e$/i, '\1es'
#no example
inflect.plural /^([a-zA-z]*)i$/i, '\1is'
#carro - carros
inflect.plural /^([a-zA-z]*)o$/i, '\1os'
#pneu - pneus
inflect.plural /^([a-zA-z]*)u$/i, '\1us'

#if word ends in "r" or "z", add "es"
#luz - luzes
#flor - flores
#arroz - arrozes
inflect.plural /^([a-zA-z]*)r$/i, '\1res'
inflect.plural /^([a-zA-z]*)z$/i, '\1zes'

#if word ends in "al", "el", "ol", "ul": trade "l" with "is"
#farol - farois
#hospital - hospitais
#telemovel - telemoveis
#pincel - pinceis
#anzol - anzois
inflect.plural /^([a-zA-z]*)al$/i, '\1ais'
inflect.plural /^([a-zA-z]*)el$/i, '\1eis'
inflect.plural /^([a-zA-z]*)ol$/i, '\1ois'
inflect.plural /^([a-zA-z]*)ul$/i, '\1uis'

#if word ends in "il" and has tónic accent in last syllable, trade "il" with "is"
#cantil - cantis
inflect.plural /^([a-zA-z]*)il$/i, '\1is'

#TODO
#if word ends in "il" and has tónic accent in penultimate syllable, trade "il" with "eis"
#no example

#if word ends in "m", trade "m" with "ns"
#armazem - armazens
#portagem - portagens
inflect.plural /^([a-zA-z]*)m$/i, '\1ns'

#TODO
#if word ends in "s" and has one silable, trade "s" with "es"
#no example
#inflect.plural /^([a-zA-z]*)e$/i, '\1es'

#TODO
#if word ends in "x" stays the same
#no example... professor X, maybe?
#inflect.plural /^([a-zA-z]*)x$/i, '\1x'

#if word ends in "ão", there are three ways of plural: ãos, ães, ões
#NOTE: hard to detect, so I'll use the most common case
#and then use irregular cases for the others. if someone knows of
#more cases please add to the list & mail me. thanks!
#
#cão - cães
#colchão - colchões
#portão - portões
#pão - pães
#alemão - alemães
#chão - ?
#pilhão - pilhões
#canhão - canhões
#bidão - bidões
#mão - mãos
inflect.plural /^([a-zA-z]*)ao$/i, '\1oes'
inflect.irregular 'cao', 'caes'
inflect.irregular 'pao', 'paes'
inflect.irregular 'mao', 'maos'
inflect.irregular 'alemao', 'alemaes'
inflect.irregular 'perfil_permissao', 'perfil_permissoes'

############################
#singularize rules #
############################

#pes - pe
#carros - carro
#pneus - pneu
inflect.singular /^([a-zA-z]*)as$/i, '\1a'
inflect.singular /^([a-zA-z]*)es$/i, '\1e'
inflect.singular /^([a-zA-z]*)is$/i, '\1i'
inflect.singular /^([a-zA-z]*)os$/i, '\1o'
inflect.singular /^([a-zA-z]*)us$/i, '\1u'

#luzes - luz
#flores - flor
#arrozes - arroz
inflect.singular /^([a-zA-z]*)res$/i, '\1r'
inflect.singular /^([a-zA-z]*)zes$/i, '\1z'

#cantis - cantil
inflect.singular /^([a-zA-z]*)is$/i, '\1il'

#farois - farol
#hospitais - hospital
#telemoveis - telemovel
#pinceis - pincel
#anzois - anzol
inflect.singular /^([a-zA-z]*)ais$/i, '\1al'
inflect.singular /^([a-zA-z]*)eis$/i, '\1el'
inflect.singular /^([a-zA-z]*)ois$/i, '\1ol'
inflect.singular /^([a-zA-z]*)uis$/i, '\1ul'

#armazens - armazem
#portagens - portagem
inflect.singular /^([a-zA-z]*)ns$/i, '\1m'

#cães - cão
#colchões - colchão
#portões - portão
#pães - pão
#alemães - alemão
inflect.singular /^([a-zA-z]*)oes$/i, '\1ao'
inflect.singular /^([a-zA-z]*)aes$/i, '\1ao'
inflect.singular /^([a-zA-z]*)aos$/i, '\1ao'

# inflect.plural /^(ox)$/i, '\1en'
# inflect.singular /^(ox)en/i, '\1'
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
end

Espero que lhe seja útil 😀

Abraço e até a próxima.

Aumentado o volume dos seus mp3 com Easy MP3 Gain

Com certeza você já deve ter feito o download de algum mp3 que toca legal no computador mas quando toca no celular/mp3 player/ipod/whatever fica quase inaudível?

Pois bem, para contornar este problema, temos o easy mp3 Gain, que é um frontend do mp3gain – software que é usado para aumentar ou diminuir o volume de seus arquivos mp3.
Continuar lendo

Criando threads com Delphi

Fala galera! Irei iniciar 2014 com um post sobre threads. Mas o que são threads?

Segundo a Wikipedia, threads são “uma forma de um processo dividir a si mesmo em duas ou mais tarefas que podem ser executadas concorrentemente”. Legal, mas no que uma thread pode me ajudar?

Usos

Threads geralmente são utilizadas para executar uma tarefa que possa demandar muito tempo, podemos utilizar como exemplo o backup de uma base de dados.

A vantagem de se utilizar uma thread é que ela executa enquanto você pode utilizar outras funções da sua aplicação, diferente das vias normais onde você teria de esperar o seu programa executar toda a ação.
Continuar lendo

Informações do tempo com o Open Weather [Exemplo em Python]

Há algum tempo atrás, postei aqui no blog um artigo de como usar a Google Weather API, só que infelizmente esse projeto foi descontinuado. Na busca de uma nova forma de obter essas informações facilmente acabei encontrando o Open Weather.

Open Weather

O Open Weather é um projeto que visa disponibilizar informações do clima de praticamente todas as cidades do planeta, com ele é possível obter informações da temperatura atual, nebulosidade, umidade relativa do ar e até mesmo a hora do nascer e pôr do sol!

Utilizando na minha aplicação

Você pode obter as informações de duas formas: JSON e XML. Para obter os dados basta você efetuar uma requisição conforme abaixo:

Retornando em JSON:

http://api.openweathermap.org/data/2.5/weather?q=Itajai,BR

Retornando em XML:

http://api.openweathermap.org/data/2.5/weather?q=Itajai,BR&mode=xml

Os exemplos acima são por nome e país, mas existem também a possibilidade de se fazer a requisição utilizando a latitude e longitude:

http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139

O Open Weather também possui suporte multi-línguas, para retornar os dados em português basta adicionar na URL a query string &lang=pt

http://api.openweathermap.org/data/2.5/forecast/daily?id=524901&lang=pt

Por padrão, o Open Weather retorna as informações de temperatura em Kelvin, para obter em Celsius basta adicionar na URL a query string units:

http://api.openweathermap.org/data/2.5/forecast/daily?id=524901&units=metric&

Exemplo em Python

Para exemplificar melhor o uso do Open Weather, aqui vai um pequeno script em Python onde leio os dados no formato JSON.


import urllib2 #para efetuar a requisicao
import json #para ler o JSON

data = urllib2.urlopen('http://api.openweathermap.org/data/2.5/weather?q=Itajai,BR&units=metric&lang=pt')
html = data.read()
weather = json.loads(html)
temperatura = str(weather['main']['temp']) + ' graus'
nebulosidade = str(weather['clouds']['all']) + ' %'
umidade = str(weather['main']['humidity']) + ' %'
print "Em Itajai %s. Nebulosidade: %s. Umidade relativa do ar: %s." % (temperatura, nebulosidade, umidade)

Por hoje é só!
Abraço

Autenticação SSL no Delphi – acessando o GMail.

Certamente algum cliente já deva ter lhe solicitado para adicionar uma “opçãozinha” de enviar e-mail na sua aplicação.
Mas e quando eu preciso fazer isso através do Gmail ou outro servidor que requer autenticação SSL? Neste artigo veremos como!

Delphi e SSL

Quem utiliza a função de envio de e-mails (e até de recebimento) pela paleta de componentes Indy, dispõe do componente TIdSSLIOHandlerSocket que faz a autenticação SSL com o servidor.

Basta adicionar no formulário e vincular ao IdSMTP ou IdPOP3. O vínculo é feito através da propriedade IOHandler.

acesso_gmail_delphi

acesso_gmail_delphi_obj

 

Importante!

Dependendo da versão do Indy que você está usando, é necessário que seja distribuída junto com a aplicação as DLL’s libeay32.dll e ssleay32.dll (as DLL’s para o Delphi 7 podem ser baixadas aqui: http://indy.fulgan.com/SSL/Archive/indy_openssl096.zip).

Simples, não?
Abraço e até a próxima!

Rabbit CVS – O Tortoise SVN para Linux

Quem desenvolve no Windows e (ainda) usa o SVN geralmente utiliza o Tortoise SVN, uma excelente ferramenta que agiliza nas tarefas de checkout, update, commit etc. Pois bem, quero usar no Linux mas não tem disponível. E agora? Eis o Rabbit CVS.

Rabbit CVS

Como falei anteriormente, o Rabbit CVS é um software com as mesmas funcionalidades do Tortoise SVN, o seu grande diferencial é que também dá suporte ao Git e Mercurial.

O Rabbit CVS possui integração com os gerenciadores de arquivos Nautilus 3 e Thunar. Também há integração com GEdit que pode ser facilmente instalada via repositório.

Além do Ubuntu, o Rabbit CVS também está disponível em pacotes nativos para outras distros como Fedora, Arch, Open Suse e outras. Além de contar também com a opção de instalar a partir do fonte.

Utilizando o Rabbit CVS com o SVN

Utilizando o Rabbit CVS com o SVN

Instalação

Para instalar o Rabbit CVS no Ubuntu (e derivados) é bem simples, você pode utilizar a PPA oficial do projeto:


sudo add-apt-repository ppa:rabbitvcs/ppa
sudo apt-get update && sudo apt-get update && sudo apt-get install rabbitvcs-nautilus3 rabbitvcs-gedit rabbitvcs-cli

Após a instalação talvez seja necessário reiniciar a sessão para que as alterações tenham efeito.

Rabbit CVS com Git.

Rabbit CVS com Git.

Página oficial: http://rabbitvcs.org/

Por hoje é só.
Abraço.