12 Apr 2018, 23:20

ソフトバンク光でチャンネル競合を解消した

はじめに

家のwifi, 最近だろうか、とても遅くてイライラしていた。

ついに原因を突き止めたかもしれないのでそのレポートです。

バッファローの USB Wifi

購入したものは、こちら。バッファローの USB Wifi. wi-u3-866ds

これを使っていたのだけれども、とにかく回線が不安定。 しょっちゅうブツブツ切れてしまう。 とくに、外出先から自宅サーバに乗り込んでいるときに、通信がとだえることが何度もある。 とてもストレスがたまるので調査することにした。

原因はチャンネルの競合

あまりネットワークについての知識はなのだけれどもどうやらチャンネルの競合が怪しい。

集合住宅に住んでいるので、隣人もwifiを利用している。どうも、その電波と競合を起こしているよう。

具体的には、Linuxだとiwlistでチャンネルの競合をしらべることができる。

$ sudo iwlist (interface name) scan | grep Freq
                    Frequency:2.412 GHz (Channel 1)
                    Frequency:2.412 GHz (Channel 1)
                    Frequency:2.432 GHz (Channel 5)
                    Frequency:2.437 GHz (Channel 6)
                    Frequency:2.442 GHz (Channel 7)
                    Frequency:2.442 GHz (Channel 7)
                    Frequency:2.437 GHz (Channel 6)
                    Frequency:2.437 GHz (Channel 6)
                    Frequency:2.457 GHz (Channel 10)
                    Frequency:2.457 GHz (Channel 10)
                    Frequency:2.462 GHz (Channel 11)
                    Frequency:2.462 GHz (Channel 11)
                    Frequency:2.462 GHz (Channel 11)
                    Frequency:2.462 GHz (Channel 11)
                    Frequency:5.18 GHz (Channel 36)
                    Frequency:5.22 GHz (Channel 44)
                    Frequency:5.24 GHz (Channel 48)
                    Frequency:5.6 GHz (Channel 120)

これで空いているチャンネル番号を選んで、ルータに設定しなおしたら途切れることがなくなった(気がする)。

うちはソフトバンク光なので、ルータにログインして、チャンネル設定から チャンネルを40を選択するように指定した。

参考情報

11 Apr 2018, 23:28

Futirismo Blogを WordPressから Hugoに移行しました

このブログは、WordPress と 賢威テンプレートでながらく運営してきたのだけれども、 不意にべつのブログエンジンに乗り換えたくなってきた。

  • WordPressよりもモダンな感じがいい、シンプルな感じがいい
  • Markdownで書きたい
  • デプロイとかコマンド一つでやってのけて、かっこよくふんぞり返りたい
  • PHPとかMySQLとか、一世代前なもののような気がしている
  • 100年続くブログを作りたいので、DBにデータがあるよりかは、プレーンテキストで処理したいところだ。

静的サイトジェネレータというものがWordPressのような 動的サイトの対抗馬として人気を集めているらしい。 動的サイトは、閲覧者の要求によって、DBアクセスをして情報を収集して、ページをその場で生成するので、時間がかかる。 それに対して、静的サイトはあらかじめ生成されたものを表示するだけなので、早い。

静的サイトジェネレータに移行を検討してみた。以下が候補。 - Hexo - Hugo - Jekyll - Octopress

Hugo がよさそう。2018年もっとも勢いがありそうなので。

また、Hugoの特徴としては、Go 言語でかかれていて、 他のテンプレートエンジンに比べてとても高速なようだ。

また、Gitで記事を管理して、pushと共にサイトにdeployするしくみを導入したい。 しらべてみると、netlifyがイケてる。 netlifyはデプロイ先の場所を無料で提供してくれるWebサービス。

というわけで、Hugo と Github とNetlifyという組み合わせでのサイト構築をしてみた。

途中のカスタマイズは記事に書くのは省略するが、なんとか移行完了。

大きな課題は、過去記事の多くをWordPressのPluginの助けを借りていたため、 Markdownに変換してもうまく情報を引き継げない。

これは手動で修正していくしかないかな。。。

30 Mar 2018, 16:27

xgboostの学習をtensorboardで可視化してみた

