2016年12月25日日曜日

最近便利だと感じたES記法とかテクニックいくつか

# 便利だと感じたES記法とかテクニックいくつか はじめに: この記事は田胡研アドベントカレンダー2016 25日目の記事です. こんにちはフロント駆け出しエンジニアのnamazuです. 今日は最近JavaScriptを書いていて便利だと感じた記法をもう一度ちゃんと調べるためにもいくつか紹介していきたいと思います. ES6の記法だったりもするのでブラウザで使うには[Babel](https://babeljs.io/)を通してくださいね(´・ω・`) # const,let 定数とスコープを限定する変数の定義が可能です. varは捨ててこっちを使うといいですね. constとimutabule.jsを組み合わせて安全なJSプログラミングをしましょう. ```js // 参照変更不可 const HOGE = 'hoge' { let fuga = 'fuga' } // undefined console.log(fuga) ``` [MDN const](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/const) [MDN let](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let) # アロー関数式 ```js var f = function (msg) { console.log('hoge') } f() ``` と書いていたのが ```js var f = (msg) => { console.log(msg) } f() ``` と書けるようになりました. ついでにthisをうまく束縛できます. functionと連打しなくてよくなって見た目がよくなりましたね! 注意ですが、prototypeベースのクラス定義をしているときにアロー関数を使うと関数内のthisがグローバル(関数を定義したところのコンテキスト=普通グローバル)になります. 稀に嵌るので気を付けましょう. [MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions) # 分割代入 importとかで何だかんだ使ってしまっていたりする記法で便利なのでよくわからないまま使っていることが多い記法です. 知っておくと便利です 普通に使うときに一番便利だったのはネストの深いオブジェクトを簡単に引く時で ```js const store = { state: { information: { title: 'hoge', summry: 'fuga' } } } // のようなオブジェクトがあったとして // stote.state.information.title と summeryを参照するとき const {title, summery} = store.state.inforamtion console.log(title) // => hoge console.log(summery) // => fuga ``` こんな例があります. 他にも関数に簡単に引数渡したりとかするときに使えます. [MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) # クラス構文 今までprototypeをうまく使ってクラス作ってきましたがclass構文が最近は使えます. ただこの構文シュガーシンタックスなのでいままでと中身は違いません. prototypeベースのクラスの作り方は[ここ](http://www.yunabe.jp/docs/javascript_class_in_google.html)とか見るといいかもしれません. これまで面倒だったのが ```js class Human{ constructor(name, age) { this.name = name this.age = age } speak() { return `こんにちは${name}です. ${age}歳です.` } } const human = new Human('hoge', 20) console.log(human.speak()) // => こんにちはhogeです. 20歳です. ``` こんな感じで簡単に行けます. extendsとかもちゃんとあります. jsでも十分強力ですがTypescriptとかだともっと威力発揮します. # 式展開 JSにも式展開があります. 'をやめて`でくくるのを忘れないでください. ```js const hour = 20 console.log(`今は${hour}時です.`) ``` # デフォルト引数定義 いままでよく ```js const f = function (msg) { msg = msg || 'hoge' reutrn msg } console.log(f()) // => hoge ``` みたいなことをしてundefined対策をしていました. このhogeみたいなのをデフォルトで定義できます. ```js const f = function (msg = 'hoge') { return msg } ``` こんな感じに. [MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope/Default_parameters) 便利記法は山ほどQiitaに記事があるのでこれくらいにします. いくつかもしかしたら便利かもしれないJSテクを紹介していきます # 連想配列の値ベースで配列を検索する ```js const array = [ { id: 1, title: 'hoge' }, { id: 2, title: 'huga' }, { id: 3, title: 'saga' } ] // こんなarrayがあったとします  // ここからid=2のtitleをhugahugaに置き換えたいと考えます. // 配列の何番目にid2のオブジェクトがあるかわからないとします. // そんなとき const i = array.map(v=>v.id).indexOf(2) if (i > -1 ) { array[i].title = 'hugahuga' } // こうします ``` 検索対象のプロパティだけの配列を写像して作成しそこからindexOfで何番目か求めます, indexがわかったら元の配列に添え字アクセスし書き換えます. もっといい方法あったら教えてくれると幸いです. # 即時関数を短く 即時関数は名前空間区切るために使うあれ (function(){})() ですねあれを短くします. ```js +function(){console.log('hoge')}() ``` +とか演算子をつけると即時実行できます. +じゃなくても!とかもろもろで動きます. テクなんかではなくてただの闇記法ですね bootstrapの中に存在するって聞いたことがあります. # ArrayLikeObjectをなめる dom操作は人のすることじゃなくなったから最近はほぼ使わないけど documet.querySelectorAll('.hoge') みたいなので帰ってきた配列をなめるときに使うテク.  そのままforEachすると回せないので... ```js [].prototype.forEach.call(document.querySelectorAll('.hoge'), function(node) { node.innerText = 'hogehoge' }) ``` こうすると回る. ほかにもいろいろこれをやる闇っぽいテクがあります. # 終わりに 今回は最近好きなES記法ともしかしたらためになるかもしれないのコーディング例を示しました. 便利記法は今回紹介しただけにとどまらず大量にあるのでまた機会あったら書けたらなと思います. JavaScript好きな人が増えるといいな(´・ω・`) あとこのコーディングすげぇってコード見かけたらぜひ教えてくれるとありがたいです. そういえば今日はクリスマスです,昨日も今日も私は家でコード書いてました. ひきこもるのもよろしくないと思うので今夜はどこか一人で食べに行こうと思います. それでは.

