読者です 読者をやめる 読者になる 読者になる

エンジニアのためのGyazo、gyazo-cliを作った

趣味でgyazo-cliというコマンドラインからgyazoにアップロードできるコマンドを作ったので共有します。

https://github.com/uiureo/gyazo-cli

もっと素早く便利に画像を共有したいエンジニアのためのGyazoで、コマンドラインから簡単にGyazoれます。MacLinuxで動く。

本家のGyazoアプリと比べたメリットはこんな感じ。 * コマンドラインから使いやすい * 設定しやすい * Node.jsでnpmモジュールとして書かれているのでハックしやすい

使い方

引数なしで起動するとGyazo.appと完全に同じように領域選択できてスクリーンショットをアップロードできる。

gyazo

引数に画像のパスを指定してアップロードできます。pngやjpgはもちろん、さらにはGIFアニメもアップロードできる。

URLを指定するとその画像を取得してアップロードします。

gyazo /path/to/your/image.png
gyazo 1.png 2.png 3.png
gyazo image.gif
gyazo http://google.com/doodle.png

ストリームを入力できるので、グリッチした画像をそのままGyazoにアップロードできる。

sed "s/1/2/g" original.jpg | gyazo -i

プライベートGyazoサーバーで使う

設定することで好きなGyazoサーバーで使うこともできます。コマンドで設定すると~/.gyazo.jsonに設定が書き込まれる。

たとえば、あなたの会社のGyazoサーバーがsyazo.comにある場合はこうする。

gyazo config host http://syazo.com/

インストール

npmで提供されているので瞬間的にインストールできる。どうぞご利用ください!!!!!

npm install -g gyazo-cli

おまけ

このgyazo-cliとnode-webkitを組み合わせると、Gyazoのアプリができる。

本家と機能的にはまったく同じだけど、こちらはクロスプラットフォームで、Node.jsとnpmモジュールを利用できるのでハックしやすい。

https://github.com/uiureo/gyazo-node-webkit

Poltergeistで`CoreText performance note:`などウザいwarningsを消すgem

Rubyの話。MavericksでCapybara::Poltergeistを使ってるとやたらとphantomjsに意味不明なwarningsを吐かれる。

こういう感じ。

% rspec ./spec/example_spec.rb
Run options: include {:locations=>{"./spec/requests/images_spec.rb"=>[152]}}
2014-05-01 06:59:42.547 phantomjs[9352:507] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. 
2014-05-01 06:59:43.118 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Helvetica Neue" and got font with PostScript name "HelveticaNeue". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.118 phantomjs[9352:507] CoreText performance note: Set a breakpoint on CTFontLogSuboptimalRequest to debug.
2014-05-01 06:59:43.123 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.124 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.126 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.126 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.127 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.338 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.339 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.339 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.630 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Helvetica Neue" and got font with PostScript name "HelveticaNeue". For best performance, only use PostScript names when calling this API.
.

Finished in 4.02 seconds
1 example, 0 failures

こんなのをずっと見てると大切な人の目が傷ついてしまう。網膜が傷ついた人たちは眼科に通うことになり、その医療費は国家の財政を圧迫する。財政危機に陥った政府は増税を決行し、国民を不幸に陥れる。こうして子供たちから笑顔が失われた。もう彼らはうまい棒を10円で買うことができないのだ。

無意味なメッセージを垂れ流したままにすることは大きなリスクが潜んでいる。

このくらいなら適当にモンキーパッチを当てとけばいいんだけれど、遊びがてらgemにしてみた。

https://github.com/uiureo/poltergeist-suppressor

こうGemfileに書けば使えます。

gem 'poltergeist-suppressor'

spec_helper.rbにこう書かなきゃいけないかも。

require 'capybara/poltergeist'
require 'poltergeist/suppressor'

こんな感じで使える。

suppressor = Capybara::Poltergeist::Suppressor.new(patterns: [
  /spam spam spam spam/,
  /spamspamspamspam/
])

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, phantomjs_logger: suppressor)
end

GIFアニメをスライドで利用するたった一つの方法

