Replicated SQLite using the Raft consensus protocol written in Go #sqlite #raft #consensus #golang
It seems, its time to start learning go
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.
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:
Sometimes (more precisely - rarely) you need to export files changed at given revision as directory tree instead of patch file.
Mercurial vcs has archive command which let you to export selected files at given revision:
hg archive --type files --rev $REVISION -I list_of_files
To list files changed at revision:
hg log -r $REVISION --template '{files}\n' | sed 's/\n / -I /g'
Here end of line character is used to handle the case of using space character in filename.