はじめに

Google の TensorBoardは、TensorFlowの学習をクールに可視化する。今回、xgboostや scikit-learnの学習結果を、TensorBoardで可視化できないかなと調べたところ、方法を見つけた。

tensorboard_logger

tensorboard_loggerをつかうと、tensorboardで表示できる形式でログ出力できる。

これとxgboostの callbacksの機能を利用して学習の結果を可視化する。

https://gyazo.com/9da25151162b5e5db0106a55439ef647

26 Mar 2018, 20:38

Emacsでデータサイエンス用環境構築(Python)

はじめに

肥大化してデブになった emacs設定を一旦捨て去り、一から作り直すことにした。

デブは自分のお腹だけで十分だ!(名言)

Motivation

以前は、こんな感じの設定ファイルを作っていたのだけれども、複雑になりすぎた。

また、データサイエンスをやるにつれて、以下のようなことがあり、Emacsを使いたくなってきた。

  • 自宅サーバにsshで自習室からつないで作業することが多いので、Pycharm使えない。
  • Jupyter Notebookを使うことが多いが、Jupyter Notebookでは、スクリプトかけない。
  • 今まで素の Emacsでしのいできたのだけれども、辛くなってきた。
  • ターミナルかっこいい\(o)/

目指す姿

  • データサイエンス、もっと言えばPythonに特化した環境を作りたい
  • 軽い環境を作りたい
  • できるだけシンプルにしたい

Environment

  • Ubuntu 16.04
  • Python 3.6(Anaconda)
  • Emacs 25.x

最新版Emacsを投入

まずは、Ubuntuに25系のversionをインストールする。

sudo add-apt-repository ppa:kelleyk/emacs
sudo apt-get update
sudo apt-get install emacs25
sudo update-alternatives --config emacs

リポジトリ & 設定ファイルを作成

.emacs.dを gitで世代管理して、githubにバックアップしたい。まずは、emacs用のリポジトリを作成。

init.elも作成。ここを参考にして、カスタムディレクトリを起点に起動できるように記述。

(when load-file-name
  (setq user-emacs-directory (file-name-directory load-file-name)))

続いて、このリポジトリを利用して起動するためのスクリプトを作成して、パスの通ったところに置く。

#!/bin/bash                                                                                                                                                                                                          
emacs -nw -q -l /home/tsu-nera/dotemacs-for-data-science/init.el $1

パッケージ管理をどうするか?

以前はuse-packageを使っていた。しかし、今回はシンプルにしたいので、デフォルトで搭載されているパッケージ管理ツール package.elを使うことにする。以下の記事によると、25.1からはインストールされたパッケージが package-selected-package 変数に保持されるようになったらしい。

以下の設定を inti.elに書くことで、custom.elに設定を吐き出すようにする。

