ごらくらいふ

プログラミングしたりゲームしたり

続・リリースするファイルに対応したバックアップを作る

↓この処理をシェルスクリプトにした。 yajamon.hatenablog.com

#!/bin/bash

src=$1
dest=$2
backup=$3

# backupのパスがファイルなら終了
if [ -f $backup ] ; then
    echo "\$backup is file"
    exit 1
fi

# srcと同じディレクトリ構造のbackupディレクトリを作る
if [ ! -e $backup ] ; then
    echo "make directory: $backup"
    mkdir $backup
    echo "create: "$(cd $backup; pwd)
fi

# 続行するか念のために確認
echo "   src: $src"
echo "  dest: $dest"
echo "backup: $backup"
while [ "$goSign" = "" ]
do
    echo "execute ok? (yes/no)"
    read goSign
done

if [ $goSign != "yes" ] ; then
    echo "abort"
    exit 1
fi

cp -rv $src/* $backup/
echo "clean to $backup"
find $backup -type f -exec rm -v {} \;

# src内のファイルパスをもとに、destからbackupへコピーする
for item in $(find ${src} -type f | sed -e "s/^${src}//g")
do
    cp -v $dest$item $backup$item
done

feedlyでニコニコ動画のマイリストRSSを監視して新着を逃さないようにした

おれ しった かく。

マイリストの新着管理

  • プレイ動画とかシリーズ物の追跡をしたい。
  • RSS配信が生きてるらしいのでfeedlyに登録する。

chrome拡張入れると画面右下にボタン追加されて登録が楽。 chrome.google.com

手順

  1. 追跡したいマイリストを開く
    • f:id:yajamon:20160610190328p:plain
  2. feedly拡張をポチッとして登録する
    • f:id:yajamon:20160610190415p:plain
  3. 新着を待つ

手軽。

手軽だわ。どれブラウザから試しにひとつ…

f:id:yajamon:20160610191236p:plain

f:id:yajamon:20160610191553g:plain

ワンクッションおいて解決

IFTTTでSlackに流し込んで解決した。

togglを三日坊主する

こういう脇道をせずにそのまま仕事をすればそのまま成果になるだろうに、逸れちゃうんだな、これが。

time tracking web service "toggl"を、とりあえず三日坊主する。

また三日坊主するときのために書き方まとめ。

何を記入するか

タスク

  • 行動のタイトルをサッと書く。

プロジェクト

  • プロジェクト名が明確ならそのまま書く
  • プロジェクト名が無いようなタスクの場合
    • 飯を食うとか風呂とか→生活→Life
    • アニメを見る→期毎に分けてもいい→Anime-YYYY-春

アルファベット表記を使えるなら使う。フィルタかけるのが楽になるから。

クライアント
  • 自社のプロジェクト→自社とわかるやつ
  • 他者のプロジェクト→他社とわかるやつ
  • 自分用→Me

タグ

  • すきなように

iPadでdvorak jpほしい

f:id:yajamon:20160419210359p:plain

無いから作ってる。

とりあえずアルファベット直輸入と末梢できるようにしたよ。

f:id:yajamon:20160419210541p:plain

f:id:yajamon:20160419210640p:plain

ハハッワロス

入力中の文字列をinputAccessoryViewに表示したいけど、UITextViewとか入力先が保持してるパターンの資料しか見つかってないので辛い。

ローマ字テーブルも作らなきゃ

プログラムする前にペーパークラフトするのは

先日、すごくためになりそうなツイートを見た。

最近、マルバツゲームを元にBDDやってみようと始めたところ、無計画ゆえに案の定停滞してしまった。 ここはひとつ有能な人の手法を利用しようと思った次第。

yajamon.hatenablog.com

手探り状態のとき

マルバツゲームは空いてるマスにマルとバツを埋めていくゲームだ。

マスが3x3に集まったものをFieldとして定義したは良いものの、 肝心のマスがどうあればマルで、どうあればバツとするかの定義に迷ってしまった。

そこで書いたコードが以下である。

enum SQUARE_STATE {
    EMPTY,
    CIRCLE,
    CROSS,
}
class Square {
    state:SQUARE_STATE;
}

目前の書きかけのコードとぼんやりとした想像だけで進めた結果、こういうコードを書いてしまう。

これを元に動作を実装すると以下のような感じだろうか。

class Game {
    field;
    setState(x, y){
        var state = this.getSide(); // CIRCLE or CROSS
        this.field.setSquareState(x, y, state);
    }
    setSquareState(x, y, state){
        this.field.getSquare(x, y).set(state);
    }
}

規模が小さいのでまあ別に…って気もする。が、なんだかGameがSquareにべったりな気がして落ち着かない。

とにかくクラフトだ

f:id:yajamon:20160404181033j:plain

f:id:yajamon:20160404175724j:plain

作ってみた。

見えてくる設計

ざっくり作ってみるだけでも、これは設計のポイントじゃないか、と思えるものがいくつか見えてきた。

  1. マル・バツはマス目の状態じゃなく、マス目に置けるものに見えた
    • Puttableというinterfaceが見えた
      • (置くものであることを表現したいので英語力ください)
      • (Pieceが適切?)
    • マス目の状態は"置いてある"か"置いていないか"の2つ
  2. マスを1つ埋めるとき、GameやFieldが直接マル・バツを意識しなくてもいい
    • マスを埋めるモノを持っているのはプレイヤー
      • Playerというclassが見えた
    • ゲーム開始時に、2人のプレイヤーにマル、バツを配り、Gameは誰の手番か管理するほうが自然

if設計

紙を自由に動かせるので、違うパターンをすぐに試せるの便利だった。

プレイヤーは1人では

f:id:yajamon:20160404182739j:plain

操作するのは結局Webページを開いている1人と考えると、別にマル・バツを配らずに、 ゲーム管理クラス側で管理してもいいんじゃないか。と考えた場合。

マス目クリック時にgame.put(x, y)と呼ぶだけで済みそう。 そのかわり「今操作するとマル(バツ)を置く」ことを明示したほうがいい。ということが見えた。

最初のコードにそってマス目をクラフトしてみる

f:id:yajamon:20160404183301j:plain

「マス目が状態を切り替える」ってつまりこういう事では。 大した作業じゃないけど、微妙にめんどくさかった。

クラフトする時点でめんどくさいのだから、コードにしてもめんどくさいんじゃないかな。

所感・その後

ペーパークラフト最強では。そりゃあ有能な人が使うわけだ。 有能に近づきたい。

現在は「ゲームルール」という「概念」をクラフトなりBDDなりに落としこむ方法を考え中。

ターミナルからプロビジョニングプロファイルのUUIDを確認する

コマンドラインを使ってDeveloper Centerから落としたプロビジョニングプロファイルのUUIDを確認したかった。

security cms -D -i your.mobileprovision | grep UUID -A 1

参考URL

iOS 開発で使用する証明書、プロビジョニングプロファイルの内容を確認する方法 | moonxseed

共通のキーワードを持つファイルたちをBashで一括置換リネームする

記事タイトルの通り、共通のキーワードを持つファイルたちを一括でリネームしたい状況になった。

たとえば

  • デザイナと image_yyyymmdd_{s,m,l}というファイル名でやり取りしてるが、最終的にはyyyymmddが不要とか、キーワードに置換するとか
  • app.yyyymmdd.log の日付部分を消したいとか

bashには置換する変数展開がある

item="a findString."
echo ${item/findString/replaceString} # a replaceString.

例に適用する

ls
# image_yyyymmdd_s.jpg image_yyyymmdd_m.jpg image_yyyymmdd_l.jpg

for item in $(ls)
do
    mv -v $item ${item//yyyymmdd/00000000}
done
ls
# app.yyyymmdd.log debug.yyyymmdd.log error.yyyymmdd.log

for item in $(ls)
do
    mv -v $item ${item//.yyyymmdd/}
done

参考

d.hatena.ne.jp