みつのーと

(*・ω・)ノシ

terminalでちょっとした計算をシュッとやりたい

というときに、今まではrepl使ったりアレコレしてたけど、

  • pythonのreplはexit()するときに()付けるのがめんどい
  • irbは起動がなんかちょっと遅くてめんどい
  • bcコマンド単体だとechoするのがめんどい

というのがあって、めんどかった。

ので、

というヤツを.zshrcなり.bashrcに書いておくと、

% calc "1599 * 112.48"
179855.52

とやれて便利になった。

bcコマンドなので、必要であれば変数やfor文とかも使えて便利!*1

% calc "
dquote> a = 123.45
dquote> for (i = 1; i <= 10; ++i) {
dquote>   a * i
dquote> }"
123.45
246.90
370.35
493.80
617.25
740.70
864.15
987.60
1111.05
1234.50

90日以上ブログ更新してなかったらしいので、書いた。

*1:今のところ必要になったことはない

OSXのプレビューからPDFを中綴じ印刷したくてスクリプト書いた

OSXのプレビューは、そのままだとPDFを中綴じ印刷出来ない(プリンター側が機能を提供していれば出来るらしい)。

中綴じ印刷のためだけに、別途ソフトを入れるのもアレなので、PDFをなんとかすることにした。

OSXのプレビューは、[印刷ダイアログ] > [レイアウト]から、

  • ページ数/枚(Pages per sheet): 2
  • レイアウト方向(Layout Direction): 左上 –> 右下
  • 両面(Two-Sided): 短辺とじ(Short-edged binding)

とすると、1枚あたり両面で4ページ印刷出来る。 ので、この設定で中綴じ印刷が出来るように、スクリプトでPDFのページを入れ替える。

スクリプトgithubに置いてある。

pypdf2を使っているので、インストールしてない場合は入れておく必要がある。

% pip install pypdf2


単一のスクリプトなので、スクリプトだけ落としてくればいい。

% curl https://raw.githubusercontent.com/mitsu-ksgr/pdf_saddle_stitcher_py/master/saddle_stitcher.py -O
% chmod 744 saddle_stitcher.py
% ./saddle_stitcher.py sample.pdf

とすると、中綴じ向けにページが入れ替えられたsample_saddlestich.pdfというファイルが生成される。 あとはこれをプレビューで開き、先の設定で印刷すればいい。

参考にさせて頂いたサイト:


PDF触るの初めてだったんだけど、PyPDF2がよく出来てて簡単にできた。

シンプルなAPIで使いやすくて、最初に書捨てたスクリプトは10分もかからず書けた。 (ページ数によっておかしくなる問題があったので、githubに上げるついでに修正・リファクタした)

python久しぶり過ぎてコロン付け忘れまくるなどあったけど、end書かなくて済むので良い

ローカルでdocker-composeを操作するためのGUIツール書いた

ローカルでdocker-composeを操作するための簡単なGUIツールをElectronを使って書いた。 非エンジニアの人でも気軽に開発環境をローカルで動かせるように、といった気持ちで作った。

「エンジニアが作成したdocker-composeを使って、非エンジニアの人がローカルで動作確認する」といった用途をイメージしてる。

GitHubにソースと実行ファイル(zip)を置いてある。

mitsu-ksgr/swimmy: Swimmy is simply GUI client of docker-compose built on Electron. Release ver 0.2.0 · mitsu-ksgr/swimmy

名前はスイミーにした。

で、最初に思いついたのがスイミーで、あんまり考えずそれに決めた。彼は確か群れをまとめてうんぬんしてたし、割りとそれっぽいという思いはあった。 ただ魚介に詳しくないのでスイミーが何の魚か知らないため、いらすとやさんでそれっぽい魚の画像を探してアイコンにさせて頂いた。

で、これ書きながら気付いたんだけど、体が赤いのは群れのほうでスイミーは黒だった。スイミー目だもんね。 アイコンは赤い魚にしちゃったんだけど、修正するのも面倒なので赤のままにしてある。

使い方

基本的に、開発環境のdocker-composeを操作するイメージで作っているので、scaleやconfigなんかを使うケースは考慮してない。

使い方はREADMEのUsageに書いていこうと思う。

mitsu-ksgr/swimmy: Swimmy is simply GUI client of docker-compose built on Electron.

現時点では、

  1. プロジェクトのdocker-compose.ymlを選ぶ
  2. 再生ボタンを押すとdocker-compose up
    • stop後にexitした状態の時はdocker-compose start
  3. 一時停止ボタンでdocker-compose pause
    • リピートボタンでdocker-compose unpause
  4. 更新ボタンでdocker-compose restart
  5. ゴミ箱ボタンでdocker-compose down

