Problem 5 - Project Eular

這是在前幾天寫的,算是沒有想這麼多,只是單純想要用 haskell 解決一個小問題而己。寫程式的感覺出乎意外的好,或許不用考慮太多邊寫邊練習才有辦法寫出 haskell program 吧我想 XD。

import qualified Data.Map as Map

-- The answer for Problem 5
smallestMultiple :: Integer -> Integer
smallestMultiple n = Map.foldWithKey (\k v sm-> sm * (power k v)) 1 (numFactorMapList n)

numFactorMapList :: Integer -> Map.Map Integer Integer
numFactorMapList n = foldr mergeMap (Map.fromList []) (map numFactorMap [2..n])

mergeMap :: Map.Map Integer Integer -> Map.Map Integer Integer -> Map.Map Integer Integer
mergeMap = Map.unionWithKey (\k v1 v2-> if v1 > v2 then v1 else v2)

numFactorMap :: Integer -> Map.Map Integer Integer
numFactorMap = flip get_num_factor_map $ (Map.fromList [])


get_num_factor_map :: Integer -> Map.Map Integer Integer -> Map.Map Integer Integer
get_num_factor_map 0 m = m
get_num_factor_map 1 m = m
get_num_factor_map n m =
    if Map.member factor m then
        get_num_factor_map next_n (updateValue m)
    else
        get_num_factor_map next_n (insertValue m)
    where next_n = quot n factor
          factor = getFirstFactor n
          insertValue m = Map.insert factor 1 m
          updateValue m = snd $ Map.updateLookupWithKey (\k v-> if k == factor then Just (v+1) else Nothing) factor m

getFirstFactor :: Integer -> Integer
getFirstFactor = flip get_first_factor $ 2

get_first_factor :: Integer -> Integer -> Integer
get_first_factor 0 _ = 0
get_first_factor 1 _ = 1
get_first_factor 2 _ = 2
get_first_factor n p = if n `mod` p == 0 then p else get_first_factor n (p+1)

power _ 0 = 1
power 0 _ = 0
power x n  = let sqr k = k * k
                 half_n = n `div` 2
                 sqrHalfPower = sqr ( power x half_n )
             in if even n then sqrHalfPower else x * sqrHalfPower

Comments

How to trace code in Mac OSX

本文僅僅只是工具備忘。

Overview

在 Mac OSX/ Linux 上 Trace code 的方法目前有想到這些,如果有其他方式歡迎補充。

  1. Install IDE and import the whole project (ex: XCode, Eclipse)
  2. Use ctags and cscope in text editor
  3. Use global, CodeViz, doxygen

ctags and cscope

Install ctags and cscope

  1. Install homebrew
  2. Install ctags and cscope
brew update
brew install ctags cscope

Using ctags and cscope with Vim

(待補)

Using ctags and cscope with Sublime Text 3

  1. Install ctags and cscope first
  2. Please install ctags plugin (install guide)
  3. open your folder and rebuild all tags
  4. Start to trace code.

Global

  1. install global first
brew install global
  1. enter the source code dictionary and type
htags -Ffnsa 

Comments

murmur(1) - 關於工作完回家的學習

上班也一個月又一個禮拜了,好快,但是覺得自己這樣子下去會毫無改變,所以決定開始上 Machine Learning | Coursera,想要從中找到一些有趣的事。但是說穿了是想要給自己壓力,做出一些改變就是了。

原本自己只看到了 I. Introduction ,覺得第一個禮拜原來只要看 30 分鐘的影片兼複習就好了,但是我忘了往下拉 ... XD 還有很多多影片等著我看與學習,外加自己的英文從來沒好過。現在開始真的覺得自己有所壓力了。

不過另外要體認的一點就是,工作完回來很累了,最近的我又迷上看 White Collar (某學長推坑成功),有很多的理由讓自己不要看 ML 影片,但是要努力也只需要一個理由就夠了。只希望這個過程不要太勉強自己了。

但是不得不說,看 ML 影片到目前為止還蠻開心的,因為是自己從來沒有摸過的東西。另外一個額外的好處是,要找人求救似乎還找的到 XD?

管他的,先好好撐過這幾個禮拜學習就是了 XD。

自己寫了 SNPA 之後就再也不用擔心寫在 FB 上的東西被時間的洪流沖到找不到了 XD。但是文章真的一多起來,我也只能靠 find + grep 了 XDXDXD。

