vimの:set pasteが便利

yasuさんに教えていただいたのでメモです。
vimで雑にCtrl+Vとかでコピペしたコードをペーストすると,インデントが崩壊する事が多々あります。

f:id:anatofuz:20171012230851j:plain

ですがそんな時に 

:set paste
としてペーストすると良い感じにペーストされます。すごい!!!

知るまで

ちなみにこれを知るまではemacs開いてペーストしてました…。雑魚じゃん…。

さらに便利

id:ST_ha1cyon くんより

ちなみに:set pasteした後、:set nopasteするともとに戻るぞい

id:mattn さんから

set paste をトグルするキーを設定するための pastetoggle というオプションもあります。詳しくは :help pastetoggle を。

さらに
:i!
:a!もいけるらしい .すごい

オズビジョンのインターンに参加しました

3秒でわかるオズビジョンインターン




夏の終わり将来の夢大きな希望…希望とは…となっている今日このごろですが,9月23,24日に株式会社オズビジョンインターンに参加してきました。

参加まで

夏ちょい前くらいにFaceBook経由で連絡を貰った学生の就活支援サイト(的なもの)のサービスの1つで
雑にGitHubアカウントを書いておくと企業の方が見てくれて,インターンの案内が来るというものがあり,連絡を頂いたのが切っ掛けです。
Skype面談があるという話だったのですが,なぜか動画ではなく電話でビビった覚えがあります。

ちなみにオズビジョンさんは ハピタス というサービスを運用しているらしいのですが,知らなかった…

やることについてはあまり聞かされておらず,「エンジニア向けのサービスについて」考えてきてくれ!!という宿題がでた感じでした。

前日まで

沖縄なので前日に,東京へと久々に成田空港を利用し行きました。
ジェットスター発利用でしたが,ボーディングブリッジ使えて最高感がありました。
どら焼きと緑茶美味しかった。


ところで気温差が中々ひどく,成田空港で上着を購入しました。
(尚買う時に女性向けのパーカーを持ってレジに並んでしまい,店員さんにびっくりされた)
宿は雑にagodaで取ったホステルに泊まりました。外人さん多かった。

当日

当日は東大島駅に集合だったので電車使って移動しました。

キャリーケース持っていなかったので,沖縄から来たのに1番荷物が少ないという状態になりました。
旅慣れしているからなのか…。

インターン自体はリフレフォーラムで合宿形式で行いました。

参加メンバーは8名で,4名4名の2チームに別れて作業となりました。
尚自己紹介で「アナグラって呼んでください」と言ったにもかかわらず,インターン期間中誰にも言われなかった。

(実際に本名で呼ばれて気づくまで時間がかかった)

インターンの内容としては実際に今から作るものの企画立案をリーンキャンバスっぽい図を書いて行い
2日目の最終日に動くものをデモするまで自分たちでやっていくぞ!!!という雰囲気でした。

環境としてはamazon linuxapachePHPが雑に置かれており,後は自分たちでやっていくぞ!!(2度目)という世界観です。

今回のインターンでは「チーム開発」がテーマになっており,4人メンバーで開発していくものについて合意形成を取りながら勧めていきました。
まず最初に作るものの決定から始まりましたが,今回のプロダクトの対象が「新人エンジニア」として一致しました。
幾つか案として他の物もあったのですが,やはり参加者の層的にかけ離れたものはイメージし辛く自分自身達とだぶるものに落ち着いたのではないかと考えています。*1


思考のツールとして雑にホワイトボードみたいにつかえるシートと付箋が配布されており
プロダクトの詳細を詰めるときは,そのシートのようなものに書いたりしながら議論を展開しました。
すごい使いやすかったので購入したい…。

僕らのチームの方向としては,作りたいプロダクトについて4案ほど並列で煮詰めながら比較検討を行い
1番具体的に立案出来た「作りたいものを支援してくれる課題添削サイト」に決定しました。
この際に「プロトペルソナ」を使った思考方法などを提案しましたが,提案力が足りず却下されてしまったので辛かったです。*2

