Amazon犬 – Amazon Dogs

こんにちは!
たくさんの大きなプロジェクトが進行しており、
なかなか投稿ができませんでした。

さーて、久しぶりの投稿ですが、開発関係のことではありません!

たまたま見つけた
Amazon Dogsについてご紹介します。
といってもWebサービスでもなんでもないのですが^^;

米国Amazon.comの既に存在しない商品ページ、404ページに行くと
かわいいワンちゃんたちが出迎えてくれます。

Screen Shot 2016-08-29 at 17.56.04

アクセスするたびに、違うワンちゃんが出てきます。

Screen Shot 2016-08-29 at 17.56.09

Screen Shot 2016-08-29 at 17.56.13

Screen Shot 2016-08-29 at 17.56.16

Screen Shot 2016-08-29 at 17.56.21

ワンちゃんをクリックすると、ワンちゃんの紹介ページが出てきます。

Screen Shot 2016-08-29 at 19.17.32

ワンちゃん紹介ページはこちら
かなりたくさんいますね^^

オフィスにペットが居るっていうのはホント素敵ですね。
今弊社でのオフィスで猫を飼おうと検討中です^^

ワンちゃんたちのカレンダーまで販売されているようです

以上、ちょっと気になったのでご紹介でした。

Electron と Ruby でネイティブアプリを作る方法 – 2 ボタンの配置時の落とし穴

概要

こんにちはアレクスです!

今回は「ボタン配置時の注意」というお話です。

詳しい解説は追記していくとしまして、
簡単に注意点を記載しておきます。

GUIには欠かせないボタンの落とし穴

続きを読む Electron と Ruby でネイティブアプリを作る方法 – 2 ボタンの配置時の落とし穴

Electron と Ruby でネイティブアプリを作る方法 – 1 標準出力随時受け取り

概要

こんにちは。アレクスです。
今回はですね。 Node.jsからrbファイルを実行して、
標準出力を受け取ることについて解説します。

長いこと中途半端に取り組み見て見ぬふりしていました問題が、
以外にもサクッ🍘と解決してしまいなんだか😦だったのですが、
落とし穴なポイントが有りましたので、公開いたします。

今回は超初期段階です、これから複雑な実装を行いますので、
また投稿したいと思います。

最終目的

Rubyで作ったプログラムをElectronから実行して、標準出力を受け取って、
画面に表示させたいですね。プログレスバーに反映できれば great!ですね。

イメージ
Rubyで進行状況のパーセンテージ計算 => 数値をstdout
Node.jsで受け取り => GUIのプログレスバーデザイン部分のwidthに随時反映

初期段階

まずは Node.js から外部コマンドで、簡単な Ruby コードを実行してみます。
エラーもどうなるか合わせてみてみます。



# coding: utf-8
Encoding.default_external = 'UTF-8'

begin

  5.times {
    print "HELLO WORLD!"
    sleep(0.5)
  }

  raise "ERROR"

rescue => ex
  print ex.class
  print ex.message
  print ex.backtrace
end


Node.js は以下のようにspawnを使います。


const spawn = require('child_process').spawn;
const ls = spawn('ruby', ['hello.rb']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});


参考:Child Process Node.js v5.5.0 Manual & Documentation

でもはじめは実行してもうまく行かなかったんですよね😿

原因

原因は2つありました。

– Ruby側のstdoutp出ないとダメ
putsでもprintでも実験したらダメでした。
– ちゃんとターミナルでしてなかったのでダメ
Sublime Text3のビルドツールでやってました。

p以外でやった場合は、随時ではなく全て終わってから帰ってきますね。
SublimeText3のビルドツールでrunすると以下のエラーが出ました。


events.js:154
      throw er; // Unhandled 'error' event
      ^

