twitter github linkedin email

Álvaro Ramírez

[2015-08-23 Sun] # Use ImageMagick to auto-orient images

Recently needed to rotate images based on EXIF metadata. ImageMagick to the rescue:

$ for i in *.png; do convert -auto-orient "$i" "$i"; done

[2015-08-23 Sun] # Bengali Macher Jhol

My friend Sakhya brought me the wonderful Cookbook of Regional Cuisines of India. After improvisations and substitutions, here's my attempt at making Bengali Machcher Jhol:

bengali-machcher-jhol-00.png bengali-machcher-jhol-01.png bengali-machcher-jhol-02.png bengali-machcher-jhol-03.png bengali-machcher-jhol-04.png bengali-machcher-jhol-05.png

[2015-08-22 Sat] # New habits for 2015

  • 20 min morning meditations.
  • A better way to tie your shoes.
  • Cold showers (all of them!).
  • Keys, wallet, phone, badge, and headphones live together.
  • Listen to audio books.
  • Morning runs.
  • Nightly flossing.

[2015-08-22 Sat] # Meditation bookmarks

[2015-08-22 Sat] # Learning bookmarks

[2015-08-22 Sat] # Bundi travel bookmarks

  • Bundi Haveli (accomodation).
  • Hadoti Palace (accomodation).
  • Haveli Braj Bhushan Ji ki (accomodation).
  • Haveli Katkoun Guest House (accomodation).
  • Kasera Paradise (accomodation).

[2015-08-14 Fri] # Upgrading PL30 headphones