といった感じ。

ボタンだけだと操作方法が微妙に分かりづらく、センスの無さが滲み出てきて辛い。ので誰か助けて欲しい。 (HTML/CSS書くのだるくて、最低限のことしかやってない)

これから追加したい機能

  • migrationとかの処理をするのにdocker execで処理を実行させる何らかの仕組みを用意したい
  • ログをもうちょい見やすくしたい(現状codeタグでくくってるだけ)
  • Portsの項目からブラウザを開けるようにしたい

普通に使えるくらい機能が揃ったらver1.0.0にしたいなと思ってる。

なんで作ったか

上にも書いたけど、非エンジニアの人でも気軽に開発環境をローカルで動かせるような環境を作りたかった。

Webサービス案件に携わるようになって、デザイナーやディレクターが「ローカルの開発環境の構築が上手くいかないから、確認しながら作業出来ない!」って困ってるところを何度か目にすることがあった(デザイナーはデザインの当て込み、ディレクターは文言変更や要素の配置を試したりで、ローカルで動作させたい需要は少なくないように思うけど、他の現場だとどうなんだろ?)。

この問題そのものは、開発環境をDockerで構築することである程度対応出来ると思ってる。 ただ、コンテナ1つのプロジェクトはそうそうないのでdocker-composeを使う事になると思うんだけど、現状Kitematicがdocker-composeに対応してない(いつか対応するのかな)。

docker-composeは簡単なコマンドで操作出来るんだけども、幾つかのコマンドを覚えてターミナルを1つ立ち上げるよりも、複数のウィンドウを開いてGUIで操作するほうが性に合うってタイプの人たちも一定数いるので、そういう人たちの選択肢の一つになれば嬉しい。

取り敢えず今携わってるプロジェクトはdockerを使って開発してるので、機会があれば使ってみてもらおうと思ってる。

Electron

Electronやnode.jsにあまり詳しくなくて、moduleの書き方とかぎこちない感じがあるので、もうちょっと色々書いたりなんだりして感覚を掴みたい。 とはいえ基本的にhtmlとjs書くだけなので、"取り敢えず動かす"ってとこまですぐにいけるのは、書いてて気持ちが軽やかで良い。

あと、マルチプラットフォーム向けにパッケージングするときはelectron-userland/electron-packagerを使うとすごく手軽で便利だった。 最終的にはCIでパッケージングしてReleaseする感じに持っていきたいので、おいおいやっていきたい。


作ってる手前自分でもなるべく使うようにしてるけど、やっぱりコマンドそのまま打ったほうが楽ちんちんですね

Rails4のgenerate controllerでviewやassetsを生成しないオプション

rails g controllerしたときに「Asssets周りは要らないんだよなー」ってケースが割りとあった。 -hでヘルプみてもピンと来なかったんだけど、ググッてみたらちゃんと先人の方々が書いてくれていた。

各オプションとその結果の備忘録。

オプション無し

% rails generate controller piyo
Running via Spring preloader in process 3152
      create  app/controllers/piyo_controller.rb
      invoke  erb
       exist    app/views/piyo
      invoke  test_unit
      create    test/controllers/piyo_controller_test.rb
      invoke  helper
      create    app/helpers/piyo_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/piyo.coffee
      invoke    scss
      create      app/assets/stylesheets/piyo.scss

controllerだけでいいとき: --no-assets --no-helper --skip-template-engine

% rails generate controller piyo --no-assets --no-helper --skip-template-engine
Running via Spring preloader in process 5517
      create  app/controllers/piyo_controller.rb
      invoke  test_unit
      create    test/controllers/piyo_controller_test.rb

asset要らないとき: --no-assets

% rails generate controller piyo --no-assets
Running via Spring preloader in process 5187
      create  app/controllers/piyo_controller.rb
      invoke  erb
      create    app/views/piyo
      invoke  test_unit
      create    test/controllers/piyo_controller_test.rb
      invoke  helper
      create    app/helpers/piyo_helper.rb
      invoke    test_unit

helper要らないとき: --no-helper

% rails generate controller piyo --no-helper
Running via Spring preloader in process 5287
      create  app/controllers/piyo_controller.rb
      invoke  erb
      create    app/views/piyo
      invoke  test_unit
      create    test/controllers/piyo_controller_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/piyo.coffee
      invoke    scss
      create      app/assets/stylesheets/piyo.scss

view要らないとき: --skip-template-engine

