#!/bin/bash # 時刻を引数で指定されなかった場合に、現在時刻から前日の日付と今日の日付を取得する # # 日付を取得するのであれば `date` コマンドを使うのがよいのだけれど、 # オプションに差があるので使い慣れた Ruby に逃げた。 # # | 系統 | コマンド | # |------|-------------------------------| # | GNU | `date -d '1 day ago' +%Y%m%d` | # | BSD | `date -v-1d +%Y%m%d` | if [ "$1" = "" ]; then START_TIME=$(ruby -e 'puts (Time.now - 24 * 60 * 60).strftime("%Y/%m/%d 06:00")') END_TIME=$(ruby -e 'puts Time.now.strftime("%Y/%m/%d 06:00")') else START_TIME=$1 END_TIME=$2 fi echo start $START_TIME echo end $END_TIME
Io FizzBuzz
昨日のFizzBuzz のつづき。
再掲。
久しぶりに Io でコードを書いたら、すっかり作法を忘れてしまっていることに気がつきました。if 文の書き方、期待する動きになるように書けたはいいのだけれど、こんな書き方でよかったのか未だにこころもとない。
Number fizz := method( if(self % 3 == 0, result := "Fizz" result n := self result, self ) ) Number buzz := method( if(self % 5 == 0, result := "Buzz" result n := self result, self ) ) Sequence fizz := method( if(self n % 3 == 0, result := self .. "Fizz" result n := self n result, self ) ) Sequence buzz := method( if(self n % 5 == 0, result := self .. "Buzz" result n := self n result, self ) ) 1 fizz println 2 fizz println 3 fizz println 5 fizz println 9 fizz println 10 fizz println 12 fizz println 15 fizz println "---" println 1 buzz println 2 buzz println 3 buzz println 5 buzz println 9 buzz println 10 buzz println 12 buzz println 15 buzz println "---" println 1 fizz buzz println 2 fizz buzz println 3 fizz buzz println 5 fizz buzz println 9 fizz buzz println 10 fizz buzz println 12 fizz buzz println 15 fizz buzz println "---" println 1 buzz fizz println 2 buzz fizz println 3 buzz fizz println 5 buzz fizz println 9 buzz fizz println 10 buzz fizz println 12 buzz fizz println 15 buzz fizz println
実行。
$ io fizzbuzz.io 1 2 Fizz 5 Fizz 10 Fizz Fizz --- 1 2 3 Buzz 9 Buzz 12 Buzz --- 1 2 Fizz Buzz Fizz Buzz Fizz FizzBuzz --- 1 2 Fizz Buzz Fizz Buzz Fizz BuzzFizz
Ruby や Io でならば簡単に実現できるこの FizzBuzz。簡単に実現できるその特徴とは。
いつか読むはずっと読まない:へびつかい座
汝、コンピューターの夢 (〈八世界〉全短編1) (創元SF文庫)
- 作者: ジョン・ヴァーリイ,山岸真,大野万紀
- 出版社/メーカー: 東京創元社
- 発売日: 2015/10/11
- メディア: 文庫
- この商品を含むブログ (9件) を見る
さようなら、ロビンソン・クルーソー (〈八世界〉全短編2) (創元SF文庫)
- 作者: ジョン・ヴァーリイ,浅倉久志,大野万紀
- 出版社/メーカー: 東京創元社
- 発売日: 2016/02/21
- メディア: 文庫
- この商品を含むブログ (6件) を見る
読んで真っ先に思い出した作品がこれでした。
あるいはグレッグ・イーガン。
解説にも、 「アイデンティティを揺るがせ、人間の定義を変容させていく行為が日常化した〈八世界〉は、サイバーパンクやグレッグ・イーガン作品などの先駆に位置づけられるだろう」 とあり、ギミックは多少時代が感じられるものの、その物語は1970年代に書かれたとは思えない強烈さがあります。
C++で整数値を返したり文字列を返したりする
#include <string> #include <iostream> template<int N, bool is_string> struct this_is_a_int_or_string; template<int N> struct this_is_a_int_or_string<N, false> { typedef int value_type; static const value_type value = N; }; template<int N> struct this_is_a_int_or_string<N, true> { typedef std::string value_type; static const value_type value; }; template<int N> const typename this_is_a_int_or_string<N, true>::value_type this_is_a_int_or_string<N, true>::value = "Fizz"; template<int N> struct Fizz { typedef typename this_is_a_int_or_string<N, (N % 3) == 0>::value_type value_type; static const value_type value; }; template<int N> const typename Fizz<N>::value_type Fizz<N>::value = this_is_a_int_or_string<N, (N % 3) == 0>::value; template<typename T> std::string this_is(T); template<> std::string this_is(int n) { return "int"; } template<> std::string this_is(std::string s) { return "string"; } int main(int, char* []) { std::cout << Fizz<1>::value << " is " << this_is(Fizz<1>::value) << std::endl; std::cout << Fizz<2>::value << " is " << this_is(Fizz<2>::value) << std::endl; std::cout << Fizz<3>::value << " is " << this_is(Fizz<3>::value) << std::endl; std::cout << Fizz<4>::value << " is " << this_is(Fizz<4>::value) << std::endl; return 0; }
実行。
$ g++ -o this_is_a_int_or_string this_is_a_int_or_string.cpp $ ./this_is_a_int_or_string 1 is int 2 is int Fizz is string 4 is int
同じ Fizz<N>::value
という形でありながら、N
の値によって value
の値が整数値であったり文字列であったりします。
「FizzBuzzクイズ」の実現方法について @Nabetani さんと C++ で書ける書けないという話をした中で、「template でならできるかも」という流れになったので、書いてみました、途中まで。
本当はもう少し先まで書いたのですが…思うところがあって力尽きてしまいました。
「思うところ」は、また後ほど。
いつか読むはずっと読まない:クロニクル
主人公は少女の姿のおばあちゃん!? 鬼才が贈る、異星に入植した新しい地球人(とネコ)たちの物語!
— 島田一志 (@kazzshi69) 2017年10月7日
佐藤明機先生の描き下ろしコミックス『パラダイスバード・クロニクル』10月末頃発売!
『パラダイスバード』の続編というよりは、佐藤版『火星年代記』のようなお話になってます。たぶん…。 pic.twitter.com/ltPIy7GL5j
ということなので。
- 作者: レイブラッドベリ,Ray Bradbury,小笠原豊樹
- 出版社/メーカー: 早川書房
- 発売日: 2010/07/10
- メディア: 文庫
- 購入: 11人 クリック: 104回
- この商品を含むブログ (53件) を見る
- 作者: 佐藤明機
- 出版社/メーカー: 駒草出版
- 発売日: 2017/11/01
- メディア: 単行本
- この商品を含むブログ (1件) を見る
主人公は少女の姿のおばあちゃん!? 鬼才が贈る、異星に入植した新しい地球人(とネコ)たちの物語!
— 島田一志 (@kazzshi69) 2017年10月7日
佐藤明機『パラダイスバード・クロニクル』10月末発売!
写真は今回の主人公・国花さん(こう見えて70ン歳)の佐藤明機先生お手製フィギュア。先生撮影による写真を口絵にも載せました~。 pic.twitter.com/PuxmOVRWfo
gzip と標準入出力
標準入力の内容を圧縮ファイルに保存したい。
$ cat foo.txt | gzip -c > foo.txt.gz
圧縮ファイルを展開したイメージを標準出力に出力したい。
$ gzip -dc foo.txt.gz
もっとよい方法があるかもしれない。勉強します。
備忘録:aws-sdk gem を使って AWS S3 にファイルをアップロードする
require 'aws-sdk' client = Aws::S3::Client.new( access_key_id: 'your-aws-access-key-id', secret_access_key: 'your-aws-secret-access-key', region: 'your-region') client.put_object( bucket: 'target-backet-name', key: 'sample.txt', body: File.read('path/to/local/sample.txt'))
Elixir の OptionParser.parse はハイフンをアンダスコアに置き換える
OptionParser.parse(["--show-all"], [switches: [show_all: :boolean]]) # => {[show_all: true], [], []} OptionParser.parse(["--show_all"], [switches: [show_all: :boolean]]) # => {[], [], [{"--show_all", nil}]}
Elixir converts switches to underscored atoms, so
--source-path
becomes:source_path
.
備忘録:ファイルの存在確認
#!/bin/bash for f in $*; do if [ -f $f ]; then echo "file '$f' IS EXISTS" elif [ -d $f ]; then echo "'$f' IS DIRECTORY" else echo "'$f' IS NOT EXISTS" fi done