2016年12月20日火曜日

Macの作業効率が上がる有料アプリ3選

Translate tab

 どんなに強がっても英語読めない!そんなときにわざわざ【Google 翻訳】なんて検索するのはとてもダルい。作業効率がかなり落ちます。そんなときに使ってほしい。

例えば、git pullした時にコンフリクトが起きたんだけど、
「both added」の意味がわからない。

both addedってなんだ。。。

both addedを貼り付け

翻訳完了


わざわざgoogleを開く必要がなく、気軽にわからない言葉を検索できるようになり作業効率がかなり上がりました。「だいたいこういう意味だろう。」が減り、エラーの対応速度も早くなった気がします。


PopClip

「この記事共有しよう!」っと思ったときにわざわざTwitterを開くのが面倒くさい。
「うわ、エラー起きた。。。なんて書いてあるかわからないからコピーしてTranslate tabに貼り付けて翻訳しよ」わざわざコピーしてメニューバーのアイコンをクリックして貼り付ける。面倒くさい。

こんな時にPopCLipを使ってほしい
文章を選択してボタンを押すだけで様々なアクションが可能

選択

つぶやく!

翻訳!

他にもEvernoteに自動でメモったり、付箋を貼れたり、選択したコマンドを自動で実行できたりとかなり便利!もちろんSlackにも対応してるよ!


Window Tidy Enabled

「ディスプレイが1つしか無いけどQiitaの記事見ながら作業したいなぁ。。。あとBGMも流したいなぁ」ってときに「Window Tidy Enabled」が使えます!
windowをきれいに分けてくれる!だけです。 でもWindowのサイズを予め設定することができるので直感的に好きなサイズでWindowを並べることができる。わざわざ自分でウィンドウサイズを整える必要はなくなります。




色々使ってみた感想

「Twitterを開いてツイートする」この行動のみを見ると大したコストにはなりませんが、その行動によって現在の作業が一度止まってしまい、意識がTwitterに写ってしまうと考えるとかなり大きなリスクではあると思います。翻訳の件も同様です。

その小さなリスクを金で回避できるならそれってとっても幸せだなって貧乏人の私がみんなに語りかけるのでした。




2016年12月19日月曜日

SwiftでHelloWorld

SwiftでHelloWorld

AdventCalendar2016 15日目の記事です。B17の川上です。

Swiftについて書こうと思ったものの、何を書いていいのかわからずこれに辿り着きました。少しでもSwiftに興味を持っていただけたら嬉しいです。ぜひiOSアプリ作ってみたいと思った方はぜひお声掛けください!

Xcodeのインストールと起動

AppStoreから入手してください。もしくは、ここ から入手してください。Ubuntuでもダウンロードできます。(未検証)一番上のSwift 3.0.2で大丈夫です。(2016/12/19時点)

今回紹介する環境

  • macOS Sierra 10.12.2
  • Xcode 8.2

起動とプロジェクトの作成

Xcodeを立ち上げて、下記画面から「Create a new Xcode project」を選択します。

「Single View Application」を選択します。

作成するプロジェクトの情報を入力します。今回は下記画像のように入力します。

保存する場所を聞かれるので、好きな所に保存してください。

プロジェクトが作成されました。

コンソール上にHelloWorld

左側にある、フォルダとファイルの一覧から「ViewController.swift」を選択します。そして、「override func viewDidLoad()」内に「print("Hello World")」を追加してください。

上記画像の左上にある再生ボタンっぽいボタンをクリックするとビルドします。しばらく待っているとシミュレーターが立ち上がり、プログラムが実行されます。エディタの下にあるコンソールエリアに「Hello World」と表示されます。

コンソールが出ない場合は右上にオレンジ枠で囲ってある中の真ん中を押せば出ると思います。

シミュレーター上にHelloWorld

左側にある、フォルダとファイルの一覧から「Main.storyboard」を選択します。次に、右下のユーティリティエリアから「Label」を探します。

真ん中のViewController(画面みたいなやつ)に適当にドラッグ&ドロップします。そして、先程Labelを追加したユーティリティエリアのすぐ横にある、右から3つ目の小さいボタンを押します。下記画像のように、「Horizontally in Center」と「Vertically in Center」にチェックを入れます。さらに、「Update Frame」を「Items of New Constrains」にして「Add 2 Constrains」を押します

下記画像のように線が追加されればOKです。Labelをダブルクリックして「Hello World」と入力しましょう。

最後に、左上にある再生ボタンをクリックしてビルドします。シミュレーター上に「Hello World」と表示されれば成功です!!