その後「使う機能を列挙」していく路線になりました。
このあたり個人的には「使う画面と体験で機能は決まっていくのでは?」と思い「6upスケッチ」を提案しましたが
またしてもプレゼン力が足りず,崩壊してしまったのが歯がゆかったです。

その後大まかなviewと次の日やる設計を決めて終了しました。
最後には毎度おなじみKPT分析を行いました。講義の内容が活かせた。
ちなみに口調が夏によくお会いしていた方っぽくなっており,面白い喋り方をする人認定されました。


ちなみにかなり疲れがきており,夕食時とかはテンションが低かった…。

宿泊する部屋は二人部屋となっており,チームの中で2人ずつ振られました。
wifiが通っていなかったのですが,相方がmacの有線アダプタを持っており雑に僕のmacから共有のwifi飛ばして作業してました。尚このwifiが隣のチームにも拾われており,この晩のオズビジョンインターンチームの作業を救ったらしい。

PHPのWAFはlaravelに決定し,R班で培った(?) Apacheの設定方法でメンバーをサポートしたりと
12時までうつらうつらしながらチームで作業をし,日付超えてから5分もしないうちに寝ました。
おじさんなので21時くらいに寝たかった。


次の日は朝から実装を行っていました。
実装に関してですが,HTMLなどのデザインが絡むことはあまり出来ないのでwafのコントローラーを要したり
DBのmigrationをしっかりしたり,viewの部分を調整したりなどをしていました。
laravel自体Perlと文法がにている事があると思いますが,夏に勉強したPerlのWAFっぽく書くことが出来,順調に実装することが出来ました。
相方がlaravel書いていたことも心強かった。

チーム作業としては作業に集中しすぎてしまい,中間報告や最後のプレゼンの準備時間が取れなかったのがダメだったポイントです。
もう少し周囲を見ながら気を配っていきたいと思いました。
その為僕らのチームは最終成果発表がイマイチな結果となってしまい,その部分が残念なポイントとなってしまいました。
また対象となるTargetユーザーを深掘りしていなかった為,当初のプランと実際に構築したwebサービスのユーザー層が微妙に乖離しており
一貫性や,思考の管理ツールをもう少しちゃんと説明して解消すればよかったかと思っています。

その後はメンター(社員さん)の方に講評を受け,インターンが終了となりました。

インターン終了後は居酒屋で飲み会となり,元はてなの方や,今回のメンターの方や,他のメンバーとワイワイしました。


エクストリーム帰宅

インターン決定後,数週間後に発覚したのですが月曜日にどうしても沖縄に戻らないといけない予定が発生し
夜中に名古屋に移動し,中部空港から月曜6時の便で8時に那覇に着陸する という謎の行動を行っていました。

具体的な行動としては,新幹線の終電(22時東京駅発)に乗り,名古屋に移動。
名古屋駅前のネカフェに4時間ほど滞在した後,名古屋駅4時15分ほどに出発する深夜バスに乗り中部国際空港セントレアに移動。
6時のスカイマークに乗り込むという算段です。以下Twitterでの実況を御覧ください。













つまるところ無事成功し,翌日那覇に付くことが出来ました。 (二度とやりたくない)

その後

水曜日ほどに今回のインターンの総評を個別にしていただき
「説明力がちょっと低いのと指示詞が多いので分かり辛い」というアドバイスを受けました。
プレゼン力はそこそこあると思っていましたが,作業をしながらや,初対面の方への説明などは確かに苦手感があったので活かしていきたいと思います。
技術的な面では評価を頂いて,少し自信になった所があります。ありがとうございます。

またオズビジョンさんが社員旅行で沖縄にお越しになるらしく,また飲む約束をしました。

感想

今回のインターンではチーム作業となっており,今までに学習してきた思考ツールや最初の動き方は間違いでは無かったと確認しました。
しかし,説明力や臨機応変な対応があまりできず最高の結果を出すことが出来なかったのが改善点ではという気がします。
作業としてはPHP結構楽しかったので勉強していくぞ!!!ともなりました


