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.