iOSアプリ開発は意外に奥が深くておもしろいです。最近ではサーバサイドSwiftがホットなので勉強しようと思います。余力と時間があれば、iOSアプリ開発におけるアーキテクチャについて書いてみようかな…

2016年12月18日日曜日

THETA Sを使ってライブストリーミング

## AdventCalendar2016 (14日目) 気がついたらアドベントカレンダーの日程に名前が追加されていたb17の岸本です。 今回は研究室に飾ってあったTHETAを使ってライブストリーミングをしてみたので これについて書いてみようかなと思います。 __ THETA  ... って? __
THETAとはRICOHから発売されている360度撮影できる全天球カメラです。 最近、360度パノラマが何かと話題らしくGoProをサイコロ状に6台つけるリッチな 方法も存在するようです。 話が逸れてしまいましたが、そんな中THETAのFWが最近アップデートされてUSB 接続で1920×1080/30fps出るようになりました。なのでYouTubeを利用して360度 ライブストリーミングをやってみました。ちなみに私はライブストリーミングに 関してニコ生でよくわからない配信に草を生やしたぐらいの経験しかありません。

2016年12月14日水曜日

MeCab辞書の特徴をまとめてみた

AdventCalendar2016 13日目

MeCabの辞書の特徴をまとめてみた

どうもB16のtokineko3です。学習用の言語処理でよくMeCabやJumanを使用するのですが、
今回はMeCabで主に使用されると思う辞書について調べてまとめてみました。

  •  mecab-ipadic-NEologd
    MeCabの公式サイトでIPA辞書をダウンロードして満足してはいけない。
    IPAは更新が止まっているらしいので最近の流行語とかに対応してくれません
    ○特徴
    MeCab の標準のシステム辞書では正しく分割できない固有表現などの語の表層(表記)とフリガナの組を約295.5万組(重複エントリを含む)採録、最低でも週2回更新してくれる辞書
    アニメのタイトルや最近の言葉に対応してくれるのでとても助かる。

    ○欠点
    固有表現に弱い
     ・人名や製品名、若干違うものも固有表現カテゴリに含まれてしまう
     ・固有表現に関してふりがなの対応が間違っている  など

    ○遊んでみる
    例文:今期アニメの一押しはオカルティックナインと魔法少女育成計画です。
    タイトルの英語名まで出てる凄い。twitterの分かち書きとかに最適

    ・辞書なしver
  • 魔法少女育成計画が別れちゃってます 
  • NAIST-jdic
    ○特徴
    IPAdic の後継で固有名詞以外の全エントリをチェック(可能性に基づく品詞の整理)し、 表記ゆれ情報を付与し、複合語の構造を付与する作業を行っている辞書。

    表記ゆれってなんだ?
    >「メモリー」「メモリ」、「引っ越し」「引越し」などの表記違いの事  成程…
    茶筌でも使える辞書らしい
    基本IPAの強化版なので最近の言葉にはあまり対応してくれない
  • UniDic
    ○特徴
    国立国語研究所で規定した「短単位」という揺れがない斉一な単位で設計されている辞書
    アクセントや音変化の情報を付与することができ、音声処理の研究に利用することができる
    口語的な文章にも強いと期待されている。

    ○種類がある
    現代語版…現代の言葉を対象
    近代語版…近代の論説文(明治普通文)を対象
    中古和文版…古典、古文を対象
    上記の3種が存在する。現代だけでなく古い言葉にも対応しているとはすごい。

    ○試す
    IPAと比べると表示が全然違います。分類が細分化されてますね。
他にもJuman辞書とかがあったがIPAのが優れている印象。
用途に合わせて色々と試してみよう。

2016年12月12日月曜日

Pineappleのご紹介 ~それJupyterで良くない?~

## この記事はAdventCalendar2016 12日目の記事です 皆さんはじめましてB16のntyboyです。ナウいヤングな田胡研ボーイズ&ガールズのために pythonの環境構築をせずにnotebookが使えるPineappleを紹介します! これは僕イチオシの[踊ってみた動画](https://www.youtube.com/watch?v=BetL-yriso4)です **macOS用です!** ### インストール 公式サイトから[3.5/2.7用のインストーラ](https://nwhitehead.github.io/pineapple/)があるのでDL dmgファイルを開いたら/Applicationフォルダに放り投げよう![dunk](http://i.giphy.com/l0MYMFnc1YYEi1a36.gif) ### 使い方 創成課題や研究で使いこなしていると思うので言わずもがなだと思います ### ちなみに この記事は当アプリケーションを使って書きました。次@tokinekoさんお願いします!

2016年12月11日日曜日

Amazon Dash Buttonを使う