また酔った状態でオズビジョン公式にクソリプしました。真似しないようにしましょう。


その他


*1:別チームも同様な対象だったので,やはり自分達と離れたものの立案は出来ないと思った。

*2: この提案力,説明力が低いのは後日指摘していただいた

Acme大全2017に乗せていただいた

Acme界隈の聖書こと「Acme大全2017」の物理本を友人経由でついに入手したのですが
今までCPANにアップしていた拙作Acmeモジュール3作品について解説をして頂きました.
Acmeが好きでPerlをやっているぞみたいな所があるので,本当に興奮というか光栄で嬉しいです.

f:id:anatofuz:20170921222808j:plain

ちなみMadokaMagicaについては一部処理が壊れていること.
HowToMakeSushiとWant500trillionについてはAAが大きすぎるとのご指摘を頂きました.
まかまかさん本当に丁寧にAcmeモジュール動かして執筆されているのだなと思うと本当に畏怖の念をいだきます.

そんな聖書「Acme大全2017」はなんと電子書籍で購入できます.みなさん買いましょう
booth.pm

「リーダブルコード」(ちゃんと)読んだ

タイトルの通りです.
ちゃんと読んだので記録として残しておきます

読んだ本

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

日数

3日くらい(のんびり読んだ)

内容

読みやすく,保守しやすく,使いやすいコードの書き方についてのtips集.
コードの内容を写経していくスタイルの本ではないので,読み物として読んだ.

具体的な内容はこのQiita記事が纏まっている.

qiita.com


感想

普段バリバリやられている方にとっては当たり前だと思いますが「変数の名前には意味を持たせる」や,「意味のあるコメントを書く」
また「コードを書く前に言葉にして説明する(その結果コードを書かなくても良い事になる場合がある)」など…

他にはコーディングスタイルの話(イコールを揃えるや,変数の置く場所を揃えるなど…)が盛りだくさんという感じでした.
さらにテストの書き方,良いテストとは一体なんぞやといったところも触れられています.


「前なんかで教わったような気がする…」な定石が綺麗に纏まっていてわかりやすかったです.
またHelper関数を書いてみると,こんな風に読みやすくなったぜ系のtipsが書かれていたのですが,この部分は意識したことが無かった為になるほどなという印象でした.



問題となってくるのが,この巻末にも書かれている通り「実際のコーディングで活かせるかどうか」という点に尽きるかなと思っています.
CPANmoduleが結構この辺意識されていると思うので,照らし合わせながらコードを読んでみたいと思います

はてなインターンに(1/2)参加してきました

所謂インターネットで「最高の夏」と言われているはてなインターンが先日終わったので報告です.
実際にどんな内容なのかは ここ とか見ると良いかと思います.


タイトルにもある通り,今回全日程を送っているわけではなくて,1/2.つまり後半パートには進めなかった感じです.


※このエントリを見るよりは,多分完走した他のメンバーや過去の参加者の方々のエントリを見るほうが為になると思うので,そちらを見て欲しいです.*1

応募まで

最近Perlを書くことが多かったので,Perlを使っている企業としてはてなインターンに応募しました.
他の企業も複数応募して,受かった所が1つ,ダメだった所が3つほどあった感じでした.
はてなJSONでプロフィール的なものを送るので,Perlで書いて送信したと記憶に残っています.
使ったスクリプトは消えていて,何を送ったかまではイマイチ覚えていないという雰囲気です.


その後面接があって,面接ではAcmeについて話した気がしています.
Perl6の書きかけのAcmeモジュールとかについて話したような気もしている….
合格の連絡が来たときは,まさかと思う気持ちが強くて,正直自分自身に起こったことなのか飲み込めていなかったなと思っています.


参加まで

インターン参加者にはその後インターン用のSlackと,それぞれの言語の事前課題が課されます.
Perlの事前課題はスイスイ出来たけれど,Jsがほぼ出来なかったので,「初めてのJavaScript」を一度読んで,その後に取り組んでいました.
それでも解らない所があって,Githubでの提出なので,他のメンバーのリポジトリちょっと見て勉強したりしました.
また,自己紹介を書く事もあって,その自己紹介を見ていると「あれ…レベルやっぱ高すぎない…」と不安になっていったのが印象深いです.

インターン

インターン初日

他のメンバーと人事の方とセブン前に集合して,このインターンの注意事項や社長とのお話やメンター紹介などがありました
この時人事の方に「一応脱落精度がある」的な話が改めてでて,漠然と(フラグ踏みそう…)と思った感じです.*2

その後歓迎会でLTをやりました
LTは普段通りの自己紹介だったが,他のメンバーが強者揃いという感じで
普段Acmeで遊んでいるだけの僕は「おおっ…」となったのが強い印象でした.

インターン2日目(Perl基礎)

二日目以降は午前中に講義,午後に実際にその知識を利用してコードを書いてp-rで提出!という流れでした.

インターン二日目はPerlの基礎と,CLIで動くブログプログラムを作ろう!という感じでした.
Perl自体は慣れていてわかっているつもりでしたが,それ以前にプログラムやオブジェクトの設計という所で躓いていた感じでした.

インターン3日目(DB基礎)

3日目はDBの話でした.クエリとはなんぞというところから,良い感じのスキーマの設計.
実際にPerlからDBに干渉するにはどうすれば良いのか.ORマッパはどうしているかなどなどてんこ盛りの内容でした.

このあたりも前日の流れで,DB単体の操作や一階述語論理的な話は講義でやったことがあるけれど,実践でやるには「…???」な状態だったので苦労していました.
他のメンバー見ていると最後まで一貫したスキーマを設定出来ていたけれど,僕のスキーマはわりとガタガタで,最後の日にどかっと変えたりした覚えがあります.

インターン4日目(WAF)

4日目は今までDBと接続出来ていたものを実際にWAFに乗っけてwebアプリ化するぞ!!!という奴でした.
PerlなWAFはAmon2とかMojoとかは触ったことはありましたが,実際にちゃんと動かす(?)アプリを作ったのは中々なく,今までのDBの部分などのリファクタリングなどもしていたので,結構取られた気がしています.

落ち着いてきてからはMojoとかの流れでViewとかを書けるようになってちょっと良かった気がしている.

インターン5日目(Js)

5日目はJavaScriptな話でした.jsはよくわかんなくて(上記参照) JQueryとかのライブラリは使わずに素朴に書いていました.
マウスストーカー書くやつがあったんですが,他のメンバーのクオリティが高くて「おおっ」っとなっていました.(n度目)

インターン6.7日目(機械学習)

インターン6,7日目の午前は機械学習の講義でした.機械学習系の話は大学で勉強していて話は結構飲み込めました.
ですが,「理論はわかるがコードが書けん!!」という状況に陥ってしまった感じがします.*3
やはり次元数増やしすぎると辛い上に,良い感じの特徴量を発見するという所が厳しいところかなと感じました

インターン7日目(デザイン,インフラ)

午後はデザイン.そしてインフラでした.
デザイナーが正直何をやっているのかあまり良くわかっていなかったので,実際のエンジニアとやり取りをする場面などをしれたのは良かったと思います.
またインフラは,非常に気になっていて,今実際に業務で動いている構成や基礎知識を知ることが出来,「なるほどなー」という感じでした.
かなり楽しく勉強できた気がしています… *4

インターン8日目(AWSハンズオン)

8日目は変わってAWSの方が来て,ついにAWSというものを触ってみました.
AWSにデプロイした経験はこれが初めてでしたが,良く噂に聞くAWSはこう使うんだな…という所が体験出来て結構楽しかったです.

ちなみにこの日FGOAWSの障害喰らっていたらしい…
【AWS】FGOの緊急メンテはアプリケーションサーバーの障害が原因と判明、AWSのBeanstalkを使用か?

