GitHub pages でnode_modules下のファイルが404で読み込めない

問題

GitHub pages に置いてたページがwebで表示するとなぜか崩壊していた。

いつの間にか(何も変更してないのに!)、node_modules/ 下のファイルが404で読み込まなくなっていて、node_mosules/下のcssやjsファイルを読み込めむことができず、崩壊に至った様子。

解決

stackoverflow.com

どうやら、Githubページはデフォルトでnode_modulesフォルダを無視するJekyllのバージョンを使用するようになったとのこと。

Create an empty .nojekyll text file in the root of the gh-pages branch.

空の .nojekyll ファイルをルートに作成して解決。

$ touch .nojekyll

#2/20 Strings: Making Anagrams [Cracking the Coding Interview Challenges]

#2 Strings: Making Anagrams

www.hackerrank.com

2つも文字列を受け取って、両者がアナグラムになるまで不要な文字列を削除して削除した文字数を返す、という問題。

a = gets.strip.split("").sort
b = gets.strip.split("").sort

deletion = 0
until (a+b).empty? do
    if a.empty? || b.empty?
        deletion += (a.length + b.length)
        break
    end
    
    if a[0] == b[0]
        a.shift
        b.shift
    elsif a[0] < b[0]
        a.shift
        deletion += 1
    else
        b.shift
        deletion += 1
    end
end

puts deletion

感想

文字列をソートして、頭から順に1文字ずつ照合して削除数をカウントするやり方で解いた。 意外と素直にかけなかった。もっと良い解がありそう。

#1/20 Arrays: Left Rotation [Cracking the Coding Interview Challenges]

暇つぶしに、hacker rankの Cracking the Coding Interview Challenges を初めた。

平日毎日1題ずつ解けば20日で終わる程度のボリュームで良さそう。基本的にはrubyで解くつもり。

  • DATA STRUCTURES 9題
  • ALGORITHMS 6題
  • TECHNIQUES/CONCEPTS 5題

www.hackerrank.com

#1 Array: Left Rotations

www.hackerrank.com

l1, l2 = $stdin.read.split("\n")
n, k = l1.split(" ").map(&:to_i)
a = l2.split(" ").map(&:to_i)

a.rotate!(k)
a.each do |v|
    print v
    print " "
end

hackerRank/LeftRotation.rb at master · tic40/hackerRank · GitHub

感想

最初だし易しめ。rotate メソッドを使ったのはちょっとチートだったかも…

目黒でイスラエル人と熟成肉ステーキを食べる

同僚のイスラエル人の誘いで仕事終わりに、イスラエル料理を食べにいくことになった。

目黒にある Pink camila というお店。

www.pinkcamila.com

雑居ビルの2階にあるこじんまりとしたお店で、店内はテーブルが4つほど、イスラエル人シェフが1人で料理を作っている。

店内はテーブルが全て埋まっていて、賑わっていた。

熟成肉ステーキのショートロインとディップセット、さらにイスラエルの赤ワインYARDENを注文する。

Instagram

熟成肉がとても美味い。高かったけど、このボリュームと旨さなら納得できる値段だ。

ディップセットは、中東の味がした。中東独特の香辛料が入っていたからかな。写真はとっていないけど、とても綺麗な盛りつけで感動した。

イスラエル人の同僚と、シェフがなんとイスラエルの同郷出身で同じ歳、さらに2人とも奥さんが日本人という偶然で話が盛り上がった。

あとやはり宗教が絡む話はとても興味深い。

Apache Kafkaインストールからチュートリアルまで

Apache Kafkaとは?

Apache Kafka is an open-source stream processing platform developed by the Apache Software Foundation written in Scala and Java. The project aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds. *1

Apache Kafkaは、ScalaJavaで書かれたApacheソフトウェア財団によって開発されたオープンソースのストリーム処理プラットフォームである。このプロジェクトは、リアルタイムのデータフィードを処理するための、高スループット、低レイテンシのプラットフォームを提供することを目指している。

What is Kafka good for?

It gets used for two broad classes of application:

  • Building real-time streaming data pipelines that reliably get data between systems or applications

  • Building real-time streaming applications that transform or react to the streams of data

Kafkaを使うことで

  • システムまたはアプリケーション間で確実にデータを取得するリアルタイムのストリーミングデータパイプラインの構築が可能
  • データストリームを変換または反応するリアルタイムのストリーミングアプリケーションを構築が可能

GitHub

github.com

Installing Kafka

Download the code

$ wget http://ftp.riken.jp/net/apache/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz
$ tar -zxf kafka_2.11-0.10.2.0.tgz
$ cd kafka_2.11-0.10.2.0

Install java

$ yum search openjdk
$ yum install java-1.8.0-openjdk-devel

Tutorial

Kafkaのコマンドラインクライアントから、メッセージをKafkaクラスタに送信する。

Start the server

