読者です 読者をやめる 読者になる 読者になる

タクマ松下のブログ

情報科学科の学生が書く記録。フロントエンドとサーバサイド練習中!です!

将来の野望

僕の小さな野望です。

 

背景

僕はプログラミングがそこそこ好きですが、家から出られません。

理由はディスプレイの数です。

あとは居心地。

 

喫茶店で作業…とかはあまり好きではありません。

他人にディスプレイを見られたくないので。

 

そんな僕の野望です。

 

プログラマ向けカフェ

見出しの通りです。

ちなみに僕は某有名喫茶店チェーンのアルバイトをしてます。

 

内容としては以下の通りです。

 

  • 自由に使えるディスプレイ設置
  • ディスカッションスペース(小規模)
  • 他の技術者と話せるエリア
  • 喫煙席
  • バーっぽいカウンターエリア
  • 会員向け個室っぽい空間
  • ガチなコーヒー
  • デスマーチを助けられるスタッフ

 

ディスカッションスペースが小規模にしたいのは、より深く話し合えるようにするため、ワイワイしてほしくないとの理由からです。

 

禁煙じゃねーのかよ!って人もいますよね。

でも技術者は喫煙者が多いです…

喫煙所でしか話せないこととかもありますよね。

 

考察

エリアが広くなりそうです。

お金が足りるかどうか…

あとはスペースの組み合わせ問題。

 

実現するのは何年先かわかりません。

しないかもしれません。

そんな時にはもう家から出る必要とかディスプレイ問題も解決されてるんですかね…

 

小さな野望でした。

 

個人的なプログラミングの楽しみ方、勉強法

プログラミングを勉強する上での障壁は色々ありますね。

例えば僕は
既に存在するものはプログラムしたくないタイプ
なので、
技術書を読んでサンプルを見て写経する
とかいうのはすごくイヤなんです。

これでは手を動かせないので、言語を習得することはできません。
やはり手を動かさないと身に入らないようです。僕の場合は。

存在しないものなんて五万とあるんですが、
人間のアイデアは知識ベースで思い浮かぶものなので、
何があって何がないのか、最初はわかりません。

以下個人的な存在しないもの探し+楽しみ方です。

簡単編

ステップ1: アイデア探しの旅というか好きな物探しに出る

ずーっとプログラミングしてても思い浮かびません。
そんなときはアートや映画、アニメなどのクリエイター様が創られたものを眺めています。

僕は攻殻機動隊Serial Experiments Lainカウボーイビバップエヴァンゲリオンとか
ジェイソンステイサムが出てる映画を見たりしました。

特に攻殻機動隊にはたくさん技術系の話が出てくるのでお勧めです。
Serial Experiments Lainも違う観点から見ればオススメ?です。

好きなものをみます。

ステップ2: 出来そうなものを見つける

好きな物が見つかったら出来そうなものを探します。

僕は攻殻機動隊が好きになりました。
攻殻機動隊でいうとさすがにタチコマは難しいです…
いきなりは難しいですよね。

というわけで僕はGhost in the Shell(1995)に出てくるオープニングのスクリーンを実装したいな、と思いました。
ターミナルで動かします。

ステップ2.9: 考える

実装イメージなんですが、
公式の動画が見つからなかったので完成品でご容赦ください。

https://raw.githubusercontent.com/cs14095/cs14095.github.io/master/ghost-in-the-shell-op.gif

アルゴリズムや実装方法を模索します。
実際には手を動かしながらやってました。

今回はGoを使うことにしました。
数字をランダムに表示したいのでなんか格納場所作って、
シャッフルのアルゴリズムはフィッシャーイェーツとかいうのを使って、
スクリーンの表示はライブラリでーとか色々調べます。

ターミナルに座標指定して文字を出力するにはncursesというCのライブラリが有名です。
「Go ncurses」とかで調べてterm-boxというライブラリを使いました。

ステップ3: 実装

できました!
すごく単純なんですが楽しかったです。

github.com

3時間ほどで出来たものです。
グローバル変数だらけ+ポインタがないプログラムなんですが、
見た目重視なので気にしません。


ステップ4: 繰り返す

新しい言語を覚えるときに上の手順を無限ループしてます。
アルゴリズムとかライブラリも組み込めるといいですね。
今は上のやつをPICO-8上でLua使って書いてたりしてます…

API

ステップ1: APIを探す

世の中にはAPIがたくさんあるんですよ。
本当に。
好きなサイトを見つけたら「サイト名+API」で検索してみてください。
ネットワークに興味を持ったら色々APIをたたいてみます。

