cowsay でプロ生ちゃんにしゃべってもらう
プロ生ちゃん Advent Calendar 2016 (9日目)の記事です
どうやらこのブログエントリーの一つ前のエントリーが昨年のプロ生ちゃん Advent Calendar なので1年間くらいブログを書いていなかったということですね。 今回は cowsay を使ってプロ生ちゃんにコンソール上でしゃべってもらいます。
cowsay とは
コンソール上に牛のAAが現れてメッセージを表示してくれるツールです
cowsay のインストールと環境
環境
今回使用した環境は Mac OS X El Capitan (10.11.6) です。windows でできるかどうかはわかりません。 また、cowsay のインストールには homebrew を使いました。homebrew のインストールはググるとたぶん出てきます。
cowsay インストール
$ brew install cowsay
確認してみます
$ cowsay hello
_______ < hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
プロ生ちゃん用 Cow file ファイル作成
cowsay でプロ生ちゃんにしゃべってもらうには Cow file というものを作成しなければなりません。
Cow file の置き場所は cowsay -l
で確認できます。
$ cowsay -l
Cow files in /usr/local/Cellar/cowsay/3.04/share/cows: ...
Cow files のところに書かれているパスに Cow file を追加します。
今回はこんな感じで作成しました。
これを pronama.cow などと名前をつけて保存します。
もう一度 cowsay -l
を実行すると Cow files の中に pronama
が追加されています。
プロ生ちゃんにしゃべってもらう
$ cowsay -f pronama ばばーん
番外: Ansible でプロ生ちゃんにしゃべってもらう
個人的に運用しているサイトなどで、デプロイに Ansible を使っています。 Ansible では cowsay がインストールされている環境の場合 cowsay でメッセージを出力します。 そのメッセージのときにもプロ生ちゃんに登場してもらいます。
環境変数の設定
$ export ANSIBLE_COW_SELECTION=pronama
これだけで終わりです。適当な playbook を流してみましょう。
$ ansible-playbook playbook.yml
これでタスクが実行されるたびにプロ生ちゃんがしゃべってくれます。
結構じゃまです。
cssスプライト作ったけど設計に迷った
プロ生ちゃんアドベントカレンダー2015の10日目です。
プロ生ちゃんのドット絵をcssで扱ってみました
css設計について
今回はプロ生ちゃんドット絵をcssスプライトにしたという話なのですが、css設計にちょっと悩みました。ここではSCSSやLESSのことは考えずに書いています。
今回のcss設計
まず、今回書いたcssのスプライト全体の共通設定として以下のように各クラスを羅列して書いています。
.pronama-01-1, .pronama-01-2, .pronama-01-3, /* ... */ .pronama-running{ display: inline-block; white-space: nowrap; text-indent: 100%; overflow: hidden; background: url('https://dl.dropboxusercontent.com/u/6396527/all.png'); }
さらに縦型のスプライト用の設定は次のように追記しています。
.pronama-01-1, .pronama-01-2, .pronama-01-3, /* ... */ .pronama-running{ width: 32px; height: 64px; }
この書き方は共通部分は分離しつつHTMLもシンプルにするという思想のもとに書いています。しかし、ソースを見てもらえればわかるようにクラスを羅列する部分が多くなってしまいます。
<i class="pronama-01-1"></i>
もうひとつのcss設計
もうひとつの方法として、クラス名を羅列せずに共通で使える別クラスを用意する方法も考えられます。
.icon { display: inline-block; white-space: nowrap; text-indent: 100%; overflow: hidden; background: url('https://dl.dropboxusercontent.com/u/6396527/all.png'); } .standing { width: 32px; height: 64px; }
この書き方はクラス名を羅列する必要が無くcssがシンプルになる反面、HTMLには依存するクラスを全て指定しなければならないため今度はHTMLが複雑になります。
<i class="icon standing pronama-01-1"></i>
なお、どちらの書き方でも以下のように各クラスのbackground-position
を指定している部分は変わりません。
.pronama-01-1{ background-position: 0 0; }
結局どちらが良いか
どちらも一長一短ありますが、僕の場合は前者の設計が好きです。僕の設計の仕方のひとつとして、使う側のインターフェースから設計し始めるというのがあります。この場合の「使う側」はHTMLのことです。HTMLとcssの実装者が違う場合はこの考え方は特に有効だと思っていて、HTMLの実装者が覚えなければいけないことを出来るだけ少ない方がいいのではないかという考えです。
だからこの場合<i class='pronama-01-1'></i>
とだけ書けばいいという設計の方が好きです。
もちろん、これはプロジェクトや実装者によって考え方は変わると思います。
おわりに
最近のcss設計にはあまり明るくないのですが、こういう場合の定石ってあるんですかね?世に出回っているライブラリをざっと見ると<i class="fa fa-shopping-cart fa-lg"></i>
と書くパターンと<i class="icono-cart"></i>
と書くパターン両方ありました。
でも感じとしては<i class="[ライブラリ名]-[icon名] [オプション]"></i>
というのが多いのかな?
SNSのアイコンと人格について
プロ生ちゃんAdvent Calendar 2015 8日目の記事です www.adventar.org
最近、(鍵垢では無い方の)Twitterなどでプロ生ちゃんのアイコン(利用案内)を使わせてもらってます。プロ生ちゃんアドベントカレンダーという事で、無理矢理それと結びつけてSNSのアイコンが人格に与える影響ついて最近思った事を書きます。即興ネタなので後から少しずつ変更するかもしれません。
アイコンの違いは没個性化に影響するか
没個性化とはざっくりいうと、集団の中や自分が覆面をかぶった状態で他者から個人として注目されにくいときに攻撃的な行動などを取りやすくなってしまう事です(という説明で大体あっていると思う)。二次元アイコンなど顔写真以外のアイコンは没個性化に影響するかという問いに対しては、自分の顔写真を使っている場合と比べると影響はあるかもしれません。しかしTwitterなどのSNSに関していうと、個人が特定されないアイコンで、しかも匿名であったとしても、ある程度その中でのコミュニティや個人のアイデンティティーが確立しているので2chなどと比べるとそれほど影響しないと思います。
アイコンの違いはSNS上での性格に影響するか
アイコンの違いはSNS上の性格には影響すると思います。ここでの性格とは発言の内容や表現の仕方・言葉遣い・対人関係での対応の仕方などの事を意味していますが、これは役割期待・役割行動で説明できます。役割期待・役割行動は男らしさ・上司らしさ・オタクらしさ…のような「○○らしさ」に対する期待や行動です。Twitterなどではそのアイコンからその人の性格を無意識的に想像でき、不思議なことにそれがキャラクターアイコンであればなんとなくそのキャラクターが発言しているように見える事もあります。そんな中で自分のアイコンに見合った性格に近付く可能性はあります。
自分の場合、今まではマスクをつけた横顔の写真を使っていたのですが、プロ生ちゃんの笑顔のアイコンにしてからはあまりに固すぎる発言や批判的な発言は少なくなった気がしますし、語尾も若干違う気がします。
おわりに
意識高い系の人からはアニメアイコンなどは批判される事もありますが、それが個性でもあり同じような趣味の人との結びつきの機会にもなるのでいいんじゃないかと思います。
アドベントカレンダー
- 前の記事:動画宣伝と裏話(おーぼんさん)
- 次の記事:プロ生ちゃんのスカート(onotchi_さん)
コマンドラインでかんたんにGIFアニメーション作成
プロ生ちゃん Advent Calendar 2015 4日目に飛び入り参加しました。
はじめに
プロ生ちゃんのサイトでドット絵があったので使ってみたいと思います。ゲームなどに使う前に動いているところが見たかったのでGIFアニメーションを作ってみました。
いろいろGIFアニメーション制作ソフトはあると思いますが、今回はコマンドラインで作ります。ちょっと調べるimagemagickというのが使えそうでした。
環境
- Mac OS X
- homebrewが入っている
imagemagickのインストール
$ brew install imagemagick
ヘルプは
$ convert -help
いろいろオプションがありますね
素材画像
http://pronama.azurewebsites.net/pronama/download/
ここからドット絵をお借りしました。
imagemagickを試す
$ convert /path.to/input/*.png /path.to/output/anime.gif
あれ?
透過画像を使っているので前の画像が消えずに何か表示がおかしくなっていますね。きっとオプションで回避可能なのでしょうが、うまくいかなかった
仕方ないのでPythonで背景を作る
それぞれの画像に背景をつけてからもう一回つくることにします。プログラマーっぽくPythonを使って背景色をつけることにしました。pipやPythonが環境に入っていなかったらPhotoshopとかでいいと思います。
PILインストール
PILというライブラリを使います。pip install PIL
でインストールできなかったので「pyenvでvirtualenvしててPILがインストール出来ない件」を参考にインストール
PILで透過画像に背景色を付ける方法
import Image # 32 × 64の真っ白い画像(背景)を作る bg = Image.new(mode='RGB', size=(32, 64) color=(255, 255, 255)) # 画像を取得 img = Image.open('/path.to/input_file.png') # 背景に画像を合成 bg.paste(img, (0, 0), img) # 保存 bg.save('/path.to/output_file.png')
実装例
上のコードをもとにディレクトリの中身全てに背景色をつけます。ディレクトリを作ったりいろいろごにょごにょしていますが重要なところは上のコードと変わりません。
import glob import os import Image def get_output_path(input_path): tmp = input_path.split(os.sep) return os.sep.join([os.sep.join(tmp[0: -1]), 'result', tmp[-1]]) def set_background(img, rgb=(255, 255, 255)): bg = Image.new(mode='RGB', size=img.size, color=rgb) bg.paste(img, (0, 0), img) return bg def make_dirs(path): try: os.makedirs(os.sep.join(path.split(os.sep)[0: -1])) except OSError: pass def make(input_path, output_path=None): if output_path is None: output_path = get_output_path(input_path) make_dirs(output_path) img = Image.open(input_path) img = set_background(img) img.save(output_path) def main(): base_path = '/path.to/input/*.png' for file_name in glob.glob(base_path): make(file_name) if __name__ == '__main__': main()
再びimagemagickを試す
$ convert /path.to/input/result/*.png /path.to/output/anime2.gif
できました!
アドベントカレンダー
- 前の記事:僕がパソコンに「Dynabook Satellite」をおすすめする理由(荒テックさん)
- 次の記事:【プロ生ちゃん】「プロ生ちゃんの絵を描く」イラスト/水っぽいスープ [pixiv](水っぽいスープさん)
ドラム式洗濯乾燥機(NA-VH310L)を買ったらライフチェンジングだった
一年くらい前に引越しをしました。その時買った物の一つがドラム式洗濯乾燥機です。引越しで駅に近くなった以上にこれはライフチェンジングだったのではないかと思います。ちなみに買った洗濯機はPanasonicのNA-VH310Lという物で当時ヤマダ電気で16万円くらいだったと思います。プチドラムという一人暮らしの人にもおすすめのシリーズらしいです。2015年の後継機はNA-VH320L-Wですかね?
時間の節約
今までどれだけ洗濯物を干す時間に費やしていたでしょうか、一人暮らしだと毎日ではないにしろ一週間に一回くらいは洗濯すると思います。その時間が節約できるのは大きいです。終わる時間を計算して洗濯する必要もなく、出かける前や寝る前にセットしておけば気づいた時には洗濯も乾燥も終わっています。今までは洗濯物を干す作業が面倒だったからまとめて洗濯していた物も、すぐに洗濯できるので楽です。
洗濯物を干す場所を考えなくていい
前の家では広いベランダがあったのですが、いまの家には狭いベランダしかありません。また、雨が降っていたら風呂場に干すことになりますが、その間にシャワーを浴びたい時は不便です。洗濯乾燥機はそういうことも考えなくて済みます。
精神的負担の軽減
一番大きいのは精神的負担の軽減ですね。洗濯の終了時間や干す場所を考えたり疲れている中で洗濯物を干す作業をしたりと、洗濯自体が面倒な作業だと考えていましたが、今ではそれがありません。
おわりに
これ、本当にオススメです。ズボラな人や忙しい人ほど洗濯乾燥機は必須だと思います。安い買い物ではないのですが、精神的負担や時間の節約のための投資だと思って買うのもいいのではないでしょうか。
世界同時株安も落ち着きつつあるようなので自分が投資する意味について考えてみた
僕は資産の一部を現物株式として所有していますが、2015年8月21日頃から日本株にも大きな影響を与え始めた世界同時株安によって、分散していたはずの銘柄が全部同じ方向に動き含み損が出て底値で投げ売りそうになったので戒めとして改めて自分が投資する意味について考えてみました。
僕の投資状況
一時期は資産の約半分を現物株式として所有していましたが、今は約1/4程度になっています。基本的には現物以外の取引は行わず、長期で運用しています。それ以外の資産の多くは元本保証の円預金などです。積極的に投資するというよりは資産の形として株式などを保有するという感じです。レバレッジを効かせるとしても純資産を大きく上回るようなかけ方はしません。
本業と、投資する理由について
投資するのは本業のため
僕の本業はプログラマーです。僕自身やりたいことというのは現在の本業です。後々そこから発展して別のことをやる可能性もありますが、本業以外の部分でたとえ利益が出ていたとしてもここから逸脱するつもりはありません。僕が投資する意味は、例えば本業で利益が全くない状況に陥っても本業をやり続けられる資産を形成するためです。本業がうまくいかない時に別のバイトなどで稼ぐこともできますが、その時間がロスになってしまうのでそうならないようにしています。
副業もセミリタイアも興味がない
株式投資などの界隈には副業・セミリタイア・不労所得なんていう言葉がよく出てきますが、そういったものには全く興味がありません。あくまで前述した通り投資するのは本業のためです。
本業に影響が出るのは本末転倒
基本的に僕が行っているのは、インカムゲインと大きな価格差が出た時のキャピタルゲインを目標とした中・長期投資です。一度は短期取引なども挑戦していましたが投機的であるし市場が常に気になってしまっていたので精神衛生は不衛生でした。また、暇さえあればスマートフォンで株価をチェックしていたので本業に影響が出てもおかしくないと考えたためやめました。決算書と事業を見て割安だったら長期投資という基本を押さえておけば短期的な株価に一喜一憂するということもしなくていいと思います。
おわりに
このブログの投稿している時点では、株価も徐々に回復してきているのでとりあえずは自分の判断を信じようと思います。
ひらくpcバッグベストプラクティス考察1
ひらくpcバッグ( http://superclassic.jp/?pid=41001 )は改めて説明するまでもないくらいに人気のバッグで、あらゆるシーンに利用されていると思います。しかし、プログマミング同様、便利な物も正しく使わなければ最大限に活用できません。そこで僕自身もずっと愛用しているひらくpcバッグのベストプラクティスを考察してみます。
なお、ここに書かれているのはかなり片寄った意見かも知れません。だいたいこんなことを考えてバッグを使うということも普通はしないと思いますが…
今後加筆・修正する可能性もあります。
原則
1ポケット1機能
原則として各ポケットやパーティションで区切られたスペースには出来る限りたったひとつの物を入れる。ただし同時に使うことが想定される物や使用シーンが似ている物は1機能として同じスペースに入れることが出来る。大きさなどの理由でどうしてもパーティションで区切ることが出来ないものなどは除く。
2アクション
ひらくpcバッグ本体の大口のチャックを開ける動作を除き、取り出しのアクションは2回までで取り出せるようにする。例えば ①小ポケットのチャックを開ける→②取り出す。インナーケースは1機能としてカウントできる場合に限りインナーケースをひらく動作はカウントに含めない。
利用頻度とアクション数の一致
利用頻度の高い物はより少ないアクションで出し入れができるようにする。
例外の許容
上記の原則に従うと、用途によっては不便になってしまうかもしれません。ルールに従って自分の生活を変えるか、運用においてこれらの原則に例外を作るかは場合によると思います。例外を許容するという選択をした場合は最低限下記のアンチパターンを避けるようにします。
アンチパターン
アンチパターンとは、ある問題に対する不適切な解決策です。ここではいくつかのアンチパターンについて名前をつけて分類します。
「象を飲み込んだうわばみ」 〜 詰め込み過ぎ
The Little Prince: "My drawing was not a picture of a hat. It was a picture of a boa constrictor digesting an elephant."
本体の三角形の形状を崩すほど物を詰め込んでしまうアンチパターン。見た目上も美しくないし、ひらくpcバッグの機能性を損なう。それほどたくさんの物を入れたいのであれば相応の優れたバッグは他にある。
「無用の長物」 〜 不要な物の詰め込み
遺教経: "無得多求壊其善心 (多くを求めて、其の善心を壊することを得ること無かれ)"
まだ物が入るからという理由で、必要なもの以外も詰め込むアンチパターン。重くなるし、取り出しにくくなるので機動力が落ちる。ガジェット好きにありがち。
「マルチオブジェクト」 〜 区切りの無視
1つのポケットに多くの物を入れてしまうアンチパターン。せっかくのポケットの意味がない。
「認知限界」 〜 小さすぎる物の詰め込み
手を奥に突っ込まなければ取り出せなかったり他の物やポケットの端に隠れてしまったりするような小さな物をそのまま入れてしまうアンチパターン。奥深くに入ってしまって存在を忘れてしまう可能性もある。インナーケースなどで対策する。
「セカンドバッグ」 〜 別持ち
別のまとまりとしてひとつの荷物になるもの(カメラとレンズのセットなど)や、スマートフォンや財布など常時バッグから出して使う物を除き、”ひらくpcバッグに入れるべき物”であるにもかかわらず入りきらないという理由で別のバッグなどで持ち歩くアンチパターン。それらはきっと不要な物。
おわりに
今回はベストプラクティスの考察としていろいろ制限を付けることを考えました。一貫して言えることは持ちすぎないことが重要だということだと思います。バッグの中身も断捨離。