I've loved my Soundmagic PL30 in-ear headphones. They're relatively inexpensive, comfortable, and great for exercising (they stay in). Audio quality and bass have been good enough (I don't need much). Unfortunately, I've had two pairs of PL30's and both stopped working after a year or two. I'm replacing the last pair with RHA's MA750 (an upgrade, me hopes).

Other contenders considered: Etymotic Research HF5, and Shure SE215. Also considered bluetooth alternatives like JayBird BlueBuds X and Plantronics BackBeat GO 2.

I'm somewhat nervous to pay more for a pair of headphones. Let's hope they don't meet the same unfortunate fate. We'll see.

[2015-08-13 Thu] # Quotes

[2015-08-13 Thu] # Bhutan travel bookmarks

[2015-08-12 Wed] # Cooking bookmarks

[2015-08-11 Tue] # 9 week half-marathon training

While reading Zen Habits: Mastering the Art of Change, I comitted to running half marathon in mid-October. That's roughly two months from now. Here's a 9 week training schedule:

WEEK MON TUE WED THU FRI SAT SUN
1 Rest 5 Km 5 Km Cycle Rest 5 Km 7 Km
2 Rest 5 Km 5 Km Cycle Rest 5 Km 8 Km
3 Rest 7 Km 5 Km Cycle Rest 5 Km 10 Km
4 Rest 8 Km 5 Km Cycle Rest 5 Km 12 Km
5 Rest 8 Km Rest 8 Km Rest 5 Km 14 Km
6 Rest 8 Km Rest 8 Km Rest 6 Km 16 Km
7 Rest 8 Km 8 Km 8 Km Rest 8 Km 19 Km
8 Rest 8 Km Rest 12 Km Rest 8 Km 16 Km
9 Rest 8 Km Rest 5 Km 5 Km Rest Race

Here's my progress:

WEEK MON TUE WED THU FRI SAT SUN
1 Rest 29:04 Rest 26:36 38:40
2 Rest 29:11 28:50 Rest 27:07 44:55
3 Rest 40:46 26:29 Rest 57:01
4 Rest       Rest    
5 Rest   Rest   Rest    
6 Rest   Rest   Rest    
7 Rest       Rest    
8 Rest   Rest   Rest    
9 Rest   Rest     Rest Race

[2015-08-11 Tue] # Shanghai travel bookmarks

[2015-08-10 Mon] # Singapore job board bookmarks

[2015-08-08 Sat] # Germany travel bookmarks

[2015-08-08 Sat] # Menorca travel bookmarks

[2015-08-08 Sat] # Travel essentials

[2015-08-08 Sat] # Philippines travel bookmarks

[2015-07-23 Thu] # Add site-specific browsers to your workflow

There are three browser tabs continously used in my workflow: GMail, Google Calendar, and Google Play Music. I normally have many more tabs open, but these three I access periodically. As the number of open tabs increases, and I fail to cleanup, getting back to my usual three gets a little trickier.

So far, I've kept each of these services open in separate windows. But that doesn't always work. Click on any link in your inbox and you're back to playing cleanup. This is where site-specific browsers (SSB) can help.

Epichrome enables you to build Chrome-based SSBs (on Mac OSX). Build an SSB for the usual suspects and easily jump to them using the app switcher.

switcher-small.png

[2015-07-22 Wed] # iOS camera bookmarks

[2015-07-20 Mon] # Sardinia travel bookmarks

  • Alghero.
  • Baja Sardinia.
  • Budoni.
  • Cala Goloritze, Sardinia.
  • Castelsardo (gifts maybe?).
  • Food: Maialetto sardo (Pig), Sebadas, Pardula, Papassinas, Pani e sapa.
  • L'Asinara boat trip (abandonned penitentiary).
  • La Pelosa beach.
  • Nuraghe.
  • Porto Cervo.
  • Porto Torres.
  • San Teodoro.
  • Stintino (fishing port).
  • Zedda e Piras vinyards (Alghero).

[2015-07-17 Fri] # Open closest build file in Emacs

Whether it's Makefile, SConstruct, BUILD, or your favorite build file, chances are you have to tweak it from time to time. ar/open-build-file searches your current and parent directories to find a build file.

(defvar ar/project-file-names '("Makefile" "SConstruct" "BUILD"))

(defun ar/parent-directory (path)
  "Get parent directory for PATH."
  (unless (equal "/" path)
    (file-name-directory (directory-file-name path))))

(defun ar/find-upwards (path filename)
  "Search upwards from PATH for a file named FILENAME."
  (let ((file (concat path filename))
        (parent (ar/parent-directory (expand-file-name path))))
    (if (file-exists-p file)
        file
      (when parent
        (ar/find-upwards parent filename)))))

(defun ar/open-closest (filename)
  "Open the closest FILENAME in current or parent dirs (handy for finding Makefiles)."
  (let ((closest-file-path (ar/find-upwards (buffer-file-name)
                                                 filename)))
    (when closest-file-path
      (message closest-file-path)
      (switch-to-buffer (find-file-noselect closest-file-path)))
    closest-file-path))

(defun ar/open-build-file ()
  "Open the closest project file in current or parent directory.
For example: Makefile, SConstruct, BUILD, etc.
Append `ar/project-file-names' to search for other file names."
  (interactive)
  (catch 'found
    (mapc (lambda (filename)
            (when (ar/open-closest filename)
              (throw 'found t)))
          ar/project-file-names)
    (error "No project file found")))

[2015-07-15 Wed] # Create iOS static fat libraries

Have separate static libraries for different iOS architectures? Stitch 'em up into a single fat library using with lipo:

$ lipo -create libOne_i386.a libOne_x86_64.a libOne_armv7.a libOne_arm64.a -output libOne.a

[2015-07-15 Wed] # Settling scores with an org table

Recently kept track of expenses between a group of us. To settle the scores, I emailed an exported HTML table from an org file. This was simple enough and required no external viewer from recepients. The org table, in all its textful glory, looked as follows…

| Date             | Item           |   Charge |
|------------------+----------------+----------|
| [2015-06-18 Thu] | Cash           |    20.00 |
| [2015-07-11 Sat] | Lucky 7        |    42.97 |
| [2015-07-13 Mon] | Santa Maria    |    32.00 |
| [2015-07-12 Sun] | Tayyabs        |    46.00 |
| [2015-07-13 Mon] | The Brass Rail |    39.00 |
| [2015-07-13 Mon] | Underground    |    10.00 |
| [2015-07-10 Fri] | Cash           |    20.00 |
| [2015-07-13 Mon] | Cash           |    20.00 |
| [2015-07-14 Tue] | Cash           |    20.00 |
|------------------+----------------+----------|
|                  | total          | £ 249.97 |
#+TBLFM: @11$3=vsum(@2..@10);£ %.2f

…while the exported HTML below could be easily pasted on to an email.

Date Item Charge
[2015-06-18 Thu] Cash 20.00
[2015-07-11 Sat] Lucky 7 42.97
[2015-07-13 Mon] Santa Maria 32.00
[2015-07-12 Sun] Tayyabs 46.00
[2015-07-13 Mon] The Brass Rail 39.00
[2015-07-13 Mon] Underground 10.00
[2015-07-10 Fri] Cash 20.00
[2015-07-13 Mon] Cash 20.00
[2015-07-14 Tue] Cash 20.00
  total £ 249.97

[2015-07-13 Mon] # Recognize new password prompts in Emacs shell

At some point, you may come across a trusted command-line utility prompting you for a password, and Emacs shell happily displaying each typed character to the nearby-world to see. Luckily, you can train Emacs to recognize new password prompts and hide the typed characters in modes deriving from comint. Append the password prompt REGEXP:

(setq comint-password-prompt-regexp (concat comint-password-prompt-regexp
                                            "\\|"
                                            "Password for red alert:"))

[2015-07-11 Sat] # Bosnia and Hercegovina travel bookmarks

[2015-07-11 Sat] # Ireland travel bookmarks

[2015-07-09 Thu] # Pizza in London

Not tried these yet. Taking note:

  • Bravi Ragazzi (Streatham).
  • Homeslice (Covent Garden).
  • Lord Morpeth (Hackney).
  • Santa Maria (Ealing).
  • Voodoo Ray's (Dalston).
  • Well Kneaded Wagon (Date-dependent location).

[2015-07-09 Thu] # mp4 to gif

Converting mp4 to gif is handy for posting short screencasts. You can convert to gif using ffmpeg and optimize with imagemagick. To install:

apt-get install ffmpeg imagemagick (linux)
brew install ffmpeg imagemagick (Mac)

Convert to gif:

ffmpeg -i my.mp4 -pix_fmt rgb24 -r 5 my.gif

Optimize with:

convert -dither none -layers Optimize my.gif my_optimized.gif

[2015-07-06 Mon] # Keyboards bookmarks

[2015-07-05 Sun] # United States travel bookmarks

[2015-07-05 Sun] # Lebanon travel bookmarks

[2015-07-05 Sun] # Slovenia travel bookmarks

[2015-07-05 Sun] # Belgium travel bookmarks

[2015-07-03 Fri] # Fishing with Emacs

OK not quite, but having recently learned about C-M-w (append-next-kill), I used it in a keyboard macro to fish out matching lines. This is similar to flush-lines, except the kill ring is also populated. This is handy, if you need the flushed lines. Here's an example.

fishing.gif

Here's the equivalent in Emacs lisp:

(defun flush-kill-lines (regex)
  "Flush lines matching REGEX and append to kill ring.  Restrict to \
region if active."
  (interactive "sFlush kill regex: ")
  (save-excursion
    (save-restriction
      (when (use-region-p)
        (narrow-to-region (point) (mark))
        (goto-char 0))
      (while (search-forward-regexp regex nil t)
        (move-beginning-of-line nil)
        (kill-whole-line)))))

[2015-07-03 Fri] # California travel bookmarks

[2015-07-01 Wed] # Rebind caps lock to control key on Mac OS X

Let's see if this one sticks. I'll give caps lock as control a try. Rebinding the keys on Mac OS X is easy enough: caps-lock-to-control.png

System Preferences -> Keyboard -> Keyboard Tab -> Modifier Keys…

[2015-06-30 Tue] # Searchable ebooks in Emacs

If you haven't bought Mastering Emacs by Mickey Petersen, you should. It's a wonderful source of Emacs tips. Having just finished the ebook on my Kindle, I was keen to go back and fish out some of that newly found wisdom. My immediate reaction was to figure out a way to make the ebook searchable from Emacs.

The ebook is available in epub and pdf format. Though Emacs's docview is super handy for viewing pdf's, searching didn't feel as comfortable as searching in org mode. The epub, on the other hand, proved useful. Pandoc can easily convert from epub to org.

pandoc  --from=epub --to=org mastering-emacs.epub > mastering-emacs.org

After a some tidying (mostly removing BEGIN_HTML/END_HTML blocks and adding TITLE/AUTHOR), the resulting org file is surprisingly clean and easy to search/navigate. helm-swoop and helm-org-in-buffer-headings are great for that. mastering-emacs-org-00.png mastering-emacs-org-01.png mastering-emacs-org-02.png

[2015-06-21 Sun] # Portugal travel bookmarks

[2015-06-21 Sun] # Bulgaria travel bookmarks


[2015-06-21 Sun] updated

[2015-06-21 Sun] # Presenting bookmarks

[2015-06-21 Sun] # Bali travel bookmarks

  • Pura Lempuyang, Bali.

[2015-06-17 Wed] # WWDC app for OS X

Guilherme Rambo created a great OS X OS X app for viewing WWDC content. Just installed it. Super handy. Thanks. Installing as simple as:

$ brew cask install wwdc

[2015-06-15 Mon] # Debugging Objective-C reference cycles

Overriding retain/release/autorelease may be handy while debugging:

- (instancetype)retain {
  NSLog(@"%p, retain", self);
  return [super retain];
}

- (oneway void)release {
  NSLog(@"%p, release", self);
  [super release];
}

- (instancetype)autorelease {
  NSLog(@"%p, autorelease", self);
  return [super autorelease];
}

[2015-06-13 Sat] # London grub

Beyond the hype, buzz, and pricey gimmicks… Places to eat in London:

  • Antipode.
  • Arang.
  • Bone Daddies.
  • Gelupo.
  • Grind.
  • Holy Cow.
  • Kerbisher and Malt.
  • Kulu Kulu (South Ken).
  • Le Relais de Venise.
  • Lucky 7's.
  • Royal China.
  • Shree Krishna Vada Pav.
  • Sri Suwoon.
  • Tayyabs.
  • The Cow.
  • Tonkotsu.

[2015-06-08 Mon] # My working playlist

[2015-06-02 Tue] # Xcode bookmarks

[2015-06-02 Tue] # Costa Rica travel bookmarks

[2015-06-02 Tue] # Australia travel bookmarks

[2015-06-02 Tue] # Samoa travel bookmarks

[2015-06-02 Tue] # Norway travel bookmarks

[2015-06-02 Tue] # Los Angeles travel bookmarks

[2015-05-28 Thu] # Mastering Emacs is out

Emacs is amazingly alive. New packages are regularly listed on melpa and a new book just came out: Mastering Emacs by Mickey Petersen.

cover.png

[2015-05-25 Mon] # South Carolina travel bookmarks

[2015-05-25 Mon] # Colorado travel bookmarks

[2015-05-25 Mon] # Bash bookmarks

[2015-05-25 Mon] # restclient.el

Installed Pashky's restclient.el Emacs package. Super helpful when trying out REST APIs.

restclient.png

[2015-05-25 Mon] # Seatle travel bookmarks

[2015-05-25 Mon] # Berlin travel bookmarks

[2015-05-25 Mon] # Skeuomorph

From Wikipedia, skeuomorph ˈskjuːəmɔrf is a derivative object that retains ornamental design cues from structures that were necessary in the original. Examples include pottery embellished with imitation rivets reminiscent of similar pots made of metal and a software calendar that imitates the appearance of binding on a paper desk calendar.

[2015-05-25 Mon] # define-word

Installed Abo Abo's define-word Emacs package. A handy package to define words at point.

define-word.png

[2015-05-22 Fri] # Flushing empty lines in Emacs

Via masteringemacs.org, removing blank lines in a buffer:

M-x flush-lines RET ^$ RET

[2015-05-22 Fri] # Regex bookmarks

[2015-05-06 Wed] # Write to temp iOS snippet

NSString *tempDir = NSTemporaryDirectory();
NSLog(@"%@", tempDir);
NSString *dataFilePath = [tempDir stringByAppendingPathComponent:@"my.file"];
[data writeToFile:dataFilePath atomically:YES];

[2015-05-04 Mon] # Greece travel bookmarks

[2015-05-04 Mon] # Sri Lanka travel bookmarks

[2015-05-04 Mon] # Switzerland travel bookmarks


[2015-07-04 Sat] updated

[2015-05-04 Mon] # Thailand travel bookmarks

[2015-05-04 Mon] # Madagascar travel bookmarks

[2015-05-04 Mon] # Hong Kong travel bookmarks

[2015-05-04 Mon] # Barcelona travel bookmarks

[2015-05-04 Mon] # Iceland travel bookmarks

[2015-04-30 Thu] # Building clang-format

Based on instructions from Building clang-format and friends on OSX Mountain Lion.

#!/bin/bash
set -o nounset
set -o errexit

# Based on instructions from:
# http://blog.hardcodes.de/articles/63/building-clang-format-and-friends-on-osx-mountain-lion

readonly LLVM_DIR_PATH='/tmp/llvm'

update_repo() {
  if [[ ! -d $1 ]]; then
    git clone $2
  else
    cd $1
    git pull
    cd ..
  fi
  cd ..
}

update_all_repos() {
  update_repo "llvm" "http://llvm.org/git/llvm.git"
  pushd "${LLVM_DIR_PATH}/llvm/tools"
  update_repo "clang" "http://llvm.org/git/clang.git"
  popd
  cd "../../${LLVM_DIR_PATH}/llvm/tools/clang/tools"
  update_repo "clang-tools-extra" "http://llvm.org/git/clang-tools-extra.git"
  cd "../../.."
}

build_clang() {
  mkdir -p clang
  mkdir -p build
  cd clang
  ../llvm/configure --enable-libcpp --enable-cxx11 --enable-debug-symbols=no --enable-optimized --prefix="${LLVM_DIR_PATH}/build"
  make install
}

mkdir -p $LLVM_DIR_PATH
cd ${LLVM_DIR_PATH}
update_all_repos
build_clang

[2015-04-30 Thu] # Programmatic iOS Auto Layout

Basic iOS auto layout usage. See Adopting Auto Layout and Visual Format language for reference.

- (instancetype)initWithFrame:(CGRect)frame {
  self = [super initWithFrame:frame];
  if (self) {
    // Disable autoresizing mask translation for parent.
    self.translatesAutoresizingMaskIntoConstraints = NO;

    _subview1 = [[UIView alloc] init];
    // Disable autoresizing mask translation for subview.
    _subview1.translatesAutoresizingMaskIntoConstraints = NO;

    _subview1.backgroundColor = [UIColor redColor];
    [self addSubview:_subview1];

    // Creates a dictionary of bindings to be used in visual format.
    NSDictionary *viewBindings = NSDictionaryOfVariableBindings(_subview1);

    // H: horizontal layout
    // |-50- spacing in relation to superview
    // [_subview1(==50)] subview1's width
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_subview1(==50)]"
                                                                 options:0
                                                                 metrics:nil
                                                                   views:viewBindings]];
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_subview1(==50)]"
                                                                 options:0
                                                                 metrics:nil
                                                                   views:viewBindings]];
  }
  return self;
}

[2015-04-23 Thu] # Japan travel bookmarks

[2015-04-19 Sun] # UK travel bookmarks

[2015-04-19 Sun] # Development quotes

[2015-04-19 Sun] # Spain travel bookmarks

[2015-04-19 Sun] # Meet up bookmarks

[2015-04-17 Fri] # Plantuml example

Played with Plantuml. Convenient for generating UML diagrams from text. Here's the Language Reference Guide. Here's an example:

@startuml
  abstract class Singer {
    abstract void sing()
    void Dance()
  }

  Singer <|-- PopSinger
  Singer <|-- SalsaSinger

  class PopSinger {
    void sing()
  }

  class SalsaSinger {
    void sing()
  }

@enduml

plantuml-singer.png

Install plantuml on Mac OS X:

brew install plantum

Generating diagram:

$GRAPHVIZ_DOT=~/homebrew/bin/dot java -jar path/to/plantuml.8018.jar diagram.plantuml

[2015-04-14 Tue] # Helm-describe-helm-attribute

Writing A Spotify Client in 16 Minutes is fantastic for picking up helm and Emacs lisp tips. Of interest helm-describe-helm-attribute, second to the awesomeness of helm-spotify integration.

[2015-04-12 Sun] # Youtube videos in your org html export

Sacha Chua and John Wiegley posted a wonderful video on Emacs lisp development tips. Embedding the following raw HTML using #+BEGIN_HTML/#+END_HTML:

<iframe width="420"
        height="315"
        src="https://www.youtube.com/embed/QRBcm6jFJ3Q"
        frameborder="0"
        allowfullscreen>
</iframe>

results in an embedded video when exporting your org file:

[2015-04-12 Sun] # .net bookmarks

[2015-04-10 Fri] # UK property bookmarks

[2015-04-09 Thu] # Git commit message style

Adopted Tim Pope's Git commit message style. Also enabled Emacs's git-commit-training-wheels-mode:

(use-package git-commit-training-wheels-mode :ensure t
  :commands (git-commit-training-wheels-mode))

(use-package git-commit-mode :ensure t
  :config
  (add-hook 'git-commit-mode-hook 'git-commit-training-wheels-mode)
  :commands (git-commit-mode))

[2015-04-06 Mon] # fci-mode and org-html-export-to-html bug

Having enabled fci-mode in most programing modes, org-html-export-to-html now exports an additional unicode character in source blocks. This thread has a workaround:

(defun org-html-fontify-code (code lang)
  ;; ...
  (funcall lang-mode)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (when (require 'fill-column-indicator nil 'noerror)
    (fci-mode -1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  (insert code)
  ;; ...

[2015-04-03 Fri] # Try cocoapods out

Cocapods try:

$ pod try POD_NAME

[2015-04-03 Fri] # Cornwall travel bookmarks

[2015-04-03 Fri] # Austria travel bookmarks


[2015-06-02 Tue] updated

[2015-04-02 Thu] # Cinnamon desktop run dialog

Note to self. Open with Alt-f2.

[2015-03-29 Sun] # Books for 2015

[2015-03-29 Sun] # Ayahuasca bookmarks

[2015-03-28 Sat] # Emacs init.el bookmarks

[2015-03-28 Sat] # CSS vertical align using flex

Codepen snippet:

div{
  height: 200px;
  background: #ccc;
  display: flex;
  justify-content: center;
  align-items: center;
}

p{
  margin: auto
}

[2015-03-26 Thu] # London diving schools

[2015-03-26 Thu] # Helm buffer URLs

Venturing into Emacs lisp and Helm. Here's a go at listing all URLs in current buffer.

(require 'goto-addr)

(defun ar/helm-buffer-url-candidates ()
  "Generate helm candidates for all URLs in buffer."
  (save-excursion
    (goto-char (point-min))
    (let ((helm-candidates '())
          (url))
      (while (re-search-forward goto-address-url-regexp
                                nil t)
        (setq url
              (buffer-substring-no-properties (match-beginning 0)
                                              (match-end 0)))
        (add-to-list 'helm-candidates
                     (cons url
                           url)))
      helm-candidates)))

(defun ar/helm-buffer-urls ()
  "Narrow down and open a URL in buffer."
  (interactive)
  (helm :sources `(((name . "Buffer URLs")
                    (candidates . ,(ar/helm-buffer-url-candidates))
                    (action . (lambda (url)
                                (browse-url url)))))))

[2015-03-23 Mon] # Doh! undo last git commit

$ git reset --soft HEAD~1

[2015-03-22 Sun] # Resetting variables using defvar

Want to re-evaluate defvars and modify variables? eval-defun (bound to C-M-x) can help. From the manual:

If the current defun is actually a call to `defvar', then reset the variable using its initial value expression even if the variable already has some other value. (Normally `defvar' does not change the variable's value if it already has a value.) Treat `defcustom' similarly.

[2015-03-22 Sun] # Broken Xcode plugins?

Some Xcode plugins stopped loading after updating Xcode. Ensure the latest DVTPlugInCompatibilityUUIDs is added to the plugin's Info.plist. Get from:

$ defaults read \
    /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

[2015-03-22 Sun] # Born to Run references


[2015-03-23 Mon] updated

References from reading Christopher McDougall's Born to Run:

Recipe by Megan Mignot, based on book references:

Mama Tita’s Pancakes

  • 1 ½ cups cooked brown rice
  • 1 cup coconut milk
  • 2 ripe bananas
  • 1 tablespoon honey
  • ½ cup white cornmeal
  • 2 teaspoons baking powder

[2015-03-19 Thu] # Org tips from 2015-03-18 Emacs hangout


[2015-03-22 Sun] updated

Lots of great tips in Emacs Hangout 2015-03-18. Favorites:

  • Private org drawer to prevent export:
:PRIVATE:
My super duper secret text I don't want to export.
:END:
  • C-c C-p/C-c C-n Jump over sections.
  • (setq org-hide-leading-stars t).
  • (org-bullets-mode).
  • (org-refile).
  • C-u (org-refile) jumps, no refile.
  • (helm-org-in-buffer-headings).

[2015-03-19 Thu] # Food bookmarks

[2015-03-19 Thu] # Ethiopia travel bookmarks

[2015-03-19 Thu] # China travel bookmarks


[2015-07-19 Sun] updated

[2015-03-18 Wed] # South Korea travel bookmarks

[2015-03-18 Wed] # Sharing on iOS

NSString *title = @"Sharing on iOS bookmarks.";
NSURL *url = [NSURL URLWithString:@"http://xenodium.com/#sharing-on-ios"];
UIImage *image = [UIImage imageNamed:@"beautiful-image"];

UIActivityViewController *controller =
  [[UIActivityViewController alloc]
    initWithActivityItems:@[title, url, image]
    applicationActivities:nil];

// self being a UIViewController.
[self presentViewController:controller animated:YES completion:nil];
  • Sharing through Mail app on simulator isn't supported.

viewServiceDidTerminateWithError: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "The operation couldn’t be completed. (_UIViewServiceInterfaceErrorDomain error 3.)" UserInfo=… {Message=Service Connection Interrupted}

[2015-03-18 Wed] # San Francisco travel bookmarks

[2015-03-18 Wed] # Istanbul travel bookmarks

[2015-03-17 Tue] # Italy travel bookmarks

[2015-03-17 Tue] # Emacs lisp debug on entry

Wanted to track down which package was enabling ido-mode on my behalf. debug-on-entry to the rescue. Pass the method name in question and you're good to go.

(debug-on-entry 'ido-mode)

When done, use cancel.

(cancel-debug-on-entry 'ido-mode)

[2015-03-17 Tue] # Burma travel bookmarks

[2015-03-16 Mon] # OS X Screencasts to animated GIF

[2015-03-15 Sun] # Writing Xcode plugins

defaults read \
    /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID

[2015-03-15 Sun] # Uninstalling Alcatraz from Xcode

$ rm -rf ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin
$ rm -rf ~/Library/Application\ Support/Alcatraz

ps. Removing all plugins:

$ rm -rf ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/*

[2015-03-14 Sat] # Prefill Emacs swiper with current region

The new swiper Emacs package is proving to be a great alternative to helm-swoop. Here's how to prefill with current region:

(defun ar/prefilled-swiper ()
  "Pre-fill swiper input with region."
  (interactive)
  (if (region-active-p)
      (let ((region-text (buffer-substring (region-beginning)
                                           (region-end))))
        (swiper region-text))
    (swiper)))

(global-set-key (kbd "C-s")
                #'ar/prefilled-swiper)

[2015-03-14 Sat] # Change Mac OS app icon

  • Open the new icon (.icns) in Preview.
  • Select all (⌘-a).
  • Copy (⌘-c).
  • Ctrl-click on app icon.
  • Select Get Info.
  • Click on app icon (top-left).
  • Paste (⌘-v).
  • Done!

overriding.png

after.png

[2015-03-11 Wed] # Hack on Emacs London meetup bookmarks

[2015-03-09 Mon] # Working with OS X and Emacs tips

From M-x all-things-emacs, Ryan McGeary's OS X/Emacs workflow.

Dotfiles

[2015-03-09 Mon] # Building ycmd

Build

$ git clone https://github.com/Valloric/ycmd.git
$ cd ycmd
$ git submodule update --init --recursive
$ ./build.sh --clang-completer

Test

$ python ycmd
  serving on http://127.0.0.1:54265

[2015-03-08 Sun] # Regular bookmarks

[2015-03-08 Sun] # Photography bookmarks

[2015-03-08 Sun] # Paris travel bookmarks


[2015-08-10 Mon] updated
  • Au Passage. Small plates in fun atmosphere.
  • Berthillon Ice Cream.
  • Buvette Gastrotheque. Wine bar with small dishes.
  • Cheri Bibi, possibly hipster, underneath Sacre Coeur, good cocktails.
  • Creperie Josseline. Worth the queue. Drink Breton cider with crepes.
  • Holybelly Canal Saint Martin.
  • How To Spend a Culinary Weekend In Paris.
  • L'Aller Retour. The place for steak-frites.
  • L'Office. Wine bar/bistrot.
  • Le Barav'.
  • Marché d'Aligre. Authentic neighbourhood market.
  • Marché des Enfants Rouge. Small covered market. Eat at food stalls.
  • Mosquee de Paris. City mosque. Drink mint tea at courtyard under olive trees or eat in restaurant inside. North African food.
  • Musee d'Orsay.
  • Paris: A Guide To Some Of The Best Cafes In Canal St. Martin.
  • Pierre Herme. For great pastries and macarons.
  • RATP for transport info including the "carnet" of 10 tickets.
  • Rodin Museum.

[2015-03-08 Sun] # Org mode bookmarks

[2015-03-08 Sun] # London food backlog

Hammersmith

Peckham

Soho

  • BAO (Bao buns! enough said).

Sloane Square

Tottenham Court Road.

Hammersmith

Waterloo

  • The Laughing Gravy.

[2015-03-07 Sat] # UX bookmarks

[2015-03-07 Sat] # Unix/Linux tips backlog

rsync --rsync-path=/usr/local/bin/rsync --partial \
    --progress --rsh=ssh john@host:/path/to/file path/to/partial/file

[2015-03-07 Sat] # Recipes

Tom Kha Gai soup

  • Chicken or Prawns
  • 2 kaffir lime leaves
  • 1 lemongrass stalk
  • 1 1/2 cocunut milk
  • 3/4 sliced fresh galaghal
  • 1 1/2 chicken stock or water
  • 1/2 cup mushrooms
  • 3 1/2 tbsp sugar
  • 1/2 cup of cilantro
  • 1-4 thai chillies
  • 1-2 tbsp chili oil
  • 1 green onion

Veg-Fruit juice

  • Lime
  • Ginger
  • Apple
  • Chilly
  • Celery
  • Fig
  • Blueberries

Berry Hempster

  • Hemp milk
  • Hemp protein
  • Strawberry
  • Blueberry
  • Date

How to cook Beef Chow Fun.

[2015-03-07 Sat] # Music backlog

[2015-03-06 Fri] # UX scrapbook bookmarks

[2015-03-06 Fri] # Travel bookmarks

[2015-03-06 Fri] # Startup bookmarks


[2015-08-23 Sun] updated

[2015-03-06 Fri] # Romania travel bookmarks

[2015-03-06 Fri] # Productivity bookmarks

[2015-03-06 Fri] # Privacy bookmarks

[2015-03-06 Fri] # Mindfulness bookmarks

[2015-03-06 Fri] # Lifestyle bookmarks


[2015-05-25 Mon] updated

[2015-03-06 Fri] # iOS imaging bookmarks

[2015-03-06 Fri] # Graphics bookmarks

[2015-03-06 Fri] # Go bookmarks

[2015-03-06 Fri] # GitHub

[2015-03-06 Fri] # Courses bookmarks

[2015-03-05 Thu] # Reload inputrc

Reload .iputrc from bash prompt: C-x C-r. More at bashref manual.

[2015-03-05 Thu] # Learning Emacs lisp


[2015-04-13 Mon] updated
  • Use nreverse and nconc to operate on lists in-place.
  • Set buffer local variables:
(setq-local my-clever-var)
  • Execute before saving buffer:
(add-hook 'write-file-hooks
          (lambda ()
            (message "about to save!")))
  • Possibly use to start processes and send file content:
(make-comint NAME PROGRAM &optional STARTFILE &rest SWITCHES)
  • Creating markers:
(setq my-marker (copy-marker (point)))
  #<marker at 10251 in *ielm*>

(marker-buffer my-marker)
  #<buffer *ielm*>

(marker-position my-marker)
  10251 (#o24013, #x280b, ?⠋)
  • Get org heading at point:
(org-get-heading 'no-tags 'no-todo)
  • Remove string text properties. From manual:

(substring-no-properties STRING &optional FROM TO)

Return a substring of STRING, without text properties. It starts at index FROM and ends before TO. TO may be nil or omitted; then the substring runs to the end of STRING. If FROM is nil or omitted, the substring starts at the beginning of STRING. If FROM or TO is negative, it counts from the end.

  • Skip org entry metadata/drawers:
(org-end-of-meta-data-and-drawers)
  • Random access to org entry using id (or CUSTOM_ID):
(org-open-link-from-string "[[#%exciting-custom-id]]")
  • Go to where the function is defined.
  • Press C-u C-M-x. Edebug breakpoint for function.
  • Invoke function in question.
  • n/c will get you around.
  • q when done.
  • Pretty printing objects:
(let ((my-var (list "val1"
                    "val2"
                    "val3")))
  (pp-to-string my-var))
  • Search and/or replace in curent buffer:
(re-search-forward "needle"
                   nil t)
(match-beginning 0) ;; Start location of match from last search.
(match-end 0) ;; End location of match from last search.
(replace-match "love")

;; needle-in-haystack
  • Restrict buffer editing to a region:
(narrow-to-region (point)
                  (point-max))
  • Restore restriction:
(save-restriction (narrow-to-region (point)
                                    (point-max))
  • Restore point, mark, and current buffer:
(save-excursion (goto-char (point-max))
                (insert "Hello elisp."))
  • Concatenating strings:
(concat "Hello " "elisp " "world.")
  • Grabbing thing at point:
(thing-at-point 'word)
(thing-at-point 'symbol)
(thing-at-point 'line)
  • Unit test with ert.
  • Basic iteration with dolist:
(dolist (v '("a" "b" "c"))
  (print v))
  • Output to other buffer:
(with-current-buffer (get-buffer-create "*some buffer*")
  (princ '(some list to print)
         (current-buffer)))
  • For a temporary buffer, use with-temp-buffer:
(with-temp-buffer
  (insert "abc")
  (point))
  • Cons cells bookmark.
  • Check for substring:
(string-match-p REGEXP STRING &optional START)
  • Matching substrings and accessing groups:
(setq haystack "Always click [[http://reddit.com/r/emacs][here]].")
(setq needle-re "\\[\\[\\(.*\\)]\\[\\(.*\\)]]")
  "\\[\\[\\(.*\\)]\\[\\(.*\\)]]"

(string-match needle-re haystack)
  13 (#o15, #xd, ?\C-m)

(match-string 0 haystack)
  "[[http://reddit.com/r/emacs][here]]"

(match-string 1 haystack)
  "http://reddit.com/r/emacs"

(match-string 2 haystack)
  "here"
  • Return argument unchanged (noop):
(identity ARG)
  • Org insert today's timestamp
(org-insert-time-stamp (current-time))
(car LIST)
  • All but first element
(cdr LIST)
  • Add NEWELT to front of PLACE
(push NEWELT PLACE)
  • Invoke 'FUNCTION for each in SEQUENCE
(mapcar FUNCTION SEQUENCE)
  • Search/replace
(while (search-forward "Hello")
  (replace-match "Bonjour"))
  • Save to kill ring = copy.
  • Point = cursor position.
  • Mark = a buffer position.
  • Kill = cut text.
  • Yank = paste.
  • Buffer:File = 1:1.
  • Window:Buffer = 1:1.
  • Frame:Window = 1:many.
  • Font lock = syntax highlighting.

[2015-03-05 Thu] # iOS bookmarks


[2015-08-22 Sat] updated

[2015-03-05 Thu] # India travel bookmarks

[2015-03-05 thu] # git bookmarks

[2015-03-04 wed] # language learning bookmarks

[2015-02-18 wed] # git conflict resolution déjà vu?

use git rerere. here's a post.

[2015-01-17 sat] # graphics design tools

[2015-04-23 thu] # emacs key bindings and maps

based on masteringemacs.org.

bonus tip

prefix key, followed by c-h, lists keys in prefix.

keymap

maps key to action.

keymap found in buffer and most major modes.

keys

  • undefined: self explanatory.
  • prefix key: ie. c-x (part of complete key).
  • complete key: complete input executes associated command.

mapping

  • (define-key keymap key def): add to current buffer map.
  • (local-set-key key command): add to active buffer (no map option).
  • (local-unset-key key)
  • (global-set-key key command): add to global keymap (all buffers).
  • (global-unset-key key)

key codes

  • kbd: macro transaltes human-readable key to emacs readable.
  • function and navigation keys must be surrounded by <>.
  • example: (kbd "c-c p") or (kbd "<f8>") of (kbd "<down>").

remapping

  • use remap to replace mapping (ie. kill-line with my/kill-line).
  • (define-key keymap [remap original-function] 'my-own-function).

reserved keys

  • "c-c ?" generally reserved for you, but third party packages use it.
  • function keys (ie. f1-f12).
  • hyper and super (ancient).

lookup order

  • in a nutshell: minor mode keys, local keys, global keys.
  • full order:
    1. overriding-terminal-local-map: terminal-specific key binds.
    2. overriding-local-map: override all other local keymaps (avoid if possible).
    3. char property at point: useful for yasnippet.
    4. emulation-mode-map-alists: advanced multi-mode keymap.
    5. minor-mode-overriding-map-alist: minor modes in major modes.
    6. minor-mode-map-alist: as previous (preferred for minor modes) <–—
    7. current-local-map: buffers current local map.
    8. current-global-map: last place to look (ie. global).

mode hooks

  • (local-set-key (kbd "c-c q") 'my-awesome-method)) in hook-method.
  • for key-chord-define, use current-local-map.

[2014-12-30 tue] # video backlog

TODO Graham Hancock – The War on Consciousness.

TODO Nick Hanauer – Rich People Don’t Create Jobs.

TODO Rupert Sheldrake – The Science of Delusion.

TODO Griefwalker.

DONE Hold Fast.

[2014-12-30 tue] # travel gear

[2014-12-30 tue] # movie backlog

  • akira kurosawa director.
  • awake, the life of yogananda.
  • babadook.
  • birdmane.
  • boyhood.
  • enter the void, by gaspar noe
  • four horsemen.
  • hirokazu koreeda director.
  • naomi kawaze director.
  • nostalghia
  • sion sono director.
  • solyaris
  • stalker
  • takashi kitano director.
  • takashi miike director.
  • the connection.
  • the mirror
  • uncle boonmee who can recall his past lives, by apichatpong weerasethakul.
  • waking life, by rickard linklater.

[2014-12-30 tue] # books backlog

[2014-12-29 mon] # spotted

[2014-12-03 wed] # Emacs tips backlog

delete-duplicate-lines

Delete all but one copy of any identical lines in the region. Duplicates may or may not be adjacent.

artbollocks-mode and writegood

Both help avoid writing pitfalls. More at Sacha's post.

org-multiple-keymap

A minor-mode to apply different keymaps per org element. More at org-multiple-keymap.el.

org-ioslide

create presentations in org and export via org-ioslide.

yasnippet mirrors with transformations

for example:

- (${1:id})${2:foo}
{
    return $2;
}

- (void)set${2:$(capitalize yas-text)}:($1)avalue
{
    [$2 autorelease];
    $2 = [avalue retain];
}
$0

more at snippet development.

symon

Graphical system monitor. See symon.

elmacro

elmacro shows keyboard macros or latest interactive commands as emacs lisp.

weather package

monitor clipboard and automatically paste to buffer

see clipmon.

try out stock-ticker

try out ibuffer-vc

sort python imports

see pyimpsort.

private configuration

see private package.

unify mechanism to open files

export ascii art

with artist mode + ditaa for uml. demo video.

speed up window handling

see ace-window.

mac os clipboard support (from terminal)

see pbcopy.

speedtype

see speedtype.

jumping around tips

see zerokspot.

use-package post

at lunaryorn.

static blog

see org-page.

youtube-dl for emacs

see or emacs.

clang indexing tool

see clang-tags.

project management for c/c++

see malinka.

git modes

see git-modes.

lots of org links

found at dain.io.

create custom theme

see trường's post.

gtd emacs workflow

see charles cave's notes.

simplify file transformations

see make-it-so.

lisp editing

see lispy.

continue comment blocks

m-j (indent-new-comment-line).

o(1) link jump

see ace-link.

choosing magit repo

c-u c-x g (magit-status).

project templates

see skeletor.

melpa recipe format

see format.

naturaldocs for javascript in emacs

see vineet's post. ===== At lunaryorn.

Static blog

See org-page.

youtube-dl for Emacs

See Or emacs.

Clang indexing tool

See clang-tags.

Project management for C/C++

See Malinka.

Git modes

See git-modes.

Lots of org links

Found at dain.io.

Create custom theme

See Trường's post.

GTD Emacs workflow

See Charles Cave's notes.

Simplify file transformations

See make-it-so.

LISP editing

See lispy.

Continue comment blocks

M-j (indent-new-comment-line).

O(1) link jump

See ace-link.

Choosing magit repo

C-u C-x g (magit-status).

Project templates

See Skeletor.

Melpa recipe format

See format.

NaturalDocs for JavaScript in Emacs

checkdoc

checks buffer for doc strings file errors.

toggling key bingings

squashing commits with magit

see post.

editing colors

see kurecolor.

hide lines longer than

export org to reveal.js

see org-reveal.

beautify org

org-beautify-theme: a sub-theme to make org-mode more beautiful.

minimalist appearance

see minimal.

want buffer local cursor color?

see ccc.

narrowing regions

  • c-x n n (narrow-to-region).
  • c-x n w (widen).

linux system-wide emacs keybindings

org protocol

Editing XML?

Try out nxml-mode.

Move by parens

For example, C-M-u moves backward out of one level of parentheses. More at the manual.

Debug expanded elisp macros

See Wisdom and Wonder's post.

Working with Java

Describe bindings

  • C-h b lists all bindings.
  • Narrow down with occurr or Helm!

Shell commands

  • C-u M-! (inline shell-command).
  • C-u M-| (shell-command-on-region).

Search manuals

  • info-apropos (lookup subject in all manuals).
  • emacs-index-search (lookup subject in Emacs manual).

Recursive query/replace

  • M-x find-dired RET.
  • Navigate to location, RET.
  • Add find argument (omit for all files), RET.
  • t (select all).
  • Q (query-replace).
  • Enter search/replace terms.
  • y/n for each match.
  • C-x s ! (save all).

Disable furniture

(menu-bar-mode -1)
(toggle-scroll-bar -1)
(tool-bar-mode -1)

Repeat last command

C-x z (and just z threreafter).

Replace char with a newline

  • M-x replace-string RET ; RET C-q C-j.
  • C-q (quoted-insert).
  • C-j (newline).

[2015-07-09 Thu] # Installing Emacs 24.4 on Linux

sudo apt-get install texinfo build-essential xorg-dev libgtk-3-dev libjpeg-dev libncurses5-dev libgif-dev libtiff-dev libm17n-dev libpng12-dev librsvg2-dev libotf-dev

[2015-07-09 Thu] # Installing Emacs 24.4 on Mac OX X

See Yamamoto's Mac OS X port. To install:

$ brew tap railwaycat/emacsmacport
$ brew install emacs-mac

[2014-11-02 Sun] # Xcode6 tips

Shortcuts

  • ⌘⇧o Fuzzy file search.
  • ⌘⌥j Fuzzy file search (showing in Xcode project hierarchy).
  • ⌘⇧j Show file in Xcode project hierarchy.
  • ⌘⌥0 Show/hide utility area (right panel).
  • ⌘0 Show/hide navigation area (left panel).
  • ⇧⌘Y Show/hide debug area (bottom panel).
  • Ctrli Indent selection.
  • ⌘\ Toggle breakpoint on line.
  • ⌘/ Toggle comment.
  • ⌘[1-8] Select tabs on left panel.
  • Ctrl[1-x] Select top file navigation menu items.

Xcode features

  • Snippets.
  • Templates.
  • View debugging.
  • Simctl (send files to simulator).

Plugins of interest

  • Fuzzy autocomplete.
  • Uncrustify for indentation.
  • xcs code switch expansion.
  • Org and order (for properties).

[2014-09-20 Sat] # Emacs lisp bookmarks

[2014-09-19 Fri] # Emacs bookmarks


[2015-08-22 Sat] updated

[2014-09-11 Thu] # Resetting gnome-terminal preferences

Resetting preferences

gconftool --recursive-unset /apps/gnome-terminal

Want 256 colors?

Edit .bash_profile

export TERM="screen-256color"

Ensure .bash_profile is loaded

From gnome-terminal window:

gnome-terminal
  Edit
    Profiles...
      Edit
        Title and Command
          X Run command as login shell

Solarized

Bonus: See post to get solarized on gnome-terminal.

[2014-07-14 Mon] # Java bookmarks

[2014-07-14 Mon] # HTML5 bookmarks

[2014-07-13 Sun] # Python bookmarks


[2015-08-03 Mon] updated

[2014-07-13 Sun] # Development bookmarks

[2013-11-04 Mon] # Some python idioms

  • Prefer double quotes if escaping single quotes.
  • Prefer string interpolation over join. Eg. "'%s'" % member_default.
  • Prefer double underscore for privates.
  • Prefer with statement to implicitly close file.
with open(path, 'r') as text_file:
    text = text_file.read()
  • Prefer list comprehensions to filter.
  • Prefer using separate modules over classes if only using for separation.
  • Keep in mind: "eafp vs lbyl" (ie. just let it throw).
  • Prefer exceptions over assertions.
  • Throw ValueError for wrong input.
  • Return explicit False if remaining case is always false.