この記事はAdventCalendar2016 11日目の記事です(嘘) 今回は今話題のAmazon Dash Buttonを使ってみます. とりあえず普通に説明書通り接続して初回注文を行い500円割引で実質無料の恩恵を受けておきます. ※接続する無線親機の設定で20MHz(65Mbps)の通信許可をしておく必要があります. その後一度アプリからボタンを無効にし,再度設定を行います. その時商品選択画面で何も選ばずに設定ウィザードを終了します. これで準備完了です. あとはボタンを押すとARPで飛んでくるパケットが飛んでくるので同じネットワークにいる端末で受け取れば終わりです. Wiresharkとかを立ち上げた端末でフィルタリングをARPにしてボタンを押すとこんな感じでパケットが来ます. このMACアドレスをキーにしてこのMACアドレスからARPでパケットが来たらプログラムを動かせば良い感じにボタンが利用出来ます. パケットさえ取れれば言語は問わず何でも出来ます. JSとかで書いた記事が多いですがニシキヘビマンなのでこんな感じです. ```python # -*- coding: utf-8 -*- from scapy.all import * def arp_display(pkt): if pkt[ARP].op == 1: # print(pkt[ARP].hwsrc) if pkt[ARP].hwsrc == "XX:XX:XX:XX:XX:XX": print("Amazon dash button Pushed.") print sniff(prn=arp_display, filter="arp", store=0) ``` XX:XX:XX:XX:XX:XXは先程確認したMACアドレスです. コメントアウト外してこれ単品でMACアドレス見つけても良いですがその辺はお好きに あとは受け取ったら任意のコードを実行するようにすればおっけー これでTG研スイーツの在庫がなくなったらSlackに通知するシステムが作れますね! 触ってみたい人がいたら声かけてね おわり

2016年12月10日土曜日

JupyterでPythonの環境を切り替える

# JupyterでPythonの環境を切り替える AdventCalendar2016 10日目 読み方は「ブリオングロード」のbriongloidです JupyterでPythonの環境を切り替えるためにKernelを追加する pyenvでPythonのバージョン管理してるならばglobalやlocalでバージョンを設定しとく Python2系、Python3系を入れるなら以下を実行する ``` ipython kernel install --user ``` 以下のコマンドでも同じことができるが(おそらくJupyterの)バージョン4.0以降で非推奨になったようだ ``` jupyter kernelspec install-self --user ``` 環境を削除 ``` jupyter kernelspec remove python2 ``` virtualenv、pyenv-virtualenvの環境を追加 ``` python -m ipykernel install --user --name py2.7.12-free --display-name "Free (Py2.7.12)" ```

2016年12月9日金曜日

Tips的な何か

この記事はAdventCalendar2016 9日目の記事です(嘘). skyです.3回目です.何回登場するんだろうね. 今回は課題チェックで3年生のPythonを見ててこんな風に書けるよって思ったことでも書いていきます. 3系中心のお話です.

2016年12月8日木曜日

chainerをはじめよう

# chainerについて AdventCalendar2016も八日目、kinsanです 前回ちょびっと触れたような触れなかったような chainerについて書いていきます ## chainerの長所 - わりと読みやすい - 日本製なので日本語で情報が落ちてたりする - pythonで触れる - インストールもお手軽 - 更新も頻繁 - 書籍もそこそこ出てる ## インストール インストールはとてもお手軽~ ``` pip install chainer ``` これだけでインストールされます gpuを使うにはめんどくさい準備が必要です 公式を見ながら環境に合わせて気合い入れて行ってください ## サンプルを動かそう 次はさくっとサンプルを動かしてみましょう [GitHub - pfnet/chainer](https://github.com/pfnet/chainer) ここからcloneしてきてください examples以下を見てみると、 - imagenet - mnist - modelzoo - ptb - sentiment - vae - word2vec などのサンプルが入っています 今回は基本となるmnistを動かしてみましょう 多層パーセプトロンを用いて手書き文字の認識をするサンプルになっています examples/mnistに移動して、 ``` python train_mnist.py ``` と打ち込むことで早速学習が始まります windowsやipythonを使っている場合に正常に表示されるかはわかりませんが、 学習の進度や、終了までの予測時間などを表示してくれるようになっています また、epochごとの学習の制度の推移なども確認できます train_mnist.pyを見てみるとわかりますが、 今回の例は色々な引数で内部のパラメータを簡単に変更することができます gpuを使用することができる人は -g 0で学習の速度が数倍速くなります -bでバッチサイズの変更が可能です -eでepochの数が変更可能です -uでユニットの数が変更可能です 深層学習に興味がある人はパラメータを小さくするとどうなるのか、 違うネットワークを使ったらどうなるのかなど試してみると面白いと思います また、自前のデータで学習してみると結構楽しむことができます 画像処理に興味がある人はimagenet、 自然言語処理に興味がある人はptbやword2vecを動かしてみるといいと思います

2016年12月7日水曜日

Bloggerの記事をマークダウンで書けるようにする

この記事はAdventCalendar2016 7日目の記事です. 早くも2週目です.すかいです. 皆さん文章を書く時マークダウンを利用していますか? マークダウンを使うと簡単に良い感じのHTMLが書けるようになります. この記事もマークダウンを利用して書いています. 今回はそんなマークダウンをBloggerで利用できるようにします.

2016年12月6日火曜日

Git LFSってのがあってじゃな