インターン9日目(企画)

9日目は企画の講義だった.
企画は個人的にアイディアがポンポン出てくる方だとは思っていましたが,実際に作ってみてインパクトと面白さがあるアイディアは僕はあまり出すことができなかったなと思っています.
つまりちょっと真面目すぎて,あまり面白くない感じになってしまったのでは…という気がしています.
ただアイディアの出し方や,「最終的にはヒットしたもの勝ち」な話は為になりました.

インターン9日目,10日目

9.10日目は自由課題で,今まで作ってきたwebアプリに企画を踏まえて何かしらの問題解決機能を作ろう!!というものでした.
作ったものが「イベントごとにブログ記事投稿出来る君」で,実際に使えるようになればそこそこ便利では?と思っていましたが
デモで見せたものはクオリティが悲しいレベルで,他のメンバーの皆さんの自由課題と比べると「辛い…」という感じでした.
他のメンバーの方は,ぶっ飛んでいるものを作っていて,想像力と実装力がすごいな…という感じでした.

その後はTGIFでお酒飲んだりしていた.

様々なこと

インターン後半残れないかもと言われたのは10日目の朝で,それまで必須課題は終わらせていたので,なんとなく「残れるかな…?」という気があったが
「やはりか…」という感情になった.
全体的に処理能力と設計能力が他のメンバーと比べると中々低くて「もうダメだ…」が割りと多発していた気がしていたので,序盤から「残れないのでは…?」という気持ちはでていました.*5
つまるところHTML/CSSを含むWeb回りのスキルが低かったなという感じです.Perlもわかっている気がしていたけど全然わかっていなかった….

TGIFのちょっと前くらいに面談があって,そこで後半に進めないことが確定し,以降は社員さんに励ましていただいたりとかしていました.
その中では「厚い言語の入門書(パーフェクトRubyとか)をとにかく読む」や,「正規表現エンジンを作成する」や「Perlのモジュールを他言語に移植してみる」などのアドバイスを頂きました.
また,「web開発者のための大規模サービス技術入門」を頂きました.


はてなではインターン生に向けた京都観光も企画されているのですが,一人脱落した手前,参加するのも何か忍びなくてキャンセルし,インターンは10日目で終了しました.

雑感


言われたとおりエンジニア人生は確かに始まったばかりで,ですが世間には僕より年下,同年代でバリバリ出来る人がいて
そんな人達と一緒に作業を行うと,自分自身辛くなってくる事が多々あるなと感じました.
だけれども,そんな思いを抱いている暇があるなら,その分やっていく必要があって,良いモジュールのコードや良い本を読んだり,コードを書いたりしないと行けないんだなと感じたインターンでした.


実際10日目が終わったその次の日に,何か悔しくて,京都のヨドバシと梅田の紀伊國屋書店で技術書を買って読んでいました
悔しいというよりかは,焦燥感といたたまれなさで買ったというのが正しいのかもしれないですが….

はてなインターンでは前半の講義しか参加できませんでしたが,参加する前と後では大分考え方やスキルが身についたかなという気がしています.
id:anatofuz の野郎インターンで脱落してから,ちゃんとやってるな」と言って頂けるようにClass::Accessor::Liteとかをまずはゆっくり読み進めたいと思います.

*1: 脱落した人のブログエントリは初めてではという気がしています…

*2:案の定踏んでしまった

*3: いや,正確に内容を理解できていたかも怪しい…?

*4: 直接コーディングがでてこなかったので安心していた気もする

*5: 他には精神的な持病的なものが初週に出ていて,その他様々なものが重なっていた感じでもあった

mac(ubuntu)にanacondaの環境を雰囲気で作る

大学の講義で必要になったので雰囲気でのメモです

実行環境

注意事項

Pythonよく知らないので詳しい人に聞いてください (最悪)

Anacondaとは

