Foreword : Inspired by excellent post
Initial task: creating notification every 20 minutes can be decomposed into two parts:
- create notification
- 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/.
Replicated SQLite using the Raft consensus protocol written in Go #sqlite #raft #consensus #golang
It seems, its time to start learning go
Some haskell resources recommended by @bytemyapp.
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)
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
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.