% rails generate controller piyo --skip-template-engine
Running via Spring preloader in process 5425
      create  app/controllers/piyo_controller.rb
      invoke  test_unit
      create    test/controllers/piyo_controller_test.rb
      invoke  helper
      create    app/helpers/piyo_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/piyo.coffee
      invoke    scss
      create      app/assets/stylesheets/piyo.scss

テストから逃げたいとき: --no-test-framework

% rails g controller piyo --no-test-framework
Running via Spring preloader in process 5795
      create  app/controllers/piyo_controller.rb
      invoke  erb
      create    app/views/piyo
      invoke  helper
      create    app/helpers/piyo_helper.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/piyo.coffee
      invoke    scss
      create      app/assets/stylesheets/piyo.scss

Rails便利ですね、レールに沿って進むのは意外と難しいですが。

SublimeText3用のかな/カナ変換するプラグイン書いた

たまたま平仮名と片仮名を色々とごにょごにょする必要があったのと、Sublimeをここ数年ずっと使ってる割にプラグインを一つも書いたことないなーっていうのがあったので、今更ながらプラグインを書いてみた。

KanaKana

かな/カナの変換するのでKanaKanaという名前にした。 かな/カナ変換に作業効率を落としてる稀有な方がいれば、パッケージコントロールを開いてKanaKanaと入力するとインストールできる。

プラグインのソースはここにある。

プラグインの作成

SublimeTextのプラグインは、手軽に作り始める事ができる仕組みが整っているので、取っ掛かりやすかった。 以下の記事を参考にさせて頂きました。

あとは公式のドキュメント見て使えそうな機能探す感じで作っていった。

プラグイン自体は平仮名と片仮名を変換するだけなので、作ろうと思い立って調べ始めてから大体完成ってところまで、1時間も掛からないくらいだった。 それぐらいお手軽だった。

ただ言語がPythonなので、(AtomやVSCodeのプラグインがJSで書けるのを考えると)そこはちょっと人選ぶのかもなーという感じがした。 Pythonに慣れてれば癖がなくてとっても良い感じ。

注意点としては、ST2のプラグインはpython2系で書く必要があるので、Sublime Textの2と3に対応したい!ってなると、Pythonのソースも2と3に対応して書かなきゃならないので、色々厳しそう。 今回は面倒だし、そもそもST2なんてもう使ってないので、ST3のみの対応にした。

プラグインの配布

SublimeTextのプラグインは「Command PaletteからPackage Controlを使ってインストール」という手順が主流だと思う。 作った時は配布まで考えて無かったんだけど、せっかくだし配布したいなーと思ってきたので、配布までやってみた。

Package Cntrolのサイトのドキュメントの、パッケージについて書かれてるページを参考に作業した。

GitHubを使うことで、配布もお手軽に出来た。

ざっくり手順を並べるとこんな感じになる。

  1. 既に似たようなのが無いか検索して確認
  2. プラグインのパッケージ名に気をつけてプラグインを作成
  3. GitHubに公開する
  4. 最新バージョンのコミットに、SemVerに則ったバージョン番号のタグ付けをする
  5. Package Control Channelをフォークする
  6. repositoryディレクトリに、0-9.json[a-z].jsonがあるので、自分の作成したプラグインの先頭文字に対応するjsonに、パッケージ情報を追加する
  7. SublimeTextのPackageControlからChannelRepositoryToolsをインストールする
  8. コマンドパレットからChannelRepositoryTools: Test Default Channel commandを実行し、テストにパスすることを確認する
  9. 変更をコミットしプルリクを投げる(プルリクは投げっぱなしで大丈夫っぽい。僕はDescriptionもタグ付けもしなかった)
  10. 問題が無ければマージされ、公開される

注意点もいくつか(全部先のページに書いてあることだけど)。

  • パッケージ名には"sublime"っていうワードは使えない
  • リポジトリ.pycファイルは含めない
  • パッケージ情報にversion,url,dateのサブフィールドを含めない

ちなみにパッケージ情報はこんな感じで追記した。

{
    "name": "KanaKana",
    "details": "https://github.com/mitsu-ksgr/KanaKana",
    "labels": ["japanese", "text manipulation"],
    "releases": [
        {
            "sublime_text": ">=3000",
            "tags": true
        }
    ]
}

ラベルは他のプラグインを参考にして適当に決めた。

プルリクを送ってからマージされるまで、6時間くらいしか掛からなかった。結構頻繁にチェックしてるみたい。