TL;DR

GIFアニメをMP4に変換する。

ffmpeg -i input.gif -c:v libx264 -pix_fmt yuv420p -vf "scale=trunc(in_w/2)*2:trunc(in_h/2)*2" output.mp4

最新情報 (2014/8/18)

最新のKeynoteではGIFアニメ貼れるようです。

Apple社によるGIFアニメの弾圧

GIFアニメにとって暗黒の時代が訪れようとしている。Macの標準プレゼンテーションソフトであるKeynoteGIFアニメを再生できなくなったのだ。

これは退屈で苦痛なプレゼンテーションとっての唯一の希望が失われてしまうことを意味する。退屈なスライド、冗長な話、不快な声、淀んだ空気。こうして世界のプレゼンテーションは退屈に包まれ、聴衆から笑顔が消えた。

我々がとれる選択肢は2つある。ひとつはKeynoteを捨てて別のプレゼンテーションソフトを使うこと、もうひとつはKeynoteで意地でもGIFアニメを使うことである。

Keynote以外のプレゼンテーションソフトで、GIFアニメと親和性が高いのはやはりWebベースのものであろう。reveal.jsなどは優秀だし、自由度も高い。どのようにスライドでGIFアニメを利用するかはTweetflight Presentationが参考になる。しかし、美しいスライドを簡単に作れるかといったらなかなか難しい。特に日本語フォントがダサくなりがちだったり、ちゃんと綺麗なスライドを作ろうとすると自由な配置が難しく面倒である。

やはりKeynoteGIFアニメを無理矢理にでも使う方法を考え、Apple社の不当な弾圧に抵抗すべきだ。そこでその方法を思いついたので共有しておく。

いかにしてKeynoteGIFアニメを用いるか

Keynoteには動画が貼り付けられるので、GIFアニメを動画に変換して利用すればいい。手順は以下のようにすればいい。

  1. GIFアニメを動画に変換する
  2. Keynoteに貼り付ける
  3. 自動再生+ループ再生されるように設定する

GIFアニメを動画に変換する

以下のコマンドで変換できる。libx264は縦横のピクセル数が2の倍数じゃないと受け付けてくれないので、縦横の長さが2の倍数になるように調整する。

ffmpeg -i input.gif -c:v libx264 -pix_fmt yuv420p -vf "scale=trunc(in_w/2)*2:trunc(in_h/2)*2" output.mp4

Keynoteに貼り付ける

ドラッグアンドドロップすればいい。

f:id:uiureo:20131110180225g:plain

自動再生+ループ再生されるように設定する

そのままでは勝手に動いてくれないので、自動ループ再生するように設定する。

動画を選択して「フォーマット」->「ムービー」から「繰り返し」を「再生の繰り返し」にして、「クリックしてムービーを開始」からチェックを外す。

f:id:uiureo:20131110180222g:plain

まとめ

GIFアニメ最高!!!!!!!!!!!!!!!!

GifzoをGyazoの運営元に譲渡しました

GifzoGyazoの運営元であるNota Inc.に譲渡しました。

これまでは個人でGifzoを開発してきましたが、これからはNota Inc.の洛西一周さんたちとともに協力して開発を進めていくことになります。

GifzoはGyazoに強く影響されて生まれてきたので、この度GifzoがGyazoの仲間に加われることをとても嬉しく思っています。

皆さんにとってスクリーンキャストをもっと楽しいものにするべく、Gifzoはさらなる進化を目指していきます。

Gyazoと融合し革命的に進化した"宇宙一簡単なスクリーンキャスト共有"をどうぞお楽しみに!

f:id:uiureo:20130701143037p:plain

Kazato Sugimoto (@uiureo)

Gyazo ブログ: GifzoがGyazoに仲間入りしました!

GyazoライクなGIFスクリーンキャスト共有ツール「Gifzo」をリリースしました - 海峡

GifzoのFAQ

Gifzo

Gifzoでアップロードした動画は他人に公開されていますか?

いいえ。Gifzoにアップロードした動画はURLを知っている人のみが見ることができます。