みなさんお疲れさまです. 田胡・柴田研究室AdventCalendar2016 6日目 の記事です. 担当はみんな思ってたよりしっかり書いてビビってるかとかいがお送りします. 今回はタイトル通りGit LFS について簡単に書いていこうかと思っとります. ## そもそもGit LFSとは? みなさんご存知GitHubがオープンソースとして公開しているもので,「Git Large File Storage」(FSなのにファイルシステムではない)と言います. 名前の通りGitやGitHubで,画像や動画などの大容量のファイル扱いやすくするものです. 昨年の10月に正式提供が発表され,GOlangで書かれてます. ## Git LFSの仕組み 通常のGitリポジトリとは別に Large File Storage というでかいファイル専用のサーバ(以下LFS)を用意します. そして設定した拡張子がpushされたら,Git内に大容量ファイルのテキストポインタのみ残してファイルの実体はLFSにぶち込んでいきます. リポジトリにファイルの実体がない為,圧迫せずに済みます. 仕組みとしては簡単そう... また,このLFSをGitHubは1GB無料で提供してます.(有料で50GB) ## 使ってみる ### インストール [公式](https://git-lfs.github.com/) からインストーラーとってきます. といいつつ私は brew install git-lfs で入れました. インストールが終わったらターミナルでも開いて,以下のコマンドを実行します. ```bash $ git lfs install Git LFS initialized. ``` ### 設定していく まずはテキトーにGitHubのリポジトリを用意してください. 次に LFS で管理させるファイルタイプを設定します. 今回はわかりやすく 「jpg」と「zip」を登録します. ```bash $ git lfs track "*.jpg" $ git lfs track "*.zip" $ git lfs track Listing tracked paths *.jpg (.gitattributes) *.zip (.gitattributes) ``` 登録された情報は .gitattributes に格納されてます. ### 試してみる それでは登録した拡張子のテキトーなファイルをコミットします. この辺は普段通りです. ```bash $ git add .gitattributes $ git add test.jpg $ git commit -m 'LFS test' ``` LFSの管理になったか確認するには以下のコマンドを使います. ```bash $ git lfs ls-files 2e8fa3ded6 * test.jpg ``` うまくいってればハッシュ値とファイル名が表示されるはずです. GitHub上なのでこのままpushすればLFSに自動で上がっていくはず...(実はgitlabで試してるからこの先未検証) せっかく無料なGitHubに1GBつかっちゃおうね〜 ## まとめ 遠くない未来,田胡研インフラに導入していくはずの技術の1つになります. これがちゃんと機能すれば動画や画像もgitで管理できる...たぶん便利!! その為にはgitlabの更新などまだまだ問題山積みです. そんなこんなで簡単なGit LFSの紹介でした.(後で追記したい) おわり ## 次~~ 誰もいないっぽいから先頭もどってすかい氏にお願いします.

2016年12月5日月曜日

pyenvの始め方と使い方

