Stand up every 20 minutes (mac os)

Foreword : Inspired by excellent post

Initial task: creating notification every 20 minutes can be decomposed into two parts:

  1. create notification
  2. scheduled launch

First subtask can be solved using this trivial script.

standup.sh:

#!/bin/sh

# stand up notification

osascript -e 'display notification "Stand up" with title "Healthy programmer"'

say "Stand up"

Second subtask (scheduled launch) can be solved using: daemon and agent mechanism.

Create file: com.example.stand.up.plist and place it into ~/Library/LaunchAgents/.

Find the length of the loop

One of the popular interivew tasks…

You are given a head of a linked list. Its known list contains cycle. The goal is to determine the length of the loop.

Here is straghtforward solution in haskell

{-
data Node a
instance Eq a => Eq (Node a)

next :: Node a -> Node a
-}

data Phase = TryFindLoop | FindLength deriving (Eq)

loopSize :: Eq a => Node a -> Int
loopSize a = slowAndFast a a 0 TryFindLoop
  where slowAndFast :: (Eq node) =>
                       Node node -> Node node -> Int -> Phase -> Int
        slowAndFast slow fast len phase =
          let nextSlow = next slow
              nextPreFast = next fast
              nextFast = next nextPreFast in
          if (slow == nextPreFast || slow == nextFast) then
            if (phase == FindLength) then
              if (nextPreFast == nextFast) then 1
              else
                2*(len+1) - len - (if slow == nextFast then 0 else 1)
            else slowAndFast nextSlow nextSlow 0 FindLength
          else
            slowAndFast nextSlow nextFast (len + 1) phase

Complexity: time o(n), memory o(1)

Run automation instruments script from the command line

To run ui test from command line you can use instruments app as described here.

  instruments -w deviceID -t defaultTemplateFilePath targetAppName \
  -e UIASCRIPT scriptFilePath -e UIARESULTSPATH resultsFolderPath

The problem is defaultTemplateFilePath depends on xcode version. Documentation says Automation.tracetemplate is located here :

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate

Since xcode 6 Automation.tracetemplate can be found:

/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate

Multi-queue replacement algorithm for second level buffer caches

I have read a nice article written by Yuanyian Zhou and James F. Philbin “Multi-queue replacement algorithm for second level buffer caches”. Authors compares well known implementations LRU, MRU, LFU etc and introduces new, more efficient method based on multiple queues, which performs better than other described implementations.
I highly recommend to read it.

List non latin file names in git

Imagine you have commited file which name contain non latin letters.

git init test-repo
cd test-repo

echo "test" > тест.тэхэтэ
git add .
git commit -m "initial commit"

Ok, lets list files changed at revision

git log -p

Here you can see escaped file name, and obvious its hard to read.

diff --git "a/\321\202\320\265\321\201\321\202.\321\202\321\215\321\205\321\215\
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ "b/\321\202\320\265\321\201\321\202.\321\202\321\215\321\205\321\215\321\202
@@ -0,0 +1 @@
+test

To handle this case there is config options ‘core.quotepath’ The documentations (man git-config 1) says: