Essential Setup (2015 edition)

I had this article in mind for quite a while: My personal set of hardware, apps and services which are essential for my daily work. I currently take the chance to “clean install” my macbook. After updating from Leopard to Snow Leopard to Lion to Mountain Lion – it was time to start from scratch. This is my opportunity to document everything I need to get up and running.

Hardware

  • MacBook Air (13″, late 2011, 4GB RAM, Mac OSX Yosemite)
    I would love to have 8GB+ RAM and a retina display – beside of that the MacBook Air perfectly fits my needs.
  • Magic Touchpad
  • Apple USB Keyboard without the numeric keypad
    This keyboard is pretty rare and unfortunately it is not available anymore. It has the exactly same key sizes and arrangement as the build-in keyboard of the MacBook Air. The larger one with the numpad on the right has for example different Ctrl/Option/Cmd keys. As I switch regularly between my desktop setup and “mobile”/MacBook only, it drives me crazy when the keys are not at the same place. The bluetooth keyboard would fit too. However i prefer the wired one for my home office.
  • 24″ Display – Benq G2420HDBL
  • Notebook stand Logitech Alto Express
  • NAS Synology DS 211
  • Home Server Mac Mini (Late 2012; Mac OSX Yosemite Server; Headless)
    Runs VMs; monitors my smart home and some (online-)services; supposed to run a DHCP and local DNS and a Jenkins and XCode-Server.