Comments

SNPA: save and preview without opening a new page

New Function

  • Save and preview without opening a new page. Show the page directly.
  • Add a config value to support Markdown extra.

Screen shot

  • Save

Screen Shot 2013-10-13 at 10.53.05 PM

  • Preview

Screen Shot 2013-10-13 at 10.53.01 PM

murmur

這功能看起來還好,其實很麻煩,因為把 edit 內容是使用 CodeMirror 做的,使用 jQuery 內容一直取不到最新的值,索性直接硬幹了,這部分的 code 應該會再改才是。

不過暫時不會加新功能了,應該會修正兩個錯誤就出 v0.1 了。

終於可以公佈了,開心 XD。

Comments

Flask + jQuery 簡單筆記

其實也沒什麼好說的,好好的看說明文件就寫的出來這樣子的東西。只是會這個東西就可以把 SNPA 的最後一塊拼圖拼出來 (但是要改很多東西,我好懶 XD)。先做個筆記,應該接下來的日子就會做出來了。

Comments

Sublime Text 3 初始設定

Screen Shot 2013-10-12 at 10.45.58 PM

現在真的要我推薦一個好用的編輯器,對於初學者來說我會推薦 Sublime Text,基本上算是一個很完整功能的 editor ,有不算少的 plugins 可以用,一開始比較不會像 vim 一打開之後就傻眼不知道自己有什麼功能可以用,基本功能相當完善,要進階的設定也不算太麻煩,很推薦人使用。

其實在公司用 Sublime Text 的時間還蠻多的,大部分因為使用 Plain Tasks 來處理待辦事項。且在 Windows 上開 Sublime Text 比起 Vim 快的多,所以稍微花了一點時間來研究怎麼讓 Sublime Text 的移動及使用方式很像原生的 vim (有些不像的原因是自己的 Vim 調了太多了 XD)。我裝的 plugin 不多,下面有列表

Plugins