Error: spawn ruby ENOENT
    at exports._errnoException (util.js:856:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
    at onErrorNT (internal/child_process.js:344:16)
    at nextTickCallbackWith2Args (node.js:474:9)
    at process._tickCallback (node.js:388:17)
    at Function.Module.runMain (module.js:449:11)
    at startup (node.js:139:18)
    at node.js:999:3

以上、簡単ではございましたがご紹介でした。

WordPress で絵文字が使えるとたまたま知った – ありふぁぼ

HEY!GUYS! アレックスです

ぜひ紹介したいものや、気になるもの。
でもがっちりと書く内容ではないことをさくっとライトに紹介していく
そんな投稿を「ありふぁぼ」としてシンプルに投稿していきます。

第一回目の今回はWordPressの絵文字です。

まったく、ぜんぜん使うつもりがなかったのですがー
GitHub用のMarkdownをWordpressにコピペで投稿しましたら、
たまたま、一個だけ顔文字が表示されました。

これね!
Emoji

ちょこっと調べてみたら、素敵な記事がありました。
🔗 LINK : WordPress 4.2 絵文字が使えるようになりました 💕
丁寧に使い方が乗っているので、ぜひご参照ください。

でもこちらの方がGitHubと同じ記法で使えるので私にはいいですね。
🔗 LINK : 大量の絵文字を使えるようになるWordPressのプラグイン・Emoji Emoticons
今度入れてみたいと思います。

上の方は、Unicodeなので、そのままコピペで簡単に使えますが、
ユニコードを覚えることは、ナカナカ難しいと思います。
いつもコピペ必要になりそうです。

下の方は、プラグインが必要ですが、GitHubと同じ記法で絵文字をかけますし、
よく使うのは覚えれそうです。

あなたにあった方法を選んでくださいね。

Rubyスクレイピング Mechanize の設定をクラス定義でまとめて使い回す : 連載-2

Overview – 概要

対象のgemでいつも決まって使用する設定たちや、
よく使うプロセスをオリジナルに定義したクラスでまとめて、リユースできるようにする。
今回は実際に仕事で必要になったMechanizeを例として使っています。

ちょっと詰まりましたので、忘れないようにアウトプット! 😐

Contents – 目次

1. Intention – 目的
2. Examples – 例
3. References – 参考文献
4. Revision – 改訂

1. Intention – 目的

Mechanize使用時に、いつも共通で行っている設定やよく使うメソッドを
専用クラスで定義して、使いまわせるようにする。


  require 'mechanize'

  agent = Mechanize.new
  agent.user_agent_alias = 'Windows Chrome'
  agent.ca_file = "../etc/cacert.pem"
  agent.keep_alive = false
  agent.max_history = 1
  agent.open_timeout = 60
  agent.read_timeout = 180

基本的に使用する上記の設定を専用に定義したクラスのinitializeで実行する。
※注意:6行目 (agent. 3行目) のca_fileは、外部ファイルを指定しているので上記コードコピペでは使用不可。後日別投稿にて解説予定。

2. Examples – 例

失敗例から紹介しますね。
はじめは何も考えずに、さくっと以下のコードにしてしまったんですね。


  require 'mechanize'

  class MechanizeHelper
    def initialize
      agent = Mechanize.new
      agent.user_agent_alias = 'Windows Chrome'
      agent.ca_file = "../etc/cacert.pem"
      agent.keep_alive = false
      agent.max_history = 1
      agent.open_timeout = 60
      agent.read_timeout = 180
      return agent
    end
  end

  # Call part
  agent = MechanizeHelper.new
  page = agent.get('http://www.foo.com/bar.htm')

HEY! 楽勝ですね! 🙂 Let”s run!


mechanize.rb:464:in `get': undefined method `fetch' for nil:NilClass (NoMethodError)
from mechanize_helper_mistake.rb:19:in `<main>'

OMG! 😱

考えてみると、今までこういった使い方をするシーンに出会ったことがありませんでした。
きちんと調べて作りましょう! と調べまして、できましたのが以下のコードです。


  require 'mechanize'

  class MechanizeHelper < Mechanize

    def self.initialize
      super
      self.user_agent_alias = 'Windows Chrome'
      self.ca_file = "cacert.pem"
      self.keep_alive = false
      self.max_history = 1
      self.open_timeout = 60
      self.read_timeout = 180
      return self
    end
  end

  agent = MechanizeHelper.new
  page = agent.get('http://www.foo.com/bar.htm')
  # => Success!

Tada! 🎉 やりましたね!

私のケースでは設定値はほとんど変えることがないので、直接書き込んでいます。
しかし、外部ファイルに分けて読み込ませたり、呼び出しごとに引数を設定してもいいでしょう。
あとは他にも良く使うプロセスを考えて、メソッドとして追加していこうと思います。

3. References – 参考文献

📚 LINK : Qiita – Rubyのクラスメソッドとインスタンスメソッドの例
👤 AUTHOR : tbpgr様 2015/06/30

今回は上記を参考にさせていただきました。
ありがとうございました。THX! 😆 Pretty awesome!

4. Revision – 改訂

Qiitaにて、偉大なるプログラマー様からご指摘がございました。
大変すみません。謹んで修正いたしました。


  require 'mechanize'

  class MechanizeHelper < Mechanize

    def self.initialize
      user_agent_alias = 'Windows Chrome'
      ca_file = "cacert.pem"
      keep_alive = false
      max_history = 1
      open_timeout = 60
      read_timeout = 180
    end

  end

P.S.
このブログのデザインを早く作りたいですね。
でも忙しいですね 😿

そして、ワードプレスのemojiが可愛いことを今知りました。
私はAndroidのデザインが一番かわいいと思います。
🔗 LINK : Emojipedia
Emoji

Rubyスクレイピング User-Agent 設定が必須 : 連載-1

こんにちは

開発チーム プログラマーのアレックスです。
今年も、いよいよ最後の日になりましたね。

私は本日、鏡餅を買ってきました:)

さて、今回の記事は「Rubyでのスクレイピング」についてです。
今後、何回かにわたってスクレイピング技術についての解説を行っていきたいと思います。

目次

1. 記事作成の経緯
2. なぜ必要なのか
3. 詳しい解説

1. 記事作成の経緯

ユーザーエージェントの設定についての文献は、十分ぐらいにありますね。

では、なぜ今更こんな記事を書くのか?です。
続きを読む Rubyスクレイピング User-Agent 設定が必須 : 連載-1