Software (and Online Services)

  • SuperDuper
    The last app I installed before the reinstallation was SuperDuper to create a full disk dump on a external drive for backup.
  • TimeMachine
    While we talking about backups: I’m using Apples TimeMachine for regular local backups (on a external attached USB Harddisk) and …
  • Arq
    … and Arq for external offsite site backup to Amazon S3/Glacier
  • Chrome
    Google Chrome is my browser of choice. But sometimes I use Safari, too. Chrome Extension installed:
  • Pocket
    To bookmark URLs I want to read later.
  • Calendar.app
    Apples build in Calendar works fine for me. I’m syncing and sharing several calendars with iCloud
  • Contacts.App
    Why not using Apples Contacts app with iCloud sync for addresses and phone numbers on all devices.
  • Mail.app
    Same for Mail: Apples Mail on OSX and iOS works great for me. My self-hosted IMAP server works great for years now. It collects a bunch of mail accounts using “getmail”, filters and processes them with “procmail” and “bogofilter” on the server.
  • MailActOn
    MailActOn allows me to color the mails in my inbox and also helps to move/filter them using keyboard shortcuts.
  • 1Password
    to store passwords, any kind of credentials, software licenses, bank accounts, private notes and everything I feel like I need to store secure.
  • Dropbox
    To sync my 1Password keychain along my devices (Mac, iPad, iPhone), share files (mostly photos) with friends and family. Also my Macs Desktop (“~/Desktop”) is a symlink into the Dropbox, so everything I might put there temporary is synced (and kind of backuped) immediately.
  • Synology CloudStation
    To Sync files from the Mac to the NAS, I’m using the Synology Cloudstation client. Havn’t found the time to dig into OwnCloud yet.
  • VPN
    To create a VPN to my home network, when I’m not at home, I use OSXs build in VPN client, connecting to a VPN-Server running on my Synology NAS.
  • Dynamic DNS
    As dnydns.org bugged me for a while, I switched to NoIP.com some months ago.
  • Things
    Without Things I would have no idea what to do all day long! I’m using it on Mac and iOS – syncing with the Things Cloud.
  • Wunderlist
    As Things does not support sharing lists I started to use Wunderlist recently for a shared Todo list with my wife.
  • Trello
    Whenever I feel like I want to move cards on a board (“personal kanban”-ish) I use Trello. Managing tasks with different states is hard in a plain list tool like Things or Wunderlist. Also you can share Trello boards with others.
  • Shopping List (iOS only)
    We used to manage our shared grocery shopping list with BuyMeAPie. But as we had issues with syncing lately we switched to “Shopping List”. Works great but misses a Webinterface or Mac client.
  • Alfred with Powerpack
    To launch Apps, search in the web or files on disk, clipboard history (I really would miss that!), calculator and adding tasks to things I love using Alfred. I’m pretty sure this is my most called app while working on my mac.
  • XCode
    for iOS and Mac OSX development
  • PHPStorm
    for PHP/HTML development. (“Dracula” “Darcula” color theme)
  • Java for OS X 2014-001 for the sake of PHPStorm
  • Sourcetree
    is my Git GUI client of choice. I’m using it mostly for browsing in the git history and commiting (sometimes for pulling/pushing, too). For everything else, like merging/rebasing, I prefer using the git client on CLI.
  • GitHub
    My public and private git repositories are hosted on GitHub.
  • Terminal.app
    OSXs Terminal.app has everything I require for a console. Except the default color profile is not an option. So I’m using:
  • Solarized color theme
    But I darkend the background a little (more black-ish then darkblue) and set the cursor and select highlight
  • HomeBrew
    After multiple major problems with ports, I switched to homebrew a while ago. And pretty happy with it. However after a whole time I feel like it’s a good idea to start from scratch with brew. So this is, what I installed using brew:
    • zsh – my favorite shell, up-to-date in brew
    • ack – a better grep
    • git – (2.2.1) Apples build-in git is 1.9.3 only
    • graphicsmagick
    • macvim
    • imagesnap – for my “gitshots” commit hook
    • apache + php56 + mysql + dnsmasq – I followed this well-thought-out tutorial to setup Apache with PHP. It also installs/configures https (SSL), a local DNS (every <something>.dev domain will return 127.0.0.1 as IP) and “auto-virtualhosts” (domainname maps to directory name in ~/Sites/)
    • HttPie – CLI HTTP client with pretty output. Awesome for testing JSON Webservices.
  • oh-my-zsh – Although it does many things I’ll never use – it brings a great set of defaults for zsh.
  • .zshrc
    I’ve added some shell aliases to my .zshrc:
    alias l='ls -ltr'
    alias lt='ls -ltrsa'
    alias ip='curl etobi.de/ip'
    alias ts="date +%s | tee >(pbcopy)"
    alias sourcetree='open -a SourceTree'
    alias clearAllFkingCaches="./typo3/cli_dispatch.phpsh extbase cacheapi:clearallcaches && ./typo3/cli_dispatch.phpsh extbase cacheapi:clearconfigurationcache && rm -fr typo3temp/Cache"
  • ~/.ssh/config
    If you don’t know about “~/.ssh/config” yet, you really should learn about it (http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/).
  • Git config
    My ~/.gitconfig provides a bunch of global settings and git aliases. (see https://gist.github.com/etobi/ea235b89d11ce28b660b)
  • gitshots
    I setup a post-commit hook in all local git repositories, which captures a picture from the build in iSight webcam. Just for fun. Every once in a while I browse through the pictures. Maybe I compile a timelapse video from it.
  • Sequal Pro
    Comfortable access to all local and remote MySQL databases.
  • ForkLift
    Whenever I need an SFTP/SCP client.
  • TextMate 2
    Quickly edit a text file or write down some notes? I go for TextMate.
  • Neor Profile SQL
    Sometimes it helps to see all SQL queries fired to the MySQL-Database. Neor is a kind of MySQL-proxy which captures and profiles all queries.
  • fake-sendmail.sh
    Whenever I need to implement sending mails from PHP application I hate relying on a internet connection and the delay when using a real mail server. So I just configured PHP to use a custom shell/ruby script for sendmail. The script just dumps the mail into a .eml file.
  • Outbank
    Online Banking
  • iTunes
    For music I own. With “iTunes Match” to have all my music on my iOS devices, too.
  • Spotify
    For the music I don’t own.
  • Mite
    I track all my working times using mite.
  • DynaMite
    Although Mite has a great API, DynaMite seems to bee the only okay-ish Mite client for mac. it works well enough, so I even stopped developing my own Mite client.
  • GrandTotal
    I’m writing my invoices using GrandTotal. However I’m not very satisfied. It keeps crashing every once in a while and screwed up my invoice numbers at least two time. Starting with the next invoice I will evaluate FastBill and Billomat for invoicing.
  • Bill 2
    Since I wanted to get rid of GrandTotal, and didn’t liked FastBill and Billomat very much, I now ended up in creating my invoices with “Bill 2″. Pretty reduced feature set and does exactly wht it is supposed to do. Like it so far.
  • Steuertipps
    Since many years I do my Einkommensteuererklärung, EÜR, Umsatzsteuer-Voranmeldung, -Erklärung, etc. with Steuertipps.
  • freefibu | MonKey Office
    Currently I’m evaluating FreeFIBU and MonKey Office for my bookkeeping.
    For the moment I ended up in maintaining all my book keeping in a MySQL-Table with SequalPro and a custom PHP-Script (in progress) for analysis.
  • Tweetbot
    Reading and writing tweets with tweetbot on Mac and iOS.
  • Slack
    Keep in touch with the colleagues using Slack.
  • HipChat
    Keep in touch with the other colleagues on HipChat.
  • Skype
    Chat with colleagues without Slack or HipChat. Also Video calling with the family.
  • VirtualBox
    The Mac Mini runs some (at least one) virtual machine, using headless VirtualBox.
  • Continuity Activation Tool
    Yosimite does not activate HandsOff/Continunity on my late 2011 MB Air, although there seem to be no technical reason. However one can hack/activate it using a hex-editor, or a tool, e.g. the “Continuity Activation Tool”
  • Skitch
    Take a screenshot, annotate it, and share it (on my own server using SFTP). No Evernote-Account needed.
  • TextMate
    Quickly editing a small text file?
  • Mou
    Markdown Editor. I use it to take all kind of notes.
  • Moom
    Window Management/Resizing

I think that’s all I need. Maybe this article inspires you to share which tools, apps and services you use and don’t want to miss. Let me know :-)