裝 plugin 之前,先裝 Package Control,使用 ctrl + ` 貼上那一長串的文字之後按 enter,重開之後就可以使用 cmd(ctrl) + shift + p 之後輸入 install package (可以不用全部輸入完,看到就可以選了),然後輸入下列名稱就可以找的到這些套件了。

  • All Autocomplete
  • Alternate VIM Nagivation
  • cscope
  • CTags
  • FileDiffs
  • Markdown Extended
  • Markdown Preview
  • Package Control
  • PlainTasks
  • Python Auto-Complete
  • SideBarEnhancment
  • SmartMarkdown
  • Theme - Soda
  • Tomorrow Night Schemes
  • Vintageous

之後是設定檔的部分,我的設定檔還蠻簡單的,如下:

Setting

{
    "color_scheme": "Packages/Tomorrow Color Schemes/Tomorrow-Night-Bright.tmTheme",
    "font_face": "Source Code Pro",
    "font_size": 20,
    "highlight_line": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "line_numbers": true,
    "soda_classic_tabs": true,
    "soda_folder_icons": true,
    "theme": "Soda Dark 3.sublime-theme",
    "translate_tabs_to_spaces": true,
    "trim_trailing_white_space_on_save": true,
    "vintageous_use_ctrl_keys": true
}

Special for windows

因為在 Windows 上使用 Source Code Pro 為預設字體會造成中文字變成方塊,所以需要在設定檔裡面再加上

    "font_options":
    [
        "directwrite"
    ],

但是至少在 Mac OSX 千萬不要加這個,加了連 tab bar 都會變亂碼 XD。至於 linux 的話,我沒試過 XD。

PlainTasks

PlainTasks 改了一些設定,可以先按 Preference -> Package Settings -> PlainTasks -> Settings User (在 Windows 上會稍微不同) 之後貼上下面內容。

{
  "color_scheme": "Packages/Tomorrow Color Schemes/Tomorrow-Night-Bright.tmTheme",
  "font_size": 20,
  "font_face": "Source Code Pro",
  "line_numbers": true,
  "tab_size": 4,
  "fold_buttons": true,
  "spell_check": true,
  "dictionary": "Packages/Language - English/en_US.dic"
}

murmur

雖然覺得在 Windows 上用 Sublime Text 已經很順了,但是不得不說在 Mac OSX 上的感覺更勝一籌啊 ... Orz。不過都回到 Mac OSX 上了,還是用 Vim 就好,unite.vim 真的很好很強大,有點愛不釋手 XD。

Comments

使用 text editor 雜感

這些文字是因為在寫某篇時寫歪產生的 XD。

最近開始學習在 VIM 中使用 hjkl 及一些我不常用的移動方式。老實承認用 VIM 這麼多年,從來沒有在 normal mode 使用過 a 來切換至 insert mode (笑)。學會這些方式並不是自己會覺得很酷,寫程式也不會變強,更不會因為這樣子考試考了一百分,而是從中體會到一種美感,簡潔的美感。

老實說自己並不是這麼推薦一開始就使用 VIM,入門難度不算低,Sublime Text 是不錯的入門編輯軟體,該有的都有了 (VIM mode, auto-compleite, ctrlp 跳檔案),最重要的是至少在 Windows 及 Mac OSX 的啟動速度都很快。因為工作的時間常在 Windows 開啟 VIM,在自己的設定檔下,開啟約 4 秒,老實說這時間不算短,但又很喜歡開啟後自己的習慣 (使用這麼多年了~嘛),想到辦法再說嘍。但是真的要推薦一個可以重度使用的 editor,還是會推薦 VIM,原因無他,習慣了,也不會想要學習兩套的設定 。

那麼寫作呢,其實我最常用的是 iA Writer,說也神奇,這樣子的佈景,這藍色的直桿就會讓人覺得寫作好像還蠻好玩的,可能也只有我這樣子想吧(笑)。

其實上面的文字不想一直待在硬碟裡,所以硬是寫了一個結尾,現在看一看,想法真的很片段需要組織呢 XD。

Comments

Vim plugin: Unite.vim

關於 Shougo/unite.vim 沒什麼好說的,是一個用了會上癮的 plugin,用了它之後,ctrl+p 和 command-T 都可以不用了,開心 XD。

在此稍微貼上自己關於這方面的 vim 設定檔

NeoBundle 'Shougo/unite.vim'
NeoBundle 'tsukkee/unite-tag'
NeoBundle 'h1mesuke/unite-outline'
NeoBundle 'tsukkee/unite-help'
NeoBundle 'ujihisa/unite-launch'
NeoBundle 'ujihisa/unite-colorscheme'
  • 設定部分 (特別說明一點,如果要打開 windows 時為 insert mode,加入參數 -start-insert,用法可以直接看下面)
" Unite: {{{

"" ctrl-p
nmap <C-p> :Unite -start-insert file_rec/async buffer<CR>

"" shortcup
nnoremap <C-u>  :<C-u>Unite -start-insert mapping<CR>

" Execute help.
nnoremap <C-h>  :<C-u>Unite -start-insert help<CR>
" Execute help by cursor keyword.
nnoremap <silent> g<C-h>  :<C-u>UniteWithCursorWord help<CR>

" grep dictionay
nnoremap <leader>s :Unite grep:. <CR>

" outline
nnoremap <leader>o ::Unite outline<CR>

" yank history
"let g:unite_source_history_yank_enable = 1
"nnoremap <leader>y :Unite history/yank<CR>

" }}}

Comments

SNPA: new typesetting for edit page

New Function

  • New typesetiing for edit page.

Screen Shot 2013-09-30 at 8.46.02 PM

Murmur

其實原本不知道要這樣子安排版面,沒想到一試之下意外的還蠻不錯的,所以暫時這樣子吧,這樣子可以把這些必填的資訊放著不是這麼主要的地方,專注在編輯上。

出乎意外的喜歡這次自己做的東西,不過大概只有我會用吧,開心就好 (笑)。此外,用了 bootstrap 才覺得,原來工程師設計的介面也是會有春天 XD。

Comments

SNPA: syntax-hightlighting editor

New Function

  • Add syntax-hightlighting editor using CodeMirror

Murmur

加了這個功能很滿意,不過不滿意的點就是 Edit 這個版面看起來蠻醜的,很像是硬拼出來的東西,不過功能性和美觀我先選功能性,這個禮拜有空應該會把版面修一修,至少不要這麼不協調 (雖然分區來看都很漂亮就是了 XD)。

還有另外一點,為什麼 CodeMirror 的預設版型這麼小又擠,寫 code 一定要這麼自虐就對了 XD。

Comments