# start ZooKeeper server
$ bin/zookeeper-server-start.sh config/zookeeper.properties
# start Kafka server
$ bin/kafka-server-start.sh config/server.properties

Create a topic

$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
# see the topic
$ bin/kafka-topics.sh --list --zookeeper localhost:2181

Send messages

$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

上記コマンド実行後、以下のメッセージをコンソールに続けて入力する。

$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

Receive messages(start a consumer)

メッセージ送信したクライアントとは別のクライアントを立ち上げ、以下のコマンドを実行する

$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

すると、メッセージ送信で入力したメッセージが受信される。

$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

references

導入事例など

RabbitMQインストールからPub/Sub機能チュートリアルまで

RabbitMQとは

RabbitMQ(ラビットエムキュー)は、Advanced Message Queuing Protocol(AMQP)を使用した、オープンソースのメッセージ指向ミドルウェアである。 RabbitMQ Serverは、Erlang言語で記述されており、クラスタリングとフェイルオーバーのためにOpen Telecom Platformフレームワークで構築されている。*1

GitHub

github.com

Install Erlang

RabbitMQはErlangが使われているため、まずErlangをインストールする。

$ wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
$ rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
$ yum install erlang
# Verify your installation of Erlang
$ erl
Erlang/OTP 20 [RELEASE CANDIDATE 2] [erts-9.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.0  (abort with ^G)
1>

Install RabbitMQ

$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
$ rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
$ yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm

start the RabbitMQ server

$ systemctl start rabbitmq-server.service
$ systemctl enable rabbitmq-server.service

# check the status of RabbitMQ
$ rabbitmqctl status

# Enable and use the RabbitMQ management console
$ rabbitmq-plugins enable rabbitmq_management
$ chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/

add an user

  • {username}: new user’s name
  • {pw} : the new user’s password
$ rabbitmqctl add_user #{username} #{pw}
$ rabbitmqctl set_user_tags #{username} administrator
$ rabbitmqctl set_permissions -p / #{username} ".*" ".*" ".*"

visit the RabbitMQ Management tool via web browser

http://[your-rabbitMQ-server-IP]:15672/

問題なければ以下のログイン画面が表示される。

f:id:tic40:20170626183636p:plain

先ほど作成したusername, passwordの組み合わせでログインすることができる。

ここからTutorial

rubyで Pub/Sub を試す。以下の流れ。

  1. クライアント(Subscriber)1, 2は、"logs" チャネルをSubscribeする。
  2. クライアント3(Publisher)から"logs" チャネルへメッセージをpublishする。
  3. クライアント1,2 でクライアント3から発信されたメッセージを受信できることを確認する。

install bunny via gem

$ yum install rubygems
$ gem install bunny --version ">= 2.6.4"

create a receive_logs.rb

#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch  = conn.create_channel
x   = ch.fanout("logs")
q   = ch.queue("", :exclusive => true)

q.bind(x)

puts " [*] Waiting for logs. To exit press CTRL+C"

begin
  q.subscribe(:block => true) do |delivery_info, properties, body|
    puts " [x] #{body}"
  end
rescue Interrupt => _
  ch.close
  conn.close

  exit(0)
end

create emit_log.rb

#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch   = conn.create_channel
x    = ch.fanout("logs")

msg  = ARGV.empty? ? "Hello World!" : ARGV.join(" ")

x.publish(msg)
puts " [x] Sent #{msg}"

conn.close

クライアント1, 2それぞれを購読状態にする

$ ruby receive_logs.rb
 [*] Waiting for logs. To exit press CTRL+C

クライアント3(Publisher) からメッセージを送信する

$ ruby emit_log.rb
 [x] Sent Hello World!
$ ruby emit_log.rb 'this is test message!'
 [x] Sent this is test message!

すると、クライアント2, 3の画面上に、メッセージが表示(受信)される

$ ruby receive_logs.rb
 [*] Waiting for logs. To exit press CTRL+C
 [x] Hello World!
 [x] this is test message!

references

和キッチンかんなのかき氷を食べる

世田谷区にある「和kitchen かんな 」のかき氷がとても人気だという話を聞いたので行ってきた。

twitter.com

よく午後に店外に行列を作っているのを見かける。ここはかき氷専門店ではなく、キッチンと銘打っているいるように、食事も提供している。(しかし行列はほぼ女子しかいないのでみんなかき氷目当ての様子)

待つのは嫌なので土曜の午前中、開店直後に行ってきた。

11時オープンで11時15分頃に店に到着。すると、すでに6人程店内の階段に行列を作っていた。

待っていると、かき氷ですか?食事ですか?と聞かれる。かき氷と答えた。

定番人気のティラミスかき氷を頼んだ。950円。

罪深い#ティラミスかき氷 #kakigori

味は、かき氷というかティラミスでは?という感じだった。見た目かなりボリュームがあるんだけど、かき氷がふわふわなので、1人でも全然食べ切れる。そりゃ人気でるよな。