Programando na Madrugada
Script para dar commit/deploy automático no Heroku
Para realizar commit e deploy automático no Heroku, utilizo o seguinte script: git add . git commit -m "Automatic Commit" git push heroku master
31 de julho de 2011
Recuperando uma partição com problemas no OSX
Ontem, durante uma falha de energia, meu osx não estava conseguindo mais montar a partição de boot. A mensagem que eu estava recebendo era a seguinte: failed to open/create the journal journal is not empty cannot mount root, errno = 19 Após uma série de tentativas frustradas de recuperação, consegui recuperá-la desabilitando o journal. Após bootar pelo cd do osx, vá para o terminal e entre com os seguintes comandos:
27 de maio de 2011
Labs Facebook
Estou estudando a API do Facebook, que é muito boa por sinal. É possível desenvolver várias aplicações utilizando somente Javascript. Estou aproveitando esse estudo para desenvolver algumas aplicações simples para o Facebook: Recitador “â?? Recite frases de sabedoria para o seus amigos! Cutucador “â?? Cutuque os seus amigos
12 de maio de 2011
Levantando um http server simples no OSX, de forma nativa
Estava precisando levantar um simples servidor http de páginas estáticas no osx. Após uma busca no google, descobri uma forma muito simples de fazer isso, utilizando pyhton, que ja vem embutido no osx. É só executar o seguinte comando do diretório a ser servido: Hadron:HTML lpicanco$ python -m SimpleHTTPServer 8082 Um simples servidor HTTP será iniciado para o diretório local. 8082 é o número da porta.
10 de março de 2011
Usando o iPad ou o iPhone como segundo monitor no mac
Com uma tela daquele tamanho, seria desperdício não poder utilizar o iPad, ou até mesmo o iPhone como um segundo ou terceiro monitor, não ? Air Display O Air Display da Avatron resolve isso utilizando a rede wi-fi para compartilhar o display do iPad e do iPhone. A experiência é muito boa, tirando um pouco a lentidão na renderização da tela do iPad, devido a baixa velocidade da rede wifi.
16 de janeiro de 2011
Talk is cheap. Show me the code!
Essa é a camisa! Task is cheap. Show me the code
5 de janeiro de 2011
Removendo a acentuação e os caracteres especiais de uma String
Estava precisando remover a acentuação e os caracteres especiais do nome de um arquivo. Para isso, desenvolvi um extension method para a classe String. Exemplo: String de entrada: Adobe Acrobat - Pacy-Paraná_05.12_áèïôúã+.pdf String de retorno: AdobeAcrobatPacyParana_05.12_aeioua.pdf Desenvolvi o método utilizando uma HashTable e expressão regular. Caso você tenha alguma sugestão de melhoria, poste aí nos comentários. Extension method: public static String RemoveSpecialCharacters(this String self) { var normalizedString = self; // Prepara a tabela de símbolos. var symbolTable = new Dictionary<char, char[]>(); symbolTable.Add('a', new char[] {' ', 'á', 'ä', 'â', 'ã'}); symbolTable.Add('c', new char[] { 'ç' }); symbolTable.Add('e', new char[] { 'è', 'é', 'ë', 'ê' }); symbolTable.Add('i', new char[] { 'ì', 'í', 'ï', 'î' }); symbolTable.Add('o', new char[] { 'ò', 'ó', 'ö', 'ô', 'õ' }); symbolTable.Add('u', new char[] { 'ù', 'ú', 'ü', 'û' }); // Substitui os símbolos. foreach (var key in symbolTable.Keys) { foreach (var symbol in symbolTable[key]) { normalizedString = normalizedString.Replace(symbol, key); } } // Remove os outros caracteres especiais. normalizedString = Regex.Replace(normalizedString, "[^0-9a-zA-Z._]+?", ""); return normalizedString; }
28 de maio de 2010
Criando um relógio analógico com Processing JS
Excelente tutorial do Thej, do blog Thejesh GN, sobre processingjs. Nesse tutorial, ele ensina como criar um relógio analógico usando processing. Getting started with Processingjs by writing Analog clock
26 de maio de 2010
Processing Labs: Game Of Life
Comecei a estudar processing. Processing é uma linguagem de programação para trabalhar com visualização de dados. Processing.js é um porte da linguagem para Javascript. Como primeiro experimento, o famoso Game of Life: int sx, sy; float density = 0.5; int[][][] world; void setup() { size(100, 100); frameRate(15); sx = width; sy = height; world = new int[sx][sy][2]; stroke(255); // Set random cells to 'on' for (int i = 0; i < sx * sy * density; i++) { world[(int) random(sx)][(int) random(sy)][1] = 1; } } void draw() { background(0); // Drawing and update cycle for (int x = 0; x < sx; x = x + 1) { for (int y = 0; y < sy; y = y + 1) { if ((world[x][y][1] == 1) || (world[x][y][1] == 0 && world[x][y][0] == 1)) { world[x][y][0] = 1; point(x, y); } if (world[x][y][1] == -1) { world[x][y][0] = 0; } world[x][y][1] = 0; } } // Birth and death cycle for (int x = 0; x < sx; x = x + 1) { for (int y = 0; y < sy; y = y + 1) { int count = neighbors(x, y); if (count == 3 && world[x][y][0] == 0) { world[x][y][1] = 1; } if ((count < 2 || count > 3) && world[x][y][0] == 1) { world[x][y][1] = -1; } } } } // Count the number of adjacent cells 'on' int neighbors(int x, int y) { return world[(x + 1) % sx][y][0] + world[x][(y + 1) % sy][0] + world[(x + sx - 1) % sx][y][0] + world[x][(y + sy - 1) % sy][0] + world[(x + 1) % sx][(y + 1) % sy][0] + world[(x + sx - 1) % sx][(y + 1) % sy][0] + world[(x + sx - 1) % sx][(y + sy - 1) % sy][0] + world[(x + 1) % sx][(y + sy - 1) % sy][0]; }
25 de maio de 2010