2015/05/18


dufferzafar/cheat - GitHub

Cheatsheets for command line, because, you know, life is too short to read manpages.

https://github.com/dufferzafar/cheat

人生は短い。

$ go get github.com/dufferzafar/cheat

してインストール。ホームディレクトリ直下に .cheatsheets というフォルダを作り、そこに

jahendrie/cheat - GitHub
https://github.com/jahendrie/cheat

このリポジトリにある data フォルダ内のファイルをコピーすればよろし。

cheat - Create and view command-line cheatsheets.

Version: 0.5

Usage:
    cheat <command> [cheatsheet] [<args>]


Commands:
    show        Show cheats related to a command
    edit        Add/Edit a cheat
    list        List all available cheats
    config      Edit the config file
    help        Shows a list of commands or help for one command


Global Options:
    --help, -h          show help
    --version, -v       print the version


Examples:
    cheat show git              Shows git cheatsheet
    cheat show git -c 12        Copy the 12th git cheat

    cheat edit at               Edit cheatsheet named at
$ cheat edit curl

でエディタが起動するので自分で追加する事も可能。Windows 対応もしておきましたので、その内マージされるかも。

Support Windows by mattn · Pull Request #1 · dufferzafar/cheat - GitHub
https://github.com/dufferzafar/cheat/pull/1

2015/04/30


とは言っても焼き直しですが

Natural Order String Comparison

Natural Order String Comparison by Martin Pool Computer string sorting algorithms generally don't or...

http://sourcefrog.net/projects/natsort/

こにらにあった natsort を golang で焼きなおしてみました。

mattn/natural - GitHub
https://github.com/mattn/natural
package main

import (
    "fmt"
    "github.com/mattn/natural"
)

func main() {
    a := []string{
        "3",
        "1",
        "10",
        "2",
        "20",
    }
    natural.Sort(a)
    for _, s := range a {
        fmt.Println(s) // 1 2 3 10 20 
    }
}

ファイル名をソートする場合等に便利そうです。


2015/04/28


PostgreSQL だと、generate_series という集合生成関数があり、例えば

postgres=# select generate_series(1, 10) x;
 x
----
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
(10 行)

こういう連番がサックリと作れる訳なのですが、SQLite3 にはこの様な関数が用意されていません。かといって、この generate_series の為に SQLite3 拡張を作って enable_load_extension する(例: Big Sky :: SQLite で twitter のタイムラインを select する。)のはちょっと辛い。しかしながらどうしても必要な場面というのは出てきます。例えば FizzBuzz とか FizzBuzz とか、あと FizzBuzz なんかでも必要ですね。

そういう場合に使えるのが with recursive です。

SQLite Query Language: WITH clause

A recursive common table expression can be used to write a query that walks a tree or graph

https://www.sqlite.org/lang_with.html#recursivecte

これを使うと、通常の SQL 文に再帰属性を付与する事が出来ます。

with recursive
generate_series(x) as (
 select 1
 union all
 select x+1 from generate_series limit 12
select x from generate_series;

関数的としても扱えませんし、少し面倒臭いですが無いよりはマシです。

これを使えば FizzBuzz も簡単。

with recursive
generate_series(x) as (
 select 1
 union all
 select x+1 from generate_series limit 100
select
  case 
  when 0 = x % 15 
  then 'FizzBuzz' 
  when 0 = x % 5 
  then 'Buzz' 
  when 0 = x % 3 
  then 'Fizz' 
  else ''||x
  end
from
  generate_series

SQL Fiddle による実行結果 でもちゃんと動いています。便利ですね。