(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(when (file-exists-p custom-file)
  (load custom-file))

package-installでインストールできるパッケージを増やすために、リポジトリを追加する。

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(fset 'package-desc-vers 'package--ac-desc-version)
(package-initialize)

Python開発環境

ここからが本番! データサイエンスのために Python開発環境を整える。過去記事を参考に(古くてあまり参考にならないですが)、設定を書いていく。

python-mode - メジャーモード

メジャーモードはデフォルトの pythonパッケージではなく、python-modeをつかう。なんとなく。

(require 'python-mode)
(add-to-list 'auto-mode-alist '("\\\.py\\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))

flycheck, flake8 – 静的解析

Pythonの静的解析ツールとして flake8, それをつかうためのインタフェース flycheckを入れる。

pip install flake8

python-modeのときだけ有効。

(defun tnoda/turn-on-flycheck-mode ()
  (flycheck-mode 1))
(add-hook 'python-mode-hook 'tnoda/turn-on-flycheck-mode)

jedi – 自動補完

jedi は pythonのための 自動補完ツール。

pip install jedi


(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)

jedi は Emacsの補完ツール , auto-completeを使っているので、その設定もしておく。

(require 'auto-complete-config)
(ac-config-default)
(global-auto-complete-mode t)

yapf – 自動フォーマット

自動でいい感じに整形してくれるツールを入れる。autopep8という古参なツールもあるけれども、新しい方を採用。

pip install yapf


;; py-yapf - auto format                                                                                                                                                                                             
(require 'py-yapf)
(add-hook 'python-mode-hook 'py-yapf-enable-on-save)

ひとまず完成した init.el

04 Mar 2018, 10:41

Futurismoブログ6周年〜今までの振り返り

はじめに

このブログをはじめて6年が立ちました。6年というと、一つの区切りのような気がします。そこで、今回は6年間の興味の移り変わりと成長を過去記事とともに振り返ってみようと思います。では、どうぞ。

2012年3月 〜 2013年3月 ソフトウェア開発者としての幕開け

2012年3月10に、初めてブログを立ち上げました。

立ち上げたきっかけは、あまり覚えていないのだけれども、たぶんアフィリエイトで一発あててウハウハしたかった気がした(笑)。睡眠やファッションや食事に関するアフィリエイトブログが先に立ち上がって、Wordpressでゴニョゴニョしたことをまとめるためのブログだった気がする。このブログは、賢威というアフィリエイト界隈では有名なWordPressのテーマを使って作成している。賢威を買ってとりあえず立ち上げてみた、そんなところだろう。

しかし、この立ち上げが、技術ブログとして細く長く続いて今日に至るとは、誰も想像だにしなかった。この技術ブログを立ち上げることで、自分のエンジニアとしての意識が改革され、Outputをすることを意識して、継続的にInputをする習慣がついたのだった。

新卒で働きはじめてからブログをはじめるまで、家で技術的なことを学んだり、プログラミングをしなかった。家でそういうことをすることは、社畜だと思っていた。プライベートはなんか気晴らしをしてリフレッシュするのが良いと考えていた。

しかし、ブログをはじめてから、少しずつだけれどもプライベートでも技術的なことを学び始めた。時間ができると、プログラミングの勉強などをするようになった。これは0が1になった、とても大きな心の変化だ。きっかけがWordPressの保守という瑣末なことだったけれども、これがなかったら、自分の今までの変化はなかった。ちょっと大げさだが、このブログのはじまりが、自分のソフトウェア開発者のはじまりだった と言える。

この年に夢中になったこととして、iRemocon Hack というものがある。

今、Google Homeや Amazon Alexaなどのスマートスピーカーが売れているが、その当時、スマートホームというものがまだ流行っていないときに、自分のお家ハックをして楽しんでいた。

もうひとつ、夢中になったことがある。それは、TDDだ。当時、まだC言語しか知らなかったけれども、C言語でテスト駆動開発をする本に巡りあい、熱心に読んだ。

この記事、はてなブックマークではじめてバズッた記事だった。少しびっくりした。これをきっかけに、TDDを実務で試してみたいという気持ちが高まり、Google TestやGoogle MockというOSSを調べ始めた。OSSに触れたのもここが初めて。

2013年4月 〜 2014年3月 MOOCをはじめる

Jenkinsや、Eclipse、Cygwinといった、開発環境周りに興味を持ち始める。Eclipse関連の記事が多め。このころは、まだEmacsはあまり使っていなかった。githubを使い始めたのも、この年が初めて。

これをきっかけに、dotfilesをいじることにだんだん興味が移り始める。zshやら、cygwinやらscreeenなどのターミナル環境がカッコいいと思い始める。

このころ、vmwareに CentOSやUbuntuを入れて、Linuxをいじり始める。普段使いは、Windowsなのだったけれども、ターミナルへの興味を元に、コマンドラインの世界へと入っていく。年が明けると、Linux愛が深まり、ついにはWindowsと Linuxのデュアルブートに踏み切るまで至る。

また、TopCoderを知り、SRMに少しずつ参加を始める。アルゴリズムとデータ構造をC++で学び、C言語しかデキない人から、脱却をスべく、C++を学び始める。

MOOCとの出会いが、自分の勉強を加速させる。TopCoderがきっかけとなり、アルゴリズムを学ぶために、courseraの Algorismsと C++の講義を取る。

これらはとても難しかったのだけれども、このレベルのものを海外の学生は勉強していることを知り、焦りを覚える。そして、コンピュータ・サイエンスをMOOCを通じて学び直そうということを計画しはじめる。この決意がなければ、今日30以上のMOOCを受講することもなかっただろう。そして、この決断がなければ、険しい道を進むこともなく、貧弱プログラマになっていただろう。

この年は、C++, Java, Rubyを学んだ。もう、C言語しかできないひよっ子プログラマではない。

2014年4月 〜 2015年3月 Emacsが好きになる

ターミナル環境がすっかり気に入り、Emacsへの愛が高まる。Emacs好きならば誰もが思うように?、Emacsから出たくなくなり、何でもEmacsでやろうとし始める。Linuxへの愛も感極まり、ついにはLinuxマニアの大本命、Arch Linuxをインストールする(そして、これはアップデートでぶっ壊れてUbuntuに落ち着く)

また、この年もMOOCを貪欲に受講した。MOOCを通じて、新しいプログラミング言語を 2ヶ月に1つは挑戦するという、ちょっとおかしな状況。

仕事でJavaをやらせてもらい、デザインパターンを次々にマスターしはじめる。仕事と普段の勉強が相互に刺激しあい、新しいことをよく吸収することができた。

2015年4月 〜 2016年3月挫折、そして燃え尽き症候群

MOOCの勉強に陰りがみえはじめる。いろいろと講座を受けるのだが、難しくて途中でやめてしまうことが多いのだ。そして、趣味プログラミングもなかなかうまくハマることができない。悪い方向へ傾き始めると、どんどんうつが進行していった。自分のプログラマとしてのアイデンティティが揺るぎ始めた。

そして、12月、ついに倒れる。うつ病で休職。

ゲームオーバー、つらい。

唯一、この年でハマったことがあった。PythonによるFXシステムトレード。これによって、5万損したのだけれども、この取り組みは今考えてもとてもおもしろかったと思う。

2016年4月 〜 2017年3月 プログラミングから離れた一年

倒れたあとは、プログラミング恐怖症になってしまい、プログラミングから離れていた。なにをやっていたかというと、TOEICの勉強ばかりしていた。勉強時間を振り返ると、およそ1700時間、凄すぎ、暇すぎ。

2017年4月 〜 2018年3月 AIブームに便乗して復活

復職するためには、プログラミングともう一度向き合う必要があり、少しずつプログラミングの勉強をはじめた。世は、第4時機械学習ブーム到来。私も、世の中の流れに乗って、機械学習を勉強し始めた。有り余る時間を使って、MOOCでディープラーニングを勉強した。それでも時間があまり、強化学習をしたり、データサイエンスしたり、Kaggleや DeepAnalyticsをした。

8月、ようやく復職。なんとか、復活しました。復職後は、窓際な仕事でまったり過ごすかと思ったら、うつ病をぶり返しかねない激務な環境に放り込まれる。データサイエンティスト養成講座に通って、ほそぼそとデータサイエンスの勉強は続ける。仕事がはじまったら、忙しさに飲み込まれてほとんど勉強できてない。

おわりに

まとめると、成長のためのイベントは3つあったと思う。

  • ブログをはじめたこと
  • MOOCをはじめたこと
  • 休職したこと

プログをはじめたことで、勉強の習慣ができた。MOOCをはじめてコンピュータ・サイエンスをがむしゃらに勉強することで、遅れてスタートしたキャリアがなんとか人並みに追いつくことができた?そして、休職して復職したことで、方向性を変え、今までなんのために勉強してきたのかを振り返り、目的を持って勉強するようになった。

どうすれば成長できるかは、将来の事なんてわからないし、その時の運もあると思うけれども、恐れずにこれからも頑張っていきたい。努力することだけは忘れずにしたい。

04 Mar 2018, 05:16

個人用ライフログ環境をmattermostで構築しました

はじめに

現在、ひとりslackにハマっている。チャンネルを話題ごとに分けることができたり、記事のメモを気軽に投稿できるのがよく、ひとりで大盛り上がりである。以下のようなチャンネルを作っている。

  • book
  • diary
  • tech
  • gtd
  • kaggle
  • mooc
  • work

しかし、あまりハマりすぎて、フリープランの壁にぶつかる。独りslackはフリープランで10000件の履歴という制限があるので、これはライフログの観点からよくない。独りtwitterも検討したのだけれどもチャンネルが分かれていないのが使いづらい。

そこで、slackのクローンのOSSである mattermost を導入することにした。

mattermostのインストール方法は、Linux Nativeな環境にインストールする方法と、dockerをつかう方法がある。今回は、Linuxに直にインストールする方法を選んだ。

環境

  • Ubuntu 16.04 LTS
  • mattermost 4.7.2
  • mysql

preview

まずは、mattermostがどんなものか確認してみよう。mattermostがどんな感じかは、demo用お試しサーバにアクセスすると確認することができる。

または、 preview用の dockerを imageを試すことで確認できる。

インストール

mysqlのインストール

mysqlのインストールをし、mysqlの設定をする。

sudo  apt-get  install  mysql-server
mysql -u root -p


mysql>  create  user  'mmuser'@'%'  identified  by  'mmuser-password';
mysql>  create  database  mattermost;
mysql>  grant  all  privileges  on  mattermost.*  to  'mmuser'@'%';
mysql>  exit

mattermostサーバのインストール

最新版の アーカイブをダウンロードする。

ダウンロードしたものは、解凍して、/opt配下に置く。

sudo mv mattermost /opt
sudo  mkdir  /opt/mattermost/data
sudo  useradd  --system  --user-group  mattermost
sudo  chown  -R  mattermost:mattermost  /opt/mattermost
sudo  chmod  -R  g+w  /opt/mattermost

/opt/mattermost/config/config.jsonを MySQL用に編集する。

"DriverName""mysql" に。 DataSource を以下のように変える。

"mmuser:mmuser-password@tcp(127.0.1.1:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"

さあ、ここまできたら試してみよう。

cd /opt/mattermost
sudo  -u  mattermost  ./bin/platform

これて起動して、 matter mostがたちあがれば成功! 簡単だね!

mattermostサービス起動

手動起動が成功したならば、次は自動起動。サービスに登録して、システム起動時に起動する。

/lib/systemd/system/mattermost.serviceを修正する。

\[Unit\]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

\[Service\]
Type=simple
ExecStart=/opt/mattermost/bin/platform
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

\[Install\]
WantedBy=mysql.service


sudo  systemctl  daemon-reload`
sudo  systemctl  start  mattermost.service
sudo  systemctl  enable  mattermost.service

これで立ち上げ完了です!

設定

ここからは、mattermostの設定をしていきます。

Slackデータのインポート

まずは、slackの過去データを エクスボートして、mattermostにインポート。

日本語部分検索対応

mattermostでは、日本語検索に難がある。現在、mysqlの方に対処方法があるので、それを試す。postgresは知らない。

/etc/my.conf作成。

systemctl restart mysql
mysql mattermost -u mmuser -p mmuser-passoword


mysql> ALTER TABLE Posts DROP INDEX idx\_posts\_message_txt;  
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx\_posts\_message_txt (\`Message\`) WITH PARSER ngram COMMENT 'ngram reindex';

他にもいろいろ設定したけれども、細かいのでココでは省略。

おわりに

結構時間がかかったのだけれども、なんとか個人用のライフログ環境がmattermostで構築できました。

27 Feb 2018, 13:56

プログラマになりたい

プログラミングの経験値をソースコードのステップ数で測るのは間違いかもしれないけれども、参考にはなる。仕事で、ほとんどプログラミングを仕事でさせてくれない気がしてきたので、本当にそうなのか、振り返ってみた。

職務履歴はgithubで管理している。

  • ETERNUS DX フォームウェア開発 201004-201401
    • 1000 C言語
    • 2000 C言語
  • 統合保守エンジン開発 201402-201407
    • 2000 Ruby
  • WAN 高速化開発 201408-201502
    • 4000 Java
  • AGL プロジェクト 研究開発 201503-201506
    • なし
  • ServerView Infrastructure Manager 201507-201512
    • なし
  • 現在
    • 1000 Java

合計で、1万ステップいくかいかないかかな。8年間で、これだ。泣けてくるな。

自分はプログラミングが好きで、プログラマになりたいのだけれども、これではプログラマ(笑)もいいところだ。プログラミングが得意でないからやらせてくれないのか、それともやらせてくれないからいつになっても得意にならないのか。

こんな環境に耐えて、いつかたくさんプログラミングをさせてくれることを夢見て待っている自分はなんて忍耐強いんだろう!社畜だなぁ。しかし、ここ数年だと、あまりにプログラミングをさせてくれないので、ノイローゼになって会社を休職してしまった。プログラマになりたい。

24 Feb 2018, 20:22

futurismo.fm 1. Futurismo.fmをはじめました

 

futurismo.fmをはじめたきっかけ、1月2月で散財したガジェットについて話しました。

show notes

  • 24 Feb 2018, 20:02

    tsu-neraが気になった技術のことをゆるく語るPodcast、Futurismo.fmをはじめました

    はじめに

    最近、きまべんでgaaamiiiさんとやりとりすることがあるのだけれども、この前「くもキャスト」というPodcastを運営していることを知って、結構驚いた。自分よりも若い世代の人たちが、podcastを通じて情報を発信しているところに共感した。

    また、Udemyを眺めていたら講座の中で、podcastをつくってみようというという講座があったので見てみた。内容は陳腐で参考にならなかったものの、タイトルだけ役に立った。

    もちろんブログで情報発信するのはしているけれども、声で情報発信するのも斬新で面白いかもしれない。というわけで、とりあえずやってみようということでやってみた。

    Futurismo.fm の立ち上げ

    Futurisimo.fm 放送局の立ち上げである。

    SoundCloudで音源が公開できるときいたので、ここで音源を公開していこうと思う。立ち上げについては、ゆーすけべーさんの資料がとても役に立った。

    更新頻度は、まあ月に1回更新できればいいかな。一回の分量は10分くらいを目安に。

    内容は、ブログで発信しているような、興味を持った技術情報やライフハックについて語っていこうと思う。

    というわけで、これからよろしくお願いしますm(._.)m

    12 Feb 2018, 11:36

    Google Homeで DI.FMのTech Houseを聴く

    はじめに

    プログラマーならば、テクノ・ミュージック、ですよね。

    とてもとてもニッチな小ネタだけれども、誰かの役に立てれば。

    自分は、作業用音楽として、Digitally Importedの Tech Houseを溺愛している。

    テクノ・ミュージックを聴くと、テンション上がって作業がとても捗るのだ。Google Homeを購入したので、せっかくいいスピーカーなので、これで聴きたい!

    ということで、Digitally ImportedのTech House のチャンネルを聴く方法を試した。もちろん、同様の方法は、JazzRadioでもいける。

    ChromeCastできくとwifiが切れる

    まず思い付いた方法は、Google Chromeのキャスト機能を利用して、Google Chromeで流れている音楽をGoogle Homeに転送して聴く方法。

    これでうまく行った、と思いきや、なぜかwifiが1分もするとブツブツ切れてしまう。失敗。

    iPhone経路で聴くことに成功

    調査を続けると、Digitally Imported が Chromecastをサポートしているとのこと。

    試しに、iPhoneアプリを起動してみて、上記記事のようなアイコンを押すと、なんと流れた!おおーっ。

    パソコン経由で聴くことに成功

    欲を入れば、OK Google, テクノ・ミュージックかけて、で音楽を流したい。なので、パソコンからやる方法を調べた。pychromecastを使えばいけた。

    まずは、digitally importedのstream urlをしらべる。

    次に以下のスクリプトを書いた。

    #!/usr/bin/env python
    import pychromecast
    
    def play_mp4(url):
        cast.wait()
        mc = cast.media_controller
        mc.play_media(url, 'audio/mp4')
        mc.block_until_active()
    
    chromecast_name = "Main"
    chromecasts = pychromecast.get_chromecasts()
    cast = next(cc for cc in chromecasts if cc.device.friendly_name == chromecast_name)
    
    play_mp4("http://pub2.diforfree.org:8000/di_techhouse_hi")
    

    これを実行すると、Tech Houseが流れた。いえい!あとは、こことかでやった方法を応用して、声のインタフェースを用意すれば完成!