# pyenvの始め方と使い方 田胡・柴田研究室アドベントカレンダー2016 5日目 昨年度にRobi jr.を解体した学部4年のbriongloidです。 Pythonの環境構築をするとき、そこまで必要ではないのですが便利なのでpyenvを使っています。 ここではpyenvの始め方と使い方について書いていきます。 OS: Ubuntu 16.04 LTS - 始め方 必要なパッケージを入れてく ``` apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget git curl llvm libncurses5-dev xz-utils # for numpy, scipy and matplotlib apt-get install -y libfreetype6-dev libblas-dev liblapack-dev gfortran tk-dev ``` したのを実行するとOKのはず ``` PYENV_URL="git://github.com/yyuu" # PYENV_URL="https://github.com/yyuu" # home PYENV_ROOT="${HOME}/.pyenv" PYENV_SH="${HOME}/.bashrc" # local # PYENV_ROOT="/usr/local/pyenv" # PYENV_SH="/etc/profile.d/pyenv.sh" git clone $PYENV_URL/pyenv.git $PYENV_ROOT mkdir -p $PYENV_ROOT/shims mkdir -p $PYENV_ROOT/versions git clone $PYENV_URL/pyenv-virtualenv.git $PYENV_ROOT/plugins/pyenv-virtualenv # 「pyenv virtualenv」を使えるようにする git clone $PYENV_URL/pyenv-pip-rehash.git $PYENV_ROOT/plugins/pyenv-pip-rehash # 「pyenv rehash」を省略できる git clone $PYENV_URL/pyenv-update.git $PYENV_ROOT/plugins/pyenv-update # 「pyenv update」でpyenv及びプラグインをアップデートできるようにする echo "export PYENV_ROOT=\"${PYENV_ROOT}\"" | tee -a ${PYENV_SH} echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | tee -a ${PYENV_SH} echo 'eval "$(pyenv init -)"' | tee -a ${PYENV_SH} echo 'eval "$(pyenv virtualenv-init -)"' | tee -a ${PYENV_SH} ``` 共有のパソコンで全体に反映したいなら#homeの代わりに#localにする。 sudoで利用できるようにvisudoで以下のように編集(homeなら不要) ``` #Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin Defaults env_keep += "PATH" Defaults env_keep += "PYENV_ROOT" ``` 終わったらターミナルを再起動 ``` exec $SHELL -l ``` 適当なコマンドで確認 ``` free-python@freepython-VirtualBox:~$ pyenv version system (set by /home/free-python/.pyenv/version) ``` - コマンド |コマンド|説明| |:--|:--| |pyenv version | 使用してるPythonを表示する| |pyenv versions | 利用できるバージョンの一覧| |pyenv install | Pythonのバージョンを指定してインストールする| |pyenv uninstall | バージョンのアンインストール、仮想環境の削除| |pyenv global | 使用するPythonのバージョンの変更| |pyenv local | 使用するPythonのバージョンの変更、globalより優先される| |pyenv shell | 使用するPythonのバージョンの変更、global・localより優先される| |pyenv rehash | 設定を変更後に反映するために実行する、pyenv-pip-rehashを入れてれば不要| |pyenv which | パスを調べるとき使う| |pyenv prefix | Pythonのディレクトリのパス| |pyenv virtualenv |仮想環境の作成、pyenv-virtualenvのプラグインで使えるようになる| - 使い方 インストールできるバージョンの一覧 ``` pyenv install --list ``` 実行するといろいろ出てくるけど最初の方にある、数字から始まるのが通常のPython Pythonの2.7.12と3.5.2をインストール ``` pyenv install 2.7.12 pyenv install 3.5.2 ``` ダイナミックリンク用のshared objectが必要な外部ライブラリ(Theanoとか)を使用する場合 ``` env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.12 env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.2 ``` 入ってるバージョン確認 ``` pyenv versions ``` 実行結果はこのようになる ``` free-python@freepython-VirtualBox:~$ pyenv versions * system (set by /home/free-python/.pyenv/version) 2.7.12 3.5.2 ``` systemはpyenvではなくUbuntuに入っているPythonを指す。 使用するバージョンを変更するにはglobal,local,shellのいずれかを使う pyenvでは使用するPythonのバージョンを以下のように確認する。 1. 環境変数PYENV_VERSIONに定義されてるバージョンを使う pyenv shellで設定できる 2. 現在のディレクトリの.python-versionファイルに定義してあるバージョンを使う pyenv localで設定できる 3. 親ディレクトリに.python-versionファイルがないか探す。ルートまで1つずつ確認する。 4. グローバルな~/.pyenv/versionファイルを探す。 pyenv globalで設定できる 5. 上記が全てなかった場合はsystemを使う localはプロジェクトに対してとか、共有パソコンならホームディレクトリに使っておくと事故を避けれる。 shellはrootで作業するときとかかな、homeにいれたら使えないかもだけど。 バージョンの変更 ``` free-python@freepython-VirtualBox:~$ pyenv versions * system (set by /home/free-python/.pyenv/version) 2.7.12 3.5.2 free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) 3.5.2 free-python@freepython-VirtualBox:~$ pyenv local 3.5.2 free-python@freepython-VirtualBox:~$ pyenv versions system 2.7.12 * 3.5.2 (set by /home/free-python/.python-version) free-python@freepython-VirtualBox:~$ pyenv shell system free-python@freepython-VirtualBox:~$ pyenv versions * system (set by PYENV_VERSION environment variable) 2.7.12 3.5.2 ``` local、shellで設定した環境は--unsetで解除 ``` free-python@freepython-VirtualBox:~$ pyenv versions * system (set by PYENV_VERSION environment variable) 2.7.12 3.5.2 free-python@freepython-VirtualBox:~$ pyenv shell --unset free-python@freepython-VirtualBox:~$ pyenv versions system 2.7.12 * 3.5.2 (set by /home/free-python/.python-version) free-python@freepython-VirtualBox:~$ pyenv local --unset free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) 3.5.2 ``` Pythonの2系、3系それぞれを設定できる。 ``` free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 3.5.2 free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) * 3.5.2 (set by /home/free-python/.pyenv/version) ``` Pythonの場所を調べる時とか pyenv which python ``` free-python@freepython-VirtualBox:~$ pyenv which python2 /home/free-python/.pyenv/versions/2.7.12/bin/python2 free-python@freepython-VirtualBox:~$ pyenv which python3 /home/free-python/.pyenv/versions/3.5.2/bin/python3 ``` systemの時 ``` free-python@freepython-VirtualBox:~$ pyenv which python2 /usr/bin/python2 free-python@freepython-VirtualBox:~$ pyenv which python3 /usr/bin/python3 ``` パス指定の時に使うと思う pyenv prefix ``` free-python@freepython-VirtualBox:~$ pyenv global system free-python@freepython-VirtualBox:~$ pyenv prefix /usr free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 free-python@freepython-VirtualBox:~$ pyenv prefix /home/free-python/.pyenv/versions/2.7.12 ``` pyenvで仮想環境を使うときはpyenv virtualenvを使う。 2.7.12を使うとき ``` free-python@freepython-VirtualBox:~$ pyenv global 2.7.12 free-python@freepython-VirtualBox:~$ pyenv virtualenv py2.7.12-free Collecting virtualenv Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB) 100% |████████████████████████████████| 1.8MB 713kB/s Installing collected packages: virtualenv Successfully installed virtualenv-15.1.0 You are using pip version 8.1.1, however version 9.0.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. New python executable in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/bin/python2.7 Also creating executable in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/bin/python Installing setuptools, pip, wheel...done. Ignoring indexes: https://pypi.python.org/simple Requirement already satisfied (use --upgrade to upgrade): setuptools in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/lib/python2.7/site-packages Requirement already satisfied (use --upgrade to upgrade): pip in /home/free-python/.pyenv/versions/2.7.12/envs/py2.7.12-free/lib/python2.7/site-packages free-python@freepython-VirtualBox:~$ pyenv versions system * 2.7.12 (set by /home/free-python/.pyenv/version) 2.7.12/envs/py2.7.12-free 3.5.2 py2.7.12-free ``` 仮想環境を使うのはバージョン選択と同じ ``` free-python@freepython-VirtualBox:~$ pyenv global py2.7.12-free (py2.7.12-free) free-python@freepython-VirtualBox:~$ pyenv versions system 2.7.12 2.7.12/envs/py2.7.12-free 3.5.2 * py2.7.12-free (set by /home/free-python/.pyenv/version) ``` これでpyenvについては終わりにします。 環境構築は楽にやりたい反面「しっかりできるようにならないとな」と思ってたり思ってなかったり。 docker使ってみたいなぁ