また、URLは事実上推測不可能なので、URLを教えない限り他の人に見られる心配はありません。

アップロードできる動画の長さには制限がありますか?

はい、あります。

現在のところ、一度にアップロードできる動画は5MB以下という制限があります。長い動画だと生成されるGIFアニメのファイルサイズが大きくなってしまい、実用的ではないためです。

10秒程度の一般的なスクリーンキャプチャ用途であればこの制限に引っかかることはなく、気にすることなく使えます。

Macで録画したGIFアニメが全部緑になるんですが、どうすればいいですか?

Mac OSXのバグのようです。お手数ですが、OSを10.8.4にバージョンアップデートしてください。

もし、何かの事情でアップデートできない場合、下のコマンドをターミナル上で実行すると直るかもしれません。

% defaults write com.apple.cmio CMIO_Unit_Input_ASC.DoNotUseOpenCL -bool YES

Gifzoのアプリケーションを立ち上げたけど、何も録画せずに終了したい

ESCキーを押すと、何も録画されずにその場で終了します。

Gifzoにこういう機能がほしい

Gifzoはオープンソースなので、誰でも開発に参加することができます。

uiureo/Gifzo.app · GitHub

その他の質問について

コメント等してくださればお答えします。

IT系インターンシップまとめ【2013夏】

学生の皆様方、夏休みのご予定はもうお決まりでしょうか。どうせ学生なんて夏休みは全員暇なんだから、夏に暇に殺されないように暇つぶしの一つや二つをそろそろ考え始めてはいかがでしょうか。

夏休みの暇つぶしのひとつとして、企業のインターンシップに参加するというのがあります。インターンに参加すると、タダで貴重な経験ができたり、場合によっては金が貯まったりします。夏休みの暇つぶしには最適ですね。

僕は情報系の学生なのでIT系の企業のインターンを調べたりするのですが、ググってもすぐには出てこないことが多かったりしてだるいのでまとめました。

順番に特に意味はないです。給料順に並べたら面白いかと思ったけど、めんどくさくなってやめた。

国内でのインターンのみ記載してます。期間・締め切りに関しては複数ある場合、テキトウにいずれか一つを載せました。

インターンまとめ

はてな

求人情報:募集要項:インターンシップ - はてな

期間: 8/12(月)〜9/6(金)
締め切り: 6/16(日)

Google

インターンシップ - 新卒採用 - Google

期間: 応相談
締め切り: 記載なし

Microsoft

Microsoft 2013年 サマーインターン募集のご案内

期間: 8/1から9月末の2ヶ月程度
締め切り: 6/11

楽天

楽天(株) - マイナビ2015

期間: 応相談
締め切り: 6月~11月(予定)

GREE

Careers at GREE | インターンシップ

期間: 3週間程度
締め切り: 色々

DeNA

採用情報 | 株式会社ディー・エヌ・エー【DeNA】

期間: 9月上旬の2週間
締め切り: 7/12

サイバーエージェント

インターンシップ | 株式会社サイバーエージェント

期間: 8月19日(月)~9月13日(金)
締め切り: 6/28(金)

クックパッド

エンジニアの方の応募について | クックパッド株式会社

期間: 1ヶ月程度
締め切り: 色々

ミクシィ

株式会社ミクシィ | IT系の文系・理系学生向け有給インターン・アルバイト募集なら「エンジニアインターン」

期間: 初回1ヶ月契約、その後については相談の上勤務期間を決定
締め切り: 随時

チームラボ

インターンシップ: RECRUIT: チームラボ

締め切り: 5/31

その他

ブコメ等で指摘してくれれば追記します。

GifzoのMacクライアントをオープンソースにしました

GyazoライクなGIFスクリーンキャスト共有ツール「Gifzo」をリリースしました - 海峡

先日、公開したGifzoですが、Macアプリのコードをオープンソースにしました。URLをいじるとアップロードする先のサーバーを変えたりできます。

uiureo/Gifzo.app · GitHub

よろしくお願いします!!!!!!!!!!