Kategorie-Archiv: Allgemein

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 – Deployment Setup – (Part 2/10)

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

Example for an deployment setup

During the workshop, we first talked about the deployment setups and tools we use. I presented a setup I recently worked with.

Git Flow

We had all code versionized in Git, using the „Git flow“ approach for branching and releasing. If you don’t know this yet, I highly recommend to read „A successful Git branching model“ and checkout this Git flow cheat sheet. In the end it means we had a stable and always-ready-to-release master branch, a release branch and a develop branch with the latest changes.

Systems

Beside of multiple development installations on the developer’s local systems, we had a live system, a latest and a staging system.

live

On live the latest master branch was checked out (which means the latest stable release). live is also the system where editors editing the actual content.

staging

On staging HEAD of the release branch was checked out. This branch contains the latest changes/features, which are supposed to be released next on live. Once in a while a script (triggered manually, see below) copies the (MySql-) database and asset files (like fileadmin/ and uploads/ using rsync) from live to the staging. This means all changes on staging will be overwritten somewhen. On staging the newest features and fixes can be tested using the current live data, before releasing them on the actual live system. Also the customer had access to this system to test and accept the new changes.

latest

On latest the HEAD of develop was checked out. All changes from multiple developers come together here on one system to be tested. This also means the system might be broken from time to time. Like on staging the database and assets (upload/ and fileadmin/) came from live, although a lot more rarely.

integration

Unfortunately we didn’t had a real integration system, where a developer/editor could prepare a new feature (create pages and content), test it and easily publish it to the live system (because content deployment is a not yet solved issue). We had to do this on staging (for testing and acceptance) and once again on live after releasing. For complex setups (multiple pages, a lot of content) we used .t3d exports to got that to the live system. From my personal experience you really need to be careful when ex-/importing t3d files!

Jenkins

We had a Jenkins, which took care of deploying code and data to the different system. These are Jenkins jobs we setup:

deploy to latest

This job was triggered on each commit (actually whenever someone pushed to the central git repository; using a git post-receive hook). It triggered an TYPO3 Surf deployment, which itself deploys the branch develop on latest and runs „EXT:coreapi“ on CLI to „clear caches“ and do a „DB compare“ on latest.

TYPO3 Surf was installed on the same machine Jenkins is running on. TYPO3 Surf and all Surf deployment configurations (for other projects too) were versionized in a separate Git repositories.

deploy to staging

This job wasn’t triggered automatically, but manually only. It also runs TYPO3 Surf to deploy the HEAD of release on staging, „clear the caches“ and do a „DB compare“.

deploy to live

This is almost the same as „deploy to staging“ except its deploys the head of master to live instead.

fetch live data to testing or staging

This job (manually triggered) did a mysqldump on the live system (excluding the caching and log tables) and applies it to the testing or staging system. All asset files (e.g. images) from live got synced using a rsync. The database was just a few hundred MBs and all asset files together sum up to like 5-6 GB (but most of them didn’t ever change, so rsync was pretty fast).

Whenever a developer felt like wanting to update his local system, he manually fetched a database dump from staging on the CLI and, if necessary, some asset files using rsync, too.

Deployment setups of others in the workshop

During the T3DD13 workshop we also discussed about setups and tools the participants are using:

Using Git seems to be very common these days, only a few are (still?) using SVN. When using Git, most people prefer using submodules to include other extensions or other repositories or just have „everything in one repository“. Using multiple branches (like master/staging/production or master/release/delevop) seems to be good practice.

Using composer instead seems to be a very promising alternative, but for TYPO3 CMS no one used that yet in production (in the time of asking). In the meanwhile Lightwerk/Felix Oertel setup a TYPO3 CMS composer repository containing all not-unsecure extensions, the TYPO3 CMS core and a custom composer installer. Using this repository one can setup a TYPO3 Installation using composer, instead of Git submodules.

Also Jenkins is very widely used to automate deployments. It triggers, depending on the personal preference, „TYPO.Surf“, „Ant“ or „phing“ to do the actual deployment.

I was very pleased to hear that EXT:coreapi found its place in many deployment setups to automatically clear caches or do Database scheme updates (DB compare). As an alternative (and maybe for historical reasons only ;-) some are using EXT:t3deploy and EXT:cleartypo3cache.