2016年12月4日日曜日

AdventCalendar4日目 機械学習とかの用語

# 機械学習とかの用語について AdventCalendar2016も4日目、kinsanです ここ数年、機械学習とか深層学習が流行っています 機械学習の用語とか、深層学習との違いがわからなくて困った覚えが昔にあるので 再確認の意味を込めて用語の確認をしたいと思います 研究は強化学習よりなのでそっちの用語多めです - 機械学習 (Machine Learning) 人間が自然に行っている学習能力と同様の機能を、 コンピュータで実現しようとする技術・手法 伊右衛門のペットボトルを見てお茶だと認識できるのも学習の結果ですね - 深層学習 (Deep Learning) 多層構造のニューラルネットワークを用いた機械学習 多層のニューラルネットワークを用いて人間のような学習能力を得ようとします Googleの翻訳とか、AlphaGoもこれ - ニューラルネットワーク (Neural Network) 人間の脳の回路であるニューロンを模したネットワーク構造 ニューロンを近似した関数で示しそれをネットワークにしたもの - パーセプトロン (Perceptron) 人工ニューロンやニューラルネットワークの一種 - CNN (Convolutional Neural Network) 畳み込みニューラルネットワークとか呼ばれたりもする 画像処理に特に強いネットワークの一種 - RNN (Recurrent Neural Network) Recurrent=再帰的ということで、再帰的なニューラルネットワーク 過去の出力を入力のひとつとすることで時系列的な学習ができる 自然言語処理や音声などの連続性に意味があるものに強い - LSTM (Long Short-Term Memory) LSTMはRNNの一種で、長期的な依存関係を学習できる 内容は検索するとわかるけどとてもわかりにくい - 強化学習 (Reinforcement Learning) ある環境内におけるエージェントが、現在の状態を観測し、 取るべき行動を決定する問題を扱う機械学習の一種 例えば囲碁をするAIなら盤面の画像を入力にし、次の一手を決めるとか - 深層強化学習 (Deep Reinforcement Learning) 強化学習と深層学習を組み合わせたもの - DQN (Deep Q-Network) 強化学習の一種であるQ-LearningとDeep Neural Networkを組み合わせたもの 従来の強化学習よりもいい結果が期待できる - DRQN (Deep Recurrent Q-Network) DQNにLSTMを組み合わせたもので、時系列の学習が可能 状態が不安定なときでもある程度精度があがる - DDQN (Deep Double Q-Network) DQNのQ学習の評価の問題を改善したもの DQNよりいい結果が期待できる - chainer PFN(Preferred Networks)という日本のベンチャーが作った、 pythonのDeep Learningフレームワーク - TensorFlow Googleが作ったDeep Learningフレームワークで、C++とpythonに対応している たぶん世界で一番メジャーなDeep Learningフレームワーク - 自然言語処理 (NLP,Natural Language Processing) 人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術 - MNIST (Mixed National Institute of Standards and Technology database) 手書き数字のデータセットで、様々なDeep Learningフレームワークの入門に使われている 例えば自分が研究しているDQNは深層強化学習であり、 深層強化学習は深層学習と強化学習を組み合わせたもの そしてDQNは強化学習の一種であるQ-LearningとDeep Neural Networkを組み合わせたもの 深層学習と強化学習は機械学習の一種である こんな感じなんですかね、間違ってたら申し訳ないです これをみてそれぞれの関係とか、深層学習=Deep Learningであるとか知れたらいいですね

2016年12月3日土曜日

NeoBundle?知らない子ですね。