ステップ2: 市場を探す

実は写真共有とかのサイトはたくさんあってAPIも結構公開されているんです。
でもそれを使ったアプリとか全然見つからなかったりするんですよね。
特にiOSアプリは全然アプリがなかったりで結構オンリーワンになれそうです。

ステップ3: 実装

iOSアプリ実装は結構大変です。知識が必要になります。
僕は3つくらい同時に手を出して手一杯です。
いつか公開できるといいな…って感じです。

まとめ

好きなプログラムを探して書いて、覚えたい言語があったらそれで実装する。
APIを探してたたきまくったりすればオンリーワンが創れるかも?
楽しい!

Emacsのプラグインciel.elを作った話

EmacsVim、世の中にはたくさんのテキストエディタがありますよね。
僕はコーディングのほとんどをEmacsで行っているんですが、
唯一不便に感じたときにプラグインを作ったときの話です。

動機

EmacsVimと比べると範囲攻撃が弱いです。
というのは特定のスコープを削除する機能が貧弱なのです。
smartparen、expand-regionなどのプラグインでこれらの機能はある程度補えます。
(機能の詳細については省きます。)

しかし僕はある日Vimに出会ってしまったのです。
感動的な機能が最初からたくさん使うことができました。
中でも「ci」には驚かされました。
「ci」というか他にも似た挙動のコマンドはあるのですが、
「ci{」とかするとスコープに応じて{}で囲まれた部分を削除してくれる便利なやつです。

なんでEmacsにはこれがないんだろうと頭を抱えました。
(EvilについてはVim使えばよくねと思います。)

色々探してみると、change-inner.elというものがありました。

github.com

彼はexpand-region、multiple-cusrorの作者様です。
なんだあるのかと思ったのですが、このプラグインはexpand-regionに依存していたのです。
つまり特定のモードでなければ動きません。
またモードだけでなく特定の条件でVimのように動かない問題もありました。

Vimライクに動く「ci」を作りたいと思いました。

つくる

授業中にコソコソとコーディングすること1か月。
様々な問題がありました。Emacs Lispは非常に難解でした。
3か月ほどアルゴリズムを考えたり、手探りで空き時間にコーディングして、
やっとそこそこ動くものができました。

その後GitHubにソースを上げて、Qiitaに投稿しました。
アドバイスをいただいたので色々改変したりしました。

Starがついたりして嬉しかったので、
EmacsのパッケージリポジトリであるMELPAにアップしたいと思いました。
正直英語とかドキュメントとかよくわからないことがあったので、
Twitterで聞いたらまたまた助けてもらえました。

4か月ほど経過したあとでようやくMELPAにもマージされて、
簡単にダウンロードできるようになりました。

できた

github.com

完成品になります。
拙い英語+拙いソースです。
挙動に関しては問題ないのですが、
ユーザカスタマイズに対応できていないので早くどうにかしたいです。
そこらへんの理解が進んだらまたコーディングしようと思います。

機能の詳細についてはここでは省きます。
また時間があれば作る上での問題点、これから追加する機能、
なぜ他のパッケージではダメだったのかを詳細に書こうと思います。

感想

いろいろ助けてもらったことが多かったです。
何かアイデアをアウトプットしたいときは、
とりあえずコミュニティに投げていけば神が助けてくれたりします。
具体性は必要ですが…

また何か感動的なものを作りたいですね。

pythonでスクレイピングしたらめちゃ簡単だった

こんばんは.

僕はスクレイピングとかしたことがありませんで,
今日初めてスクレイピングをしました.

とは言っても,
Wikipediaからデータを引っこ抜きたいだけだったので
なるべく簡単に済ませようと思いました.

やってみる

Go編

最初は書き慣れたもので行こうと思って,
Goで書いてみようと思ったんですが意外とめんどう...
3分で理解できなかったらポイしてました.
go getなんちゃらしてみたんですが,やめました.

Python

結論からいうと3秒でできました.

qiita.com

参考ページです.

Pythonは書いたことなかったのですが,
とりあえず brew install python3 をして,
pip3 pandaとかいうのを入れて...
コードを書きました.

import pandas
url = 'https://en.wikipedia.org/wiki/Timeline_of_programming_languages'
fetched_dataframes = pandas.io.html.read_html(url)

count = 0

for data in fetched_dataframes:
    data.to_csv('./datas/' + str(count) + '.csv')
    count += 1

あとは python3 hoge.py

こうすると./datas/ に0.csvとかができます.
HTMLでテーブルになっているとこが全部抜けました.

まとめ

簡単すぎるのでおすすめ

本棚が崩れてきたので本棚を探す

技術書を買い始めて5年ほど経ちますが、
いよいよ本棚が限界を迎えてきました。

f:id:t-matsushita:20170501224127p:plain

というのもこいつは本棚ではありません…
無理をさせてすまぬ。

現状

本棚は上のような状態です。
技術書以外も交じっているんですが、
技術書と雑誌のみの山がこんなにあったりします。

f:id:t-matsushita:20170501224131p:plain

山が3つか4つくらいでしょうか…
あとはソファの上にも本がちらほら…というか一杯ありました。

探さなきゃ

やっぱり部屋でかなりの広さを取ってしまうので、
できればおしゃれなやつがいいですよね。
でも僕はお金がないので出来るだけ安く済ませたいです。
一万円くらいでなんとかなってほしい。

条件

  • 斜めになってない
  • 奥と手前の2重構造になってない
  • つまり変化球は狙わない
  • とは言ってもおしゃれなほうがいい
  • 技術書の重さに耐えられる。
  • 奥行は雑誌くらい。
  • 予算1万!ハリボテでもこの際構わん。

というわけで探します。

探した

候補1

あっ!これ安くていいんじゃない?
って思ったんですが5kgまでしか耐えれないそうです。

というかこれ飾り棚じゃん。
ちょっと厳しそうです。
僕はウイスキーのボトルを何本かストックしているので
そいつらと一緒に置いたらオシャレかもしれません。
候補として残しましょう。

候補2

普通です。
安いですね。

候補3

少し高いですが良さそうです。
ハリボテじゃなさそうだし。
条件の変化球は狙わないってとこに少しひっかかりますが、
これの参考写真の2枚目は、これと普通の本棚を組み合わせて二段構成にしてます。
そんな感じにしたらよさそうですね。
これを2つ買うと3万くらいかかっちゃうけど安い割には良さそう。

どうしよう

これ以上ほっとくと本にダメージがいきそうなので早く買います。
更に吟味してまた報告します…

Lispで就職先を探すとかいう奇行

小話です。

皆さんLispは好きですか。
僕は嫌いではないです。
プロが書いたLispは本当にきれいだし、
自分のコードと比べると、これ本当にLispか?ってなります。

でも就職には使いたくないですよね。
え?使いたい?
派生なら可能性はあるかもですね。

探してみる

研究室の先輩と小一時間探してみました。
clojureとかOCamlとかも一応。
確かにあるはあるんですが、
これ本当にLispでやる意味あんのか?って思いました。
まぁそんなもんですよね。

企業の目的はなにか

Lispは枯れた言語…というと失礼ですが、
所謂よく使われるアプリケーションの開発には向いていませんよね。
言語的にとかではなくその周り的に。

未だに言語処理系では強いのはわかりますが、
無理に他の分野を頑張ろうとする意味はなさそうです。

実行速度が早い関数型言語もありますが、
あえてLispでってことはないと思いますよね。

まぁできないことはないけども…
みたいなことを1時間ほど考えた結論は。

Lispで釣ってウィザード級ハッカーを雇おうとしている。」

でした。

ウィザード級ハッカーの人は海外で活躍していただきたいです。

clojureをはじめた

clojureってご存知ですか。

 

ご存知でない

ですよね。

clojureJVMで動くlispです。

関数型言語とか言われるタイプのやつです。

いわゆるフツーの言語は手続き型とか言われるんですが、関数型言語はまた違う性質や思想を色々含んでいます。

関数型言語の定義は何かと言われると少し困ります!

 

なぜclojure

今まで僕はhaskelllispなどの関数型言語に触れてきました。

racketっていうのも少し触った気がします。

理由はサーバクライアント間をS式でやりとりできると聞いたからです。

まだ触りしかしていないので、本当か?って思ってたんですが、

https://www.4clojure.com

こんなサイトがあるんで多分本当です。

 

S式ってなに

lispを触りだけでもやってみてください!

たぶん楽しいです。

 

なにがいいの?

ここではlispの話になります。

なにがと言われると困りますが、lispは上手く書けると本当に美しいです。

他にも良いところはありますが、プロが書いたlispは本当に美しいです。

githubなどで適当に漁ってて、うわ綺麗なコードだなーと思ったら、emacs lispのエリートだったりします。

初心者でもはっきりわかります。

 

へーどうやって練習すんの?

https://www.4clojure.com

英語が少し読める人はここで。

研究室の先輩に教えてもらいました。

 

読めない人はlispの問題を解くと良いです。

無限に転がってます!

また進展したらサーバでも立ててみようと思います…