ポストする時気付いたけど、前回ブログ書いたのが丁度1年前だった。 「これブログに書こうかな」なんて思う事はよくあるんだけど、生来の筆不精がたたってか、結局今日まで何も更新してなかったみたい。

最近は色々追い詰められてて、今回のプラグインも現実逃避の一環として書いてる節が多少あるので、次は余裕のある事してブログ書きたい。

Goの関数オブジェクトで再帰呼び出しする

型宣言付きで関数オブジェクトの変数を前方宣言しておけば再帰呼び出しが出来る

package main

import "fmt"

func main() {
    var factorial func(n int) int
    factorial = func(n int) int {
        if n == 1 {
            return 1
        }
        return n * factorial(n-1)
    }

    fmt.Println(factorial(5))
}

Go、基本的に良い感じだけど、三項演算子無かったり定数配列宣言出来なかったり、ちょこちょこ鬱陶しい感じもしなくもない

おわり(*・ω・)ノシ

BitSummit 2015に行ってきた

京都で開催された BitSummit 2015 に行ってきた。 f:id:mitsu-ksgr:20150713200516j:plain

BitSummitは7/11, 7/12の2日間に渡って開催されてたんだけど、僕が行ったのは7/11の方だけ。

「インディーゲームの祭典」というだけあり、ゲームを紹介している人が実際の開発者だったりして、そういった方々と直接話せるのが凄く楽しかった。 開発者の方と話せたいくつかの作品について、個人的な記録として感想諸々を書いておこうと思う。

(イベントを楽しみすぎて、ブースの写真は全く撮ってない。ゲーム/開発者のページへリンクを張るので、ゲームの雰囲気はそっちで掴んで欲しい。)

DARUMA SOUL by Tengu Boys

f:id:mitsu-ksgr:20150713203317j:plain

vimeo紹介動画

Daruma Soul Trailer3 from Tengu Boys on Vimeo.

基本は縦スクロールのシューティングゲーム。 横フリックで敵弾を弾きながら進み、縦フリックで突進攻撃が出来る。

アニメーションに力を入れているらしく、実際キャラクターのドットアニメが凄く良く出来ていて、プレイしていて楽しかった。 エフェクト等の演出も派手さがあり、ボスを倒した時なんかも小気味良くて「もう一回プレイしたい!」ってなる。 また、ステージ中だけでなく、ステージを選択するワールド画面も作り込まれていて、それを見ているだけでも楽しい気分になる。

反面、フリック操作の反応が遅く、狙った通りにアクションが出来なくてストレスを感じた。 これに関してはアンケートに意見を書かせて頂いたので、調整されると嬉しい。 2015年秋にiOS向けにリリース予定だそう(Androidは未定だって、残念)。

Bad Smell Queue by xionchannel software

体験用 APKをダウンロード出来るURLが載ってるサイトはコチラ ---> Bad Smell Queue

f:id:mitsu-ksgr:20150713204415j:plain

YouTubeの紹介動画 www.youtube.com

スカンクを操作して、敵を倒していく3Dアクションゲー(Unity製)。

  1. 走り回って屁をチャージする
  2. チャージした屁をブチかまして敵を気絶させる
  3. 突進してダメージを与える

っていう流れで敵を倒していく。 屁のチャージ量に応じて、スカンクのケツが大きくなっていくのが見ていて面白い。 屁は(当然だけど)自分の後ろに出るので、敵の横を走り抜けながら放屁する必要がある。 開発者曰く「ドリフトしながら屁を当てると良い感じ」。これが中々難しい。

アイディアの面白さもさることながら、キャラの可愛さに引けを取らない程にゲーム性も高く、やり込めばやり込むだけ上達しそうな感じだった。 寝ないで難易度調整したそうだけど、中盤からすげー難しくなって無理ゲーと化していたので、しっかり寝てから再度調整して欲しい :)

ちなみに、貰ったチラシにテスト版APKのQRコードがあるんだけど、「背景黒字でQRコードが白」っていうパターンだったので、僕の端末のQRコードリーダーだと認識出来なかった(PCに取り込んで色反転させて認識させたけど)。 QRコードは「背景白地でコードは黒」が基本というか規格だった気がするので、みんな気をつけよう。

アトの跡 by ほしさらい

ゲームのサイト: アトの跡

YouTubeの紹介動画 www.youtube.com

主人公を操作して、女の子を守りながらステージを進んでいく2Dアクション。 基本アクションは、

  • 攻撃
  • バーンアクション(敵の攻撃とかを色々弾ける)
  • 吸い込み(よく覚えてない)