Pythonの良い感じのpackageツールと思われるものです.
condaという仮想環境構築ツールと合わせて運用されています.
pyenvなどのpythonの仮想環境ツールやvirtualenvなどの仮想環境ツールを内包し
pipとも併用としたanacondaの運用が可能となる為割りと良いツールと思います.(日本語が怪しい)

またcondaでいれるものは既にビルドされているので,雰囲気的にはaptとかと同じ感じっぽい.
詳細はこの辺を見ると良さそうです.

Anaconda は Environment Isolation Tool (環境分離ツール) ではない - Qiita

AnacondaのDL

公式サイトよりDLをする.

Download Anaconda Now! | Continuum


macの場合はpkgがあり,Linuxの場合はシェルスクリプトwgetすると良いと思います.

Anacondaの構築

pkgの場合,所謂普通のインストローラーが入っている為普通にポチポチすればインストールは完了します.
Ubuntuの場合shell scriptを実行すれば良いでしょう.

インストールは簡単に完了しますが,zshなどbash以外のシェルを使っている場合PATHが通らないという悲しさがあります.

基本インストールしたanacondaは

$HOME/anaconda3 

以下に展開されています.

従ってここにpathを通せばいいので,.zshenvなどに

export PATH="$HOME/anaconda3/bin:$PATH"

な記述をいれて置く必要があります.
Ubuntu等shell scriptの場合bashrcにPATHが記載される為,これをzshrcに移せば動きます.

尚source activateに関しては pyenvと並列しているとシェルが落ちるという悲しさがあります
対策は次のサイトを見れば良さそうです,
qiita.com

condaの使い方

anacondaをいれるとcondaも入ります.コンダコンダ.
ではcondaを使って仮想環境を構築しましょう.

condaで仮想環境を作る場合は conda create といったコマンドを使います

例えばkerasという名前をつけて,python3.6系でjupyterとgraphvizなpackageを入れる場合は次のコマンドです.

$ conda create -n keras python=3.6 jupyter graphviz

tensorflowと名前をつけてanacondapackageを入れる場合は次の通りです.

$ conda create -n tensorflow anaconda

この時に2系のpythonも入れることが可能です

$conda create -n tensowflow2 python=2.7 anaconda


構築した環境は

$ conda info -e

で確認することが出来ます.例えば

$ conda info -e
# conda environments:
#
keras                    /Users/e155730/anaconda3/envs/keras
pyevolve                 /Users/e155730/anaconda3/envs/pyevolve
tensorflow               /Users/e155730/anaconda3/envs/tensorflow
tensorflow2              /Users/e155730/anaconda3/envs/tensorflow2
root                  *  /Users/e155730/anaconda3

な雰囲気です. * がついているものが現在選択されているpython環境です.

環境の切り替えですが

$source activate tensorflow 

など source activate 環境名 で行うことが出来ます.
この際切り替えるとプロンプトに (keras) など環境名が表示されると思います.

尚activateはanacondaが提供しているシェルスクリプトです.

condaからpackageを入れる場合

$conda install -c https://conda.anaconda.org/jjhelmus tensorflow
$conda install -c conda-forge tensorflow

などのコマンドを利用します.基本anacondaを入れれば入っていますが
:: Anaconda Cloud で検索すれば導入出来るコマンドが,打つべきcondaコマンドと共に登録されています.

ここに無い,もしくは衝突したpackageに関してはpipで導入すればいいでしょう.

例えばmatplotlibは

$pip install matplotlib

などとすると良いと思われます.

python環境をrootに戻すには

 $source deactivate


を行いましょう.

では,良いanacondaライフを.

参考サイト

github.com

ブログ引っ越した

ブログ引っ越しました.

というのも最近は id:anatofuz でやっているのですが,はてなだけかつてのidである id:shimitakax だったので
IDリファクタリングの波に乗って変えた感じです.

過去ログの持って行き方は はてなブログからはてなブログへインポート - 256 を参考にしました.
作業時間は10分もしない内で終わりました.UIが洗練されている.

というわけで id:anatofuz でよろしくお願いします.


いやアカウント二つ持つのだめなんだけどな…