Meu sistema de organização pessoal

on March 26, 2015 15:30

Ouvindo o Geekout Podcast #11, sobre caderninhos, resolvi contar sobre o meu sistema de organização pessoal, que envolve tanto papel e caneta como software.

Eu já escrevi sobre como organizar textos para leitura. Nesse post, eu falo sobre o Evernote, que também é um ótimo repositório para anotações. Pensando nisso, e na facilidade de anotar coisas no papel, comprei um Evernote Smart Notebook, da Moleskine, que vem estilizado com o logo e as cores do Evernote, e ainda vem com uns adesivos que o próprio software reconhece e atribui tags automaticamente. A compra desse Moleskine também inclui 3 meses de Evernote Premium.

Evernote Smart Nokebook, by Moleskine, e Sakura Pigma Micron

Nesse Moleskine eu faço anotações com uma caneta Sakura Pigma Micron 0.3, que acho ótima para este tipo de caderno, usando um sistema chamado Bullet Journal na sua versão 2 (não tem no site, só pra quem contribuiu no Kickstarter). Ele é um sistema que organiza as coisas principais do dia-a-dia: tarefas, eventos e ideias. Confira lá no site.

Só que nem sempre eu confiro o caderno para ver as minhas tarefas, ou algumas tarefas estão tão no futuro que não faz sentido colocar no Bullet Journal (principalmente as recorrentes). Para isso eu uso o Reminders, da Apple mesmo. Já tentei vários outros softwares, como Wunderlist, Things, Omnifocus, Remember the Milk, mas este é o mais simples e mais eficaz. Ele existe no OS X e no iOS, tudo sincronizado pelo iCloud. Eu sempre coloco um alerta (due date) para eles sempre aparecerem para mim, mesmo quando passa a data. Por exemplo, eu coloco uma tarefa para revisar o Bullet Journal diariamente no fim do dia.

Os eventos, além do Bullet Journal, vão para o meu Google Calendar, que eu vejo no Sunrise Calendar, e insiro os eventos pelo Fantastical.

Quanto às anotações, as mais importantes vão para o Evernote usando o Scannable. Ele tem reconhecimento de escrita, então tudo fica buscável.

Finalmente, para organização das finanças pessoais, uso o YNAB (You Need A Budget). Ele, além de ser um software, é um sistema/filosofia de educação financeira. O bom é que todas as despesas estão registradas, então dá pra saber quando foi que eu comprei determinada coisa (como ração para os gatos), e ainda pode servir como livro-caixa para uma microempresa, por exemplo.

Este é o meu atual (e em constante mudança) sistema de organização pessoal. Conte sobre o seu nos comentários.

Comments

Dash, o RTFM do programador

on January 30, 2015 16:30

A dica de hoje é o Dash, um visualizador de documentações de APIs. Eu acho uma ferramenta indispensável, que centraliza todas as documentações que eu preciso em um lugar só, e offline.

Ele tem suporte para mais de 150 documentações, fora o que está no Rubygems.org e Stack Overflow, por exemplo. Basta escolher a documentação para baixar, e ela será atualizada sempre que você estiver online.

Minhas documentações

Você pode buscar em todas as documentações ou em uma específica. Se ele não encontrar o termo em nenhum lugar, faz o fallback pro Google e Stack Overflow (podia ter pra DuckDuckGo, mas não achei como fazer isso).

Além disso ele é um snippet manager, onde você pode armazenar snippets de código e reutilizá-los onde quiser.

Ele tem integrações muito interessantes como a do Alfred ('dash <termo>') e do Sublime Text (Ctrl-H na palavra te leva para a documentação dela), dentre outras.

Ele é somente para Mac, com uma versão para iOS também. Custa normalmente $19.99, mas vale cada centavo.

Comments

My Sublime Text Config

on December 05, 2014 17:00

Read this article listening to: 'Sublime - Santeria' (I had to put up 4 years with my former boss singing that) =P

DISCLAIMER 1: I won't get into the battle 'What is the ideal IDE/text editor?'. I use Sublime Text, I'm happy with it, so get over it.

DISCLAIMER 2: These tips apply to Sublime Text only. Some of them apply only to OS X. I'm sure you can find a way on other systems.

Sublime Text is my favorite text editor and the one I use everyday. It is a great piece of software, I make money from it, and it is just fair that the developer gets something in return. Register it!

Sublime can be highly customizable, and it takes some time to perfect it to one's needs. I've been using it for a few years, so I'm sharing my configuration so everyone can benefit from it.

First things first: I really, really, REALLY hate that logo. It's orange on gray, it is 3D, anyway, I don't like it at all. So I replaced it for a more comforting one.

My Sublime Text Logo

How to replace the logo

Get a nice logo from the internetz (this is a great one) and download the .icns file. Then, open up the Applications folder in Finder, right-click 'Sublime Text' and select 'Show Package Contents'; open 'Contents -> Resources' and replace your Sublime Text.ics file there.

Shell symlink

$ sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /bin/subl

for OS X. Adjust the path if you're using GNU/Linux.

Then you can use it to open your current directory:

$ subl .

Package Control

If you don't use it, go ahead and install it! Inside Sublime Text, type

ctrl-`

and paste the following code (don't worry, it's safe).

import urllib.request,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)

Packages

Use super + shift + P and type 'Install package' to bring the package list.

General usage

  • Advanced New File: creates new files with a better interface
  • DashDoc: searches documentation in Dash
  • Emmet: creates HTML elements
  • GitGutter: marks changes in files
  • Prefixr: adds prefixes for browsers in CSS files
  • Markdown Preview
  • SidebarEnhancements: adds a lot of options when you right-click the sidebar
  • TrailingSpaces: shows trailing spaces in bright red

Language/syntax specific

  • AngularJS
  • HTML5
  • Puppet
  • RSpec
  • SCSS
  • SublimeERB: adds a shortcut for <%= %> (see below)
  • Vagrant

Code linter

Sublime Linter package with the following linters:

  • annotations
  • csslint
  • jshint
  • json
  • ruby

Note: you may run into some problems due to linter executable location. You might have to change your PATH environment variable a bit.

Preferences

This is my user preferences file. You can take this as a start for yours. I'm using Cobalt 2 theme, so you should change it to yours.

{
  "auto_complete_commit_on_tab": true,
  "bold_folder_labels": true,
  "color_scheme": "Packages/User/Color Highlighter/themes/cobalt2 (SL).tmTheme",
  "draw_white_space": "all",
  "file_exclude_patterns":
  [
    ".DS_Store",
    ".tags*",
    "*.pyc",
    "*.pyo",
    "*.exe",
    "*.dll",
    "*.obj",
    "*.o",
    "*.a",
    "*.lib",
    "*.log",
    "*.so",
    "*.dylib",
    "*.ncb",
    "*.sdf",
    "*.suo",
    "*.pdb",
    "*.idb",
    "*.class",
    "*.psd",
    "*.db",
    "*.pdf"
  ],
  "folder_exclude_patterns":
  [
    "data",
    ".git",
    ".svn",
    ".hg",
    "CVS",
    ".sass-cache",
    ".bundle",
    "bundle",
    ".rbx",
    "tmp",
    ".tmp",
    "htdocs"
  ],
  "font_face": "Monaco",
  "font_size": 18.0,
  "highlight_line": true,
  "highlight_modified_tabs": true,
  "ignored_packages":
  [
    "AdvancedNewFile",
    "Gutter Color",
    "Vintage"
  ],
  "tab_size": 2,
  "theme": "Cobalt2.sublime-theme",
  "translate_tabs_to_spaces": true,
  "trim_trailing_white_space_on_save": true,
  "use_tab_stops": true,
  "word_wrap": true
}

Keybindings

  // ERB - prints <%=  %>
  { "keys": ["ctrl+shift+."], "command": "erb" },

  // Reveals the current file in sidebar
  { "keys": ["ctrl+super+r"], "command": "reveal_in_side_bar" },

Your turn

Do you use Sublime Text and want to share your tips, suggest packages, share alternate icons? Use the comments!

References

Comments

Salvando SQL views no schema em aplicações Rails

on October 13, 2014 14:51

Se você usa views na sua aplicação Rails, seja porque ela é uma aplicação legada, ou elas são usadas para simplificar as consultas para relatórios, por exemplo, pode ter alguns problemas na hora de fazer o setup do projeto em uma máquina nova.

Eu não sabia (até hoje), mas o schema.rb não guarda as informações de criação das views, que você provavelmente fez em uma migration. Afinal, a não ser que tenha usado uma gem específica pra isso, você usou SQL puro para criar a migration.

Quando tive esse problema, pensei em fazer isso no db/seeds.rb, e mandar executar o SQL, mas não parecia uma solução muito elegante, afinal eu não estava criando dados de seed, mas criando estrutura. Daí eu encontrei a solução perfeita.

Para fazer a migration exportar as views, devemos mudar o formato dessa exportação para SQL. Você pode fazer isso no application.rb:

# config/application.rb
config.active_record.schema_format = :sql

ou, se você estiver numa aplicação Rack qualquer, pode colocar no seu Rakefile:

# Rakefile
ActiveRecord::Base.schema_format = :sql

Quando você executar a migration, gerará um arquivo structure.sql em vez do schema.rb.

Para carregar, em vez de rake db:schema:load, use:

# console
$ rake db:structure:load

E as views serão criadas.

Fonte: Using Rails and SQL Views for a Report

Comments

Migrando dados entre sistemas de bancos de dados com ActiveRecord

on September 22, 2014 12:13

Recentemente migrei este blog de MySQL para PostgreSQL.

Um dos problemas que tinha que resolver era migrar os posts existentes sem perder dados. Como os formatos de dump podem ser incompatíveis, resolvi usar o próprio ActiveRecord para me ajudar a migrar os dados.

Baixei um dump do MySQL, carreguei num BD local, e criei um banco novo no PostgreSQL.

Como eu refiz todo o código (a versão do Rails estava em 2.3.x :p), já configurei o database.yml para usar o adapter do PostgreSQL:

# config/database.yml
development:
  adapter: postgresql
  encoding: unicode
  database: blog_development
  pool: 5
  username: root
  password:
  socket: /var/pgsql_socket/.s.PGSQL.5432

Então o que eu tive que fazer foi configurar uma nova conexão para o banco legado em MySQL:

# config/database.yml
legacy_development:
  adapter: mysql2
  database: blog_development
  username: root
  password:
  port: 3306
  host: localhost

A partir daí criei um model temporário, usando a conexão MySQL:

# app/models/legacy_post.rb
class LegacyPost < ActiveRecord::Base
  establish_connection :legacy_development
  self.table_name = "posts"
end

Daí foi só entrar no console e rodar o script:

# console
LegacyPost.all.each do |legacy_post|
  Post.create(legacy_post.attributes)
end

A partir daí você pode apagar o model e editar a configuração do banco legado.

Comments