# VimでMarkdown書いていきたいね。 どうも、AdventCalendar2016 3日目担当になったkentomです。 fhorusが2日目の記事を書くことになった時点で「次は僕だろうなー」って思っていたのに準備し忘れていたことが悔やまれる・・・。 というわけで今回はdeinというvimプラグインマネージャーを導入していきましょう。 dein?NeoBundleでよくね? って思う人もいると思うんですけど、NeoBundleと作者は同じで所謂後継機です。 作者はNeoBundleはオワコンだわって言ったり言ってなかったりします・・・。deinの方が処理速度も速いそうで、検索したら実際に時間測ってる人とかもいたので見てみるといいと思います。 一応[こちら](https://github.com/Shougo/dein.vim/)がdeinです。 ここ見れば解決しちゃうんですけど注意する点とかね。 環境はWindows10 + cygwinです。 ``` mkdir -p ~/.vim/dein curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh sh ./installer.sh ~/.vim/dein ``` これだけですね。 1行目でインストール先のフォルダを作る。 2行目でgithubからインストール用のスクリプトを持ってくる。 3行目で実行するだけです。 僕は実行した時にインストール先のフォルダを指定し忘れていたせいで20分くらい悩んだので気をつけてください。 ``` "dein Scripts----------------------------- if &compatible set nocompatible " Be iMproved endif " Required: set runtimepath^=/Users/[UserName]/.cache/dein/repos/github.com/Shougo/dein.vim " Required: call dein#begin(expand('/Users/[UserName]/.cache/dein')) " Let dein manage dein " Required: call dein#add('Shougo/dein.vim') " Add or remove your plugins here: call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') " You can specify revision/branch/tag. call dein#add('Shougo/vimshell', { 'rev': '3787e5' }) " Required: call dein#end() " Required: filetype plugin indent on " If you want to install not installed plugins on startup. "if dein#check_install() " call dein#install() "endif "End dein Scripts------------------------- Done Complete setup dein! ``` インストールに成功していればこういうのが出てくるはずなので、1行目から35行目までをコピーして.vimrcにペイッて貼り付けます。 30から32行目のコメントアウトを外しておくと``call dein#install()``を自分でうたなくてもvim初回起動時に実行してくれるので便利かもしれないです。 他のプラグインいれたい時は19行目とかから同じように``call dein#add([plugin名])``とうつとまた起動時に自動でインストールしてくれます。これは便利だね。 今回はこれくらいにしておきましょう。また次があればMarkdownをvimで書いてみたりしようかと思います。 明日のAdventCalendarは kinsan かな。 ではでは。

2016年12月2日金曜日

AdventCalendar2日目

田胡・柴田研究室AdventCalendar2016 2日目

こんばんは.

研究室の掃除はしても自室の掃除はしないfhorusです.

指名くれたすかいがハードも少し触ってみたかったって言ってた気がしたのでそこらへんの事をちょろっと.

それで,ここでは基板作るときに使ったEagleの紹介と回路作った時の話を少し書きたいと思います.

Eagleのページ→Eagle

無償版は基板サイズが100*80mmで2層,回路図は1枚までの制限付きです.

僕が作ろうとした基板はライセンスを貰わなきゃ作れないので,そこでもごたごたがありました.
結果的にはEDUのライセンスを貰えましたがweb上だけでやろうとするとメールアドレスが弾かれるので欲しいって人はライセンス要求をメールで行う必要があります.

実際に回路図,ボード図を作成するときには部品のデータシートが必要になるので何か作りたいって思った人は各自用意して望んでください.


まず,Eagleで回路図,ボード図を作成するには部品を定義してやる必要があるので,探すか作るかしてください.

作る場合にはFile→New→Libraryと選択して,部品ライブラリの作製を行ってください.

部品ライブラリにはPackageに外形データを作ってSymbolにpin情報作り,それらを関連付けしてDeviceとすることでEagle上で回路図,ボード図に使える状態になります.

Packageは使用するデータのデータシートを見ながら作ってください.
デフォルトだとinchになっているのでViewをいじると作業しやすくなります.
Drawコマンドの中からLineとSMDを使って作れます.

Symbolも同様にデータシートを見てpinを間違えないようにしてDrawコマンドでPin配置して名前付けしてください.

DeviceではAddでSymbolを追加して,Newで使用するPackageを選んでConnectでピンを関連付けしてください.



後は作った部品ライブラリを配置して,配線を行うと回路図とボード図が作れます.


作製には直接関係ないですが,データシートは英語のものが多いので得意になっておくと作業しやすいと思います.


明日の記事kentomお願いします.

2016年12月1日木曜日

田胡・柴田研究室AdventCalendar2016開始だ~

この記事は,田胡・柴田研究室アドベントカレンダー2016 1日目の記事です. (いつまで研究室名この表記にすれば良いのか分からない.) 初日は田胡研の便利屋ことすかいが書いていきます. 皆さん研究室のSlackは利用してますか? 2回目回ってきそうだし初日は軽いネタでSlackBotの作り方を紹介します. 大体調べて出て来るのはHubotを使った作り方ですが各言語ライブラリがあるのでそれを利用すれば簡単なBotならすぐに作ることが出来ます. [Slack Platform: Community | Slack](https://api.slack.com/community) 今回はPythonを利用してオウム返しをするBotを作ってみます.