blogソフトウェア開発と人生をやっていきますこの広告は、90日以上更新していないブログに表示しています。MD600を購入しました。Computersこの商品を含むブログを見るMD600はキーボードの軸を選ぶことができます。私は赤軸を選択しました。以下は購入に至った心の動きです。分離式のキーボードが欲しいErgodoxは良さそうだけど高い*1比較的安価なMD600の存在を知る(16000強)Ergodoxの半額近い値段で購入できる。コスパ最強で間違いなく買い!冷静なると16000超えのキーボードに対してコスパが良いという感想を持つのは、暑さに頭がやられてた可能性があります。デスクの様子デスクではキーボードをノートPCのサイドにおいて使用しています。このとき付属のUSBでは長さが足りないので適当な長さのケーブルを購入する必要があります。エレクトロニクスこの商品を含むブログを見るこの方法ではノートPCの画面を下、外付けディスプレイを上にする運用が可能になり、Retinaディスプレイとトラックパッドを有効に活用することができます。写真を見て分かる通りこのキーボードは厚みがあるので、リストレストを使って段差を軽減しています。私はマウス用のリストレストを2つ使用しています。エレコムメディア:この商品を含むブログを見るキーボードの感想としては肩を開いて姿勢良くタイピング可能で、メカニカルキーボードの小気味よい打鍵感と相まって最高です。追加アイテムを購入することで、開発環境をさらなる高みに導くことができます。エレクトロニクスこの商品を含むブログを見るこれが組み上がった状態です。これにPCを載せてサイドにキーボードを起きます。人間としては終わっている感じが強いですが、最高にリラックスして作業することができます。AWS最近まとまった時間ができたので、Web開発手法の勉強をしていました。Railsチュートリアルが体系的に学べて良いという話を聞いていたので、これを軸にしながら自分のWeb知識の穴を埋めていくことにしました。学ぼう一区切りついたのでまとめておきたいと思います。以下は勉強を始める前の私の知識です。Migrationなどの言葉は聞いたことがあるRubyを一行も書いたことがない普段はPythonとC++を書いている趣味でJSも少し書くCS的なインフラの基本技術は知っているが、IaaSやPaaSなどにはあまり明るくない*1参考書Railsチュートリアルをやる前に、参考書でWeb技術に基礎を固めました。最初にWebを支える技術を読みました。見るRESTの基本を学ぶのに非常に役立ちました。ステートレスやリソースなど、「なんとなく意味はわかるけど正確には知らない」知識を得ることができたり、実践的なAPI設計などが書かれていたりして非常に良い本だと思います。途中microformatsやAtomなど、今ではあまり使われていない技術に多くのページが割かれているので、興味がない人は適当に読み飛ばせばいいと思います。(Webの栄枯盛衰を感じる歴史としては面白いと思います。見る名著だと言われていますが、教科書的で結構退屈です。知っている知識が多かったので、私は適当に読み流しました。低レイヤーを学んだので、次は高レイヤーのIaaSやPaaSを学ぶことにしました。今回はAWSを選択しました。見る評判が良くて比較的出版が新しかったのでこの本を選びました*3。スクリーンショットなども多く、手を動かしながらサービスを満遍なく学習できて面白かったです。無料枠で十分遊べます。AWSはRailsチュートリアルにはあまり関係ないかと思っていましたが、一部ストレージサービスのS3を使う部分などがあり、学んだ知識を生かすことができました。Worldも書けない状態で特攻するのは嫌だったので、簡単に言語仕様をさらいます。公式ドキュメントを読みました。公式ドキュメントは量が少なく、あまりにもあっさりとしているので他の資料にあたりました。QiitaASCII.jp:Ruby超入門(前編)|Rubyで学ぶRuby特にRubyで学ぶRubyは面白かったです。Railsチュートリアルに取り掛かりました。基本的には演習問題に取り組み、erb(HTML)とCSS以外はコピペしない方針で進めました。Twitterライクなアプリを作る中でGitの使い方からマイグレーション、PaaSへのデプロイ、テスト駆動開発などを実践的に学ぶことがでます。思っていたよりもにWebの広範囲な知識が得られてやってよかったと思います。Gitのコミットの粒度やコメントの書き方などは普段の開発にも活かせる部分があり、Masterブランチ一本で開発していた自分のプロジェクトを見直すきっかけにもなりました。たくさんのことが学べる素晴らしいチュートリアルですが、それは裏を返せば非常に長大なチュートリアルであるということです。電子書籍版のPDFに換算すると800ページ以上あるので*4、結構挫折感は強いです。個人的には勢いに任せて一気にやるといいと思います。Railsチュートリアルのメモ以下はチュートリアルを進めながらのTipsやエラー回避、感想です。進めながらメモをとっているので、適当なことを言っている可能性があります。言語仕様ここはサラッと流せそうRailsの拡張も結構ある単なるRubyのコードを書くのであれば、モジュールを作成するたびに明示的にインクルードして使用するのが普通ですが、Railsでは自動的にヘルパーモジュールをインクルードしてくれるので、include行をわざわざ書く必要がありません。このfull_titleメソッドは自動的にすべてのビューで利用できるようになっている、ということです。http://qiita.com/tadsan/items/7baab2605a4d8ac1858epythonのスライスとrubyのスライスは仕様が違うので注意[0..7]としたときに、7自体も含まれる5章CSSを書くのが結構めんどくさい自分が普段書かないからサラサラかけなくてストレスなのかもHTTP技術の話これは、HTTP標準では技術的にリダイレクト後に完全なURLが要求されるためです。ほとんどのブラウザではどちらの方法でも動作します。Stampの値がおかしいことに気付くデフォルトではUTCになっている。:local正規表現がでてきた読むのがめんどくさくて、たぶんあってるだろうと思ってコピペする普段から正規表現に対してはこのスタンス。passwordはハッシュ化して保存するなぜ世の中のWebサービスはたまにパスワードを流出させてしまうのか平文でパスワードを保持していないのであれば、流出は起こり得ないのではないかどうやらハッシュを解読しているらしいhttp://www.itmedia.co.jp/enterprise/articles/1509/11/news050.html7章RESTに従ってデータベースを取得したサービスを設計し始めたResourceとしてデータを扱うdebuggerメソッド、とても便利。Params)すべての要素を送ろうとするとエラーが発生するpluralize英語を複数形にするメソッド。生PHPだと明示的にescapeしないといけないし、世の中を良くするためにはデフォルトで対策したほうがよい記憶トークンの使用はセッションハイジャックの対策にもなって一石二鳥PythonのselfとRubyのselfは似たような感じ?署名と暗号化を同時に行う。ほうがわかりやすいという説明、いまいちピンとこない前者のほうが何をしているか明確でいいと思うPython的な考え方かもしれないCookieをユーザが手動で削除してフォームを送信する場合を考慮してテストされてて、なかなか細かいブラウザはネイティブではDELETEリクエストを送信できないらしい知らなかった...。11章このへんでようやくedit_account_activation_urlの意味がわかってきた@がURLで使えないということを初めて知ったどうやってメール受信のテストをやるのかなあと思いながら読み進めていたけど、簡単にプレビューする方法がRailsで提供されているらしい。本番環境でメールがなかなか届かなくて失敗してるかと思ったけど、時間がかかっているだけだった。12章この章の序盤は本当に11章とやっていることの本質は変わらないっぽいチュートリアルで一番難しいのは、漏れがないようにテストを書く演習な気がしてきたようやくこの章でログインの管理が終わった。あることに注目してください。これはプログラミング言語によくある文法で、古くは1950年代中ごろに開発されたALGOLまで遡ります。;を使わない言語をはじめに使う人達も増えてきたんだろうな...。parameterを変更する必要があります。parameterではGUIを使って引数を選択することができないため、パスを自分で記述しなければなりません。このような引数の指定方法は開発環境によって異なるため、複数の環境をまたいで開発を行っているとやり方を忘れてしまうことがあります。いった問題を解決するために、統一的に引数を選択することができるツールを作りました。pipからインストールすることができます。QtArgSelector以下のようにして使います。引数に反映されているか確認するスクリーンショット付きの説明はGitHubに書いてあります。github.com一つ前に選択した引数の履歴は保存されるので、同じ引数で実験を行いたいときはOKを押すだけ実行できます。-Matplotlibのxkcd関数とFIRフィルタ-PythonPythonのグラフ描画ライブラリのMatplotlibには、手書き風のグラフを描画するための関数xkcd()があります。以下のソースコードを実行すると、手書き風のsinグラフが描画されます。graph')plt.show()温かみがあっていい感じですね。このような手書き風グラフは、関数の名前にも使われているxkcdというサイトの画像をリスペクトしたものです。Pattern理系的なネタが多く、エンジニアの間でもよく話題になります。いったテイストの本、ホワット・イフが翻訳されて話題になりました。見るさて、このような手書き風グラフはコンピュータでどのように描画しているのでしょうか?乱数生成とローパスフィルタ現在Matplotlibに実装されているxkcd()関数の原案となったブログ記事を参考にしながら読み解いて行きます。Perambulations記事のxkcd_line()に注目してください。y)を与えたときに、その間を補間するための点を生成します。補完する点にノイズ(ゆらぎ)を加えることによって、手書きのようなガタガタとした線を表現することができます。この線を描画するために、補間する点数の制御やB-Spline曲線での近似などの様々な工夫がされていますが、肝となる部分はFIRフィルターのローパスフィルタによるノイズ制御と言って問題ないと思います。*2xkcd_line()中の次のコードを見てみましょう。coeffs)1行目のコードは線に加えるノイズの大きさを決めています。magを変化させることによって乱数のスケールが変化し、線のガタツキの強弱が変わります。2行目のコードではFIRフィルタでローパスフィルタの設計を行っています。(FIRフィルターについては後述します)ローパスフィルタは低周波成分のみを通過させて、高周波成分をカットするフィルタです。1行目で生成した乱数の中で、しきい値を超えたものを0にする処理を行います。これにより本来のグラフから極端に外れた点を抑制することができるので、適度なガタツキを表現することができます。3行目のコードでは、2行目で設計したローパスフィルターを実際に適応しています。Filter)とも呼ばれるディジタルフィルタの一種です。FIRフィルターの回路は次の図と式で表されます。$$x[n]を入力信号、y[n]を出力、b[n]をフィルタ係数とします。このとき上式のNを一般にタップ数と呼びます。このフィルタに入力x[n]を入れたときに必要のない周波数成分を取り除くように回路を設計することによって、ローパスフィルタやハイパスフィルタを実現することができます。この式から、タップ数を増やすことで入力に対して大きな応答を得ることができることがわかります。xkcd_line()内で使われいるscipyに実装されているFIRフィルターsignal.firwin()は、第1引数にカットオフ周波数、第2引数にタップ数、第3引数に窓関数を指定する仕様になっています。9]として、タップ数とカットオフ周波数を変更していきながらグラフの結果を見ていきます。タップ数の係数を大きくするに従って波の振動が細かくなっていることがわかります。ここで注意したいのは変更した値はタップ数の「係数」で、タップ数そのものではありません。計算しておいた補間する点の2点間距離に係数をかけています。カットオフ周波数を大きくするにしたがって、波の振動が抑えられていることがわかります。人工知能に関する断創録*1:私もこの本を読みましたが、とてもおもしろかったです*2:他にもフォントの変更など、Matplotlibに実装されているxkcd()関数はもっと凝った処理をしています*3:窓関数の特性に応じて、信号の解析することのできる範囲を変更することができます。分類や回帰の問題を扱う場合、選択する手法としてサポートベクターマシン(SVM)とランダムフォレストが候補に上がってくると思います。Raschka氏は次のように述べています。:ランダムフォレストは安心して使える機械学習のアプローチです。ハイパーパラメータ調整も必要ありません(木の数の指定は除きます)。対してSVMは"正しい"カーネルや正則化ペナルティ、スラック変数などの調整が必要になります。ディープラーニングはどんなときにSVMやランダムフォレストより勝るか?ランダムフォレストは調整する変数がSVMに比べて少ないため、とりあえず試してみるという使い方ができます。記事中では言及されていませんが、ランダムフォレストは事前に学習データの正規化や標準化を行う必要のない手法です。これも手軽さの一因となっていると思います。手軽さという面ではランダムフォレストに軍配があがると思います。Raschka氏が書いています。Forests?意訳:マルチクラスSVMの典型的な実装は、一対他分類法です。したがってSVMは各クラスごとにトレーニングを行う必要があります。逆に決定木やランダムフォレストは手法をそのままマルチクラス分類に使うことができます。ディープラーニングはどんなときにSVMやランダムフォレストより勝るか?SVMの一対他分類法とは、ある1つのクラスとその他のすべてのクラスでSVMを構築する方法で、これに対応する一対一分類法は2つのクラスを選び、それを分類するSVMを構築する方法です。以下の記事の説明がわかりやすいと思います。SVMを使いこなす!チェックポイント8つSebastian氏は典型的な実装法として一対他分類法が使われるとありますが、代表的なSVMライブラリであるlibsvmには一対一分類法が実装されています。どちらの手法を用いるかによって計算量と分類精度が変わってきます。ランダムフォレストは2クラス分類とマルチクラス分類を行うとき、何か特別な処理をする必要はありません。用意した学習データの数によって手法を選択することもあると思います。Amatriain氏は以下のように述べています。algorithms?意訳:SVMの欠点は学習が非常に非効率なことです。データのサンプル数が多い場合、どのような問題でもおすすめできません。scale)で使うことは推奨できません。研究室レベルや単純化された問題では他のアルゴリズムよりうまく動作します。分類アルゴリズムのそれぞれの利点はなんですか?サンプルデータ数が十分に用意できる場合は、SVMではなくランダムフォレストを使うほうが良いと言えそうです。実際、Kinectの身体部位測定の判定にランダムフォレストベースのものが使われているようです。www.microsoft.comまとめこれらの調査から、次のような方針が立てられると思います。ランダムフォレストかSVMか迷ったらとりあえずランダムフォレストを使ってみるハイパーパラメータ調整が少なくて手軽データ数が多くても効率的に学習できるデータ数が少ないときは、SVMを使うことを検討するしかしながら、以上の方針は絶対ではありません。lunch定理が示しているとおり、すべてを上回る手法は存在しないからです。機械学習の「朱鷺の杜Wiki」したがって、以上の方針を頭に入れつつデータの特性を考えながら手法を選択することが重要になります。将棋初心者がどうしたら将棋を続けられるか、という問題が話題になっていました。http://chaosnote.hatenablog.com/entry/2016/11/08/224013私の周りでも将棋を始める人が増えていますが、長続きせずにやめてしまう人が多いです。将棋を続けてくれる人が増えるといいなーと思うので、私の考えを書いておこうと思います。元記事で将棋倶楽部24と将棋ウォーズを基準に実力を述べているので、言及しておきます。私は将棋倶楽部24では初段で、将棋ウォーズでは2段のあたりをうろうろしています。そんなに強くはないですが、それなりの時間と情熱を注ぎましたというレベルです。ロードマップハム将棋に勝てない段階でネット将棋に手をだすと負け続けることが予想されるため、モチベーションを失ってしまします。いうわけで、まずハム将棋に勝つことを目標として、安定して勝てるようになってからネット将棋にデビューするのが良いと思います。以下に示すロードマップは、効率的に強くなるにはどうすればよいかを私が考えたものです。戦法と囲いの組み合わせを一つ覚える初心者の間は戦法と囲いを一つ決めて指すといいと思います。美濃囲い」などがわかりやすい戦法です。Flashこのサイトは戦法の概要が大量にまとめられています。駒を動かすこともできるので、符号が読むのが大変な初心者でも使いやすいと思います。個人的に棒銀は狙いがわかりやすいのでおすすめです。棒銀戦法(相掛り型)囲いについては以下のサイトを見るといいと思います。将棋研究ちなみに穴熊囲いが強い、という話を聞いたことがあるかもしれませんが、初心者の間ははおすすめできません。穴熊囲いは本来攻めに使うはずの駒を守りに使うため、攻撃の構想を立てることが難しくなります。考えてささないと一方的に攻められて終わってしまうので、違う囲いから始めるのがよいと思います。簡単な詰将棋を解く3手ぐらいの簡単な詰将棋を解いてみましょう。解くと頭の中で駒が動かせるようになり、うっかりミスを減らすことができます。王様が詰む形にはパターンがあるので、よくある形を覚えておくと良いでしょう。ハム将棋と何度も戦うハム将棋はこちらが手を変えない限り、同じ手順を再現してきます。一度失敗した手順を避けて手を改善していくことで、ハム将棋攻略の糸口が見えてくると思います。コンピュータ将棋で棋譜を解析する将棋倶楽部24や将棋ウォーズでは、棋譜(指しての手順を示したもの)を取得することができます。この棋譜をコンピュータに読み込ませて解析することで、手の良し悪しを判定することができます。おすすめのソフトはshogiguiです。GUIが直感的でとても使いやすいソフトです。Windows版、iPhone版、Android版が提供、無料で利用することができます。本を読むインターネットだけでも将棋の情報を集めることができますが、やはり本は体系的にまとまっているため勉強しやすいです。将棋を継続しようと考えているのなら、購入を検討すると良いでしょう。以下におすすめの本のリンクを貼っておきます。見る将棋の基礎がつまった戦法、四間飛車をわかりやすく学ぶことができる本です。「指しこなす本」シリーズは一問一答形式になっており、将棋盤を用意する必要がないので、気軽に読むことができます。見るタイトルの通り3手の詰将棋がたくさん載っている本です。ハンドブックシリーズは良問が多いことで有名で、実践に役立つ問題がたくさん含まれています。見る「詰将棋を解けるようにはなったけど、そもそも相手の王様を追い詰められないから詰将棋が役立たないんだけど?」という人が読む本です。上記二冊よりは難易度が高いですが、学習効果は非常に高いです。駒落ちは効率的な上達法か?元記事では駒落ちの是非について問われていました。駒落ちが将棋の上達に役立つか、というのは意見が分かれる問題だと思います。私が今まで見聞きした意見をまとめると、以下のような感じになると思います。駒落ちは駒の効率的な動かし方を理解する上で役に立ちます。代表的な飛車角落ちの定跡として、銀多伝定跡と二歩突っ切り定跡があります。これらの定跡は非常に洗練されていて、定跡を学ぶことによって金や銀を効率的に動かすコツが分かります。駒の落とす数が徐々に減っていくことで、上達を感じることができると主張します。駒落ちで学んだことは平手の将棋に活かしにくいです。駒落ちの定跡は平手の勝負では出現しませんし、玉の囲いも通常とは異なります。将棋はただでさえ最初に覚えることが多いのに、いちいち駒落ちの定跡を覚えていたら、平手の定跡を覚えることに時間をかけられないので、上達が遅れると主張します。個人的には駒落ちはあまり好きではありません。平手で使わない定跡を覚えるのは負担に感じてしまいます。私は飛車角を落として負けると、いくら相手が自分より強くてもモチベーションが下がってしまいます。ネット将棋ではレーティングシステムのおかげで自分と近い実力の人と勝負ができるようになったので、あえて駒落ちをやる必要はないと私は考えています。そもそも、駒落ちってハンデとしてどうなんですかね?盤上に最初から駒が足りていないわけで、大駒を取られたりしたら、戦力が簡単に逆転してしまうので、駒ボロボロ取られて嫌な思いをし続けるだけな気がします。誰かの場所の複数まったくそのとおりだと思います。終わりにロードマップと題して偉そうにいろいろ書きましたが、基本的に自分の好きなようにやればいいと思います。いろいろな戦法が試したいのであれば、一つの戦法に固定することをこだわる必要もないですし、対人戦から始めるのもいいと思います。面白い、と思って将棋を続けてくれる人が増えるといいですね。Notebook)は基本的にブラウザ上で動作するソフトウェアですが、Pycharmでから動かすこともできます。使い慣れているキーバインドやかしこい補完が使えるので、Pycharmで動かすメリットは大きいと思います。Notebook環境だと、Pycharmからはエラーが発生して起動することができません。以下のメッセーが含まれるエラーが発生します。jupyterこれはAnacondがPython[Root]という名前でエンジンを登録しているにも関わらず、Pycharmはデフォルトでpython3を探しに行ってしまうことが原因です。condaの本体アップデートでは修正が適応されません。Notebookが使えるようになります。NotebookがPycharmで動作しない問題の解決方法Tweet広告を非表示にするもっと読むコメントを書く次のページプロフィールid:drilldripperプログラミングと将棋が好きです。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。