って感じだったと思うんだけど、このバーンアクションっていうのがとにかく気持ち良い。 敵本体や敵弾を弾けるので、ザコ敵をなぎ倒したり、拡散弾を一気に弾いたりと、いろんなシーンで活躍する。 バーンアクションの演出がとにかく気持ち良く調整されていて、これだけでもプレイする価値あり!って感じだった。

とはいえ、コレが万能過ぎて、他のアクションが活きてない感じがした。 この部分は作者の方も苦心してるようで、バーンアクションの気持ちよさを保ちつつ、アクション性を上げる方法を模索しているようだった。

個人が一人で絵もプログラムもこなしているようで、ただただすげーって思った。 BGMとかもやりたいらしい。エターナらないように頑張って欲しい。

Dreeps: Alarm Playing Game

f:id:mitsu-ksgr:20150713221850j:plain

YouTube紹介動画 www.youtube.com

ドットが可愛い完全自動で進むRPG。 「RPGを遊ぶ時間のなくなったあなたへ」っていうコンセプトのゲームだそう。

自分が寝る前に、朝起きる時間をアラームをセットすると、その時間に主人公も目覚めて冒険を始めるらしい。 昼間なんかにアプリを立ち上げると、冒険してる主人公の様子を楽しむ事が出来る。

主人公が冒険している間は、こちらからは指示などは何も出来ない。 見守るだけだけど、逆にそれがいい味を出してるなーって感じた。

主人公は、旅先で出会う人や仲間と会話をするんだけど、細かい内容までは分からない。 グラフィックも良く出来ていて、それも相まって想像を掻き立てられ、見てるだけで楽しい。

Android版の予定はあるんですか?と聞いたら、笑いながら「出してくれって結構言われるんですよねー」って答えてくれた。 予定があるのかどうか微妙な感じだったけど、楽しみに待ってようかな。

iOS版はここから購入出来る ---> dreeps: Alarm Playing Game on the App Store on iTunes

勇者ヤマダくん by Onion Games

f:id:mitsu-ksgr:20150713215836j:plain

YouTube紹介動画 www.youtube.com

5x5くらのパネルをナゾって敵を倒しつつステージをクリアしていくパズルRPGっぽい感じ(ジャンルよく分からん)。

ストーリーがアホっぽくて楽しいし、そのアホっぽい世界観に合わせて作られたBGMやSEが、かなり良い感じ。 全体的にアホっぽいんだけど、パズル部分はキチンと考えてプレイしないとあっさりやられたりするので、中々骨がある感じだった。

近日配信予定だそう。

PooPride by Dice Creative Inc.

BitSummitに応募したところ落選したらしく、開発者たち(社長含む)が会場前でウンチ被って宣伝してた。 なので、実質BitSummitとは関係ないんだけど、ここの社長の熱意が普通じゃなかったので、一応書いとく。

f:id:mitsu-ksgr:20150713224347j:plain 会場外で配ってたティッシュ。水に流せるので、もちろんケツも拭ける。

YouTube紹介動画 www.youtube.com

公式サイト。くさそう。 ----> http://poopride.net/ja/

現在KickStarterで出資を募ってるみたい。 $10,000で開発チームにジョイン出来るそうなので、興味ある人は出資するといいと思う。

ここの社長の下品っぷり熱意の凄さは、Twitterを見れば大体分かると思う。 代表取締役自らが身体を張って宣伝してるところに好感が持てた。

社長の熱意に押されて「応援します!」って言ってしまうと、ウンコを被らされた挙句に記念撮影をされ、それがTwitterを経由して全世界に公開される。 僕の写真も晒されているので、気になる人はPooPrideのTLを遡ると見つけることが出来る。

ゲームは、ウ◯コ同士がチキンレースするっていう内容。 なんでウ◯コがチキンレースするの?って聞いたら、「俺はウ◯コとチキンレースが好きなんだ」という解答を頂けた。良いと思う。

ゲーム自体はしっかり作られていて、チキンレース独特のドキドキ感はちゃんと表現されていた。 Unityで作ってるって言ってた。

ウ◯コなのでiOS向けは厳しそうなので、Androidで頑張るみたい。 ウ◯コ規制に負けずに、是非頑張って欲しい。

おわりに

他にも沢山の作品に触れられて、いい刺激を沢山得られた。 僕がここで書かせて頂いた作品はホントに一部なので、興味ある人は BitSummit 2015 で検索してみるといいと思う。

スマホやPC向けだけじゃなく、Oculus Rift向けの作品もあり、インディー界隈の活気の良さを感じた。

おわり(*・ω・)ノシ