– Update: Add Chrome Extensions and Pocket.

– Update: Add Java for OS X required by PHPStrom

– Update: Add Continuity Activation Tool and Monkey Office

– Update: Add Trello

– Update: Add Skitch

– Update: Add Bill2; deleted FastBill and MonKey; Fix typos

– Update: Add Mou, TextMate, Moom, MacVim and httpie

T3DD13 Deployment Workshop – EXT:migrations – (Part 6/10)

This article is part of a series about my deployment workshop on the T3DD13. Make sure to read the other posts, too.

Idea of “migrations” for more then database schema updates

This basic concept of “migrations” for TYPO3 CMS goes back to a talk on the T3DD in 2009 I held together with Christopher. Back then we implemented a Proof of Concept for a customer project and presented that on the devdays.

In that project we had multiple installations (like the live system, a staging sytem, and several developer systems) and needed to apply the same changes to all those independent systems. Those “changes” were things like templavoila TO/DS and mappings, setting up pages with configured plugins, application related configurations in the database and so on. Basically everything one need to do in the backend.

We started to maintain a wiki page and collected all changes (as a step-by-step guide) which need to be done on the next release. Whenever someone updates the codebase on one of the systems, he needs to check the wiki what needs to be done in the backend. This approach was very time-consuming and error-prone. So we wanted to be able to script all these changes and deliver them with the code base in the project SVN (we didn’t used Git back then) and be able to track which changes are already done on one system and which are missing.

From Ruby or Doctrine you might know the concept of migrations. It’s basically made for database schema updates, like creating a new table, adding columns or updating column definitions. A migration provides update from one stage of the database to a new one. A migration can be “applied” (“up” or “execute”) or “removed” (“down” or “rollback”). Each installation “knows”, which migrations are already applied and which are not. With a simple command you can apply all missing migrations (in the correct order) to make sure your database is up to date.

In TYPO3 we have a solution for database schema updates already: The “database compare tool” compares the current database table definitions with those described in the ext_tables.sql files in the extensions. But we can make use of this basic concept to solve the issues described above.

A migration is basically a PHP class with a certain naming convention and in a defined folder. As it is just a file, it can be versionized and distributed to all instances using the VCS (e.g. Git or SVN). Each migration class has a “up”, a “down” method and a unique identifier (a UUID, a timestamp or something else).

Each instance knows which migrations are available (by scanning the defined folders for migration class files) and which of them are already applied. In a backend module and by using a CLI command the user can list and run the missing migrations. This will call the “up” method for each migration and memorize all successfully applied migrations.

As the migrations as just PHP classes, you can do everything you need within the “up” (and the “down”) methods. For example it can use the service classes provided by EXT:coreapi to create/update records.

I see a lot of use cases for such a tool and I’m sure it will help a lot to solve the issue of not-versionized configuration and application related data, which are in the database of TYPO3, but not in files currently.

EXT:migrations

All described above is just ideas and concept. There is no implementation yet. I’m willing to work on a proof of concept and a first implementation. If you like the idea, if you need something like that or have any suggestions, please get in touch with me!