生涯未熟

生涯未熟

プログラミングをちょこちょこと。

golangでScanが上手く動かなかったので原因調べてみた

どうも、今日も元気にGolang生活しております。

今回はbufioパッケージにあるScanの話をば。

問題の発生

とあるライブラリを使ってコードを書いていた時に、Scanを実行しても動かないという現象に遭遇しました。

コードは以下のような感じ

で、 hoge.txt の中身が出力されるのが予想される挙動だったんですが、出力されず・・・

どうしてだろうと、libraryFuncの中を読んでいくとこちらでもfを受け取ってScanを走らせていたことが分かり、「もしやScanって2回動かすとダメなのか?」と以下のようなコードを書いて調査してみました。

一旦、Scanを2回実行してみる形でコードを組んでみました。

で、これを実行してみてもやはり動かない。

原因は?

色々と調べてみてもあんまり理解を得なくて、結局Twitterで凄いエンジニアの方たちに調べてもらった結果、「ファイルのオフセットが回りきってる」という結論に。

というわけで、これまたコード書いて調べてみました。

実行してみると、「0 10」という結果が。

10行のファイルだったので、2回目実行前には既にファイルオフセットが最大の10になっていることが分かりますね。

対処法

対処としては、再度Scanを実行する前にファイルをオープンし直せば大丈夫でしょう。(何か他に良い方法を知っている方がおられましたらご教示下さい・・・)

[追記] もしくは2回目のScan実行前に f.Seek(0, 0) でファイルオフセットを0に戻してもいいかもしれません。

コードとしてはこんな感じ。

これで想定した挙動になりました!

思わぬところでハマりましたが、原因調べてハラオチできたので満足です。

教えてくださった方ありがとうございました!

webpackerを試してみた

Rails5.1からwebpackが標準装備されるということで、試しにRails5.0.1 + webpackerでやってみました。

インストール

Rails5.0.1でプロジェクトを作成し、Gemfileに gem 'webpacker', github:'rails/webpacker' としてmasterから取ってくる。(rails webpacker:install:react を使いたかったため)

bundle install なりでインスコ出来たら bundle exec rails webpacker:install で必要ファイルを生成する。

生成できたらbundle exec rails webpacker:install:reactとすることでReactのファイルが生成されたりします。

bundle exec rails webpacker:install:reactを実行した際に、Yarn executable was not detected in the system.と怒られる場合があります。

僕の場合、yarnのバージョンが古くてyarnpkgのエイリアスが入っていなかったので怒られていました。

webpacker/yarn.tt at master · rails/webpacker · GitHub

↑を見るとyarnpkgとして実行しているのが分かると思います。

なので、yarnのバージョンを上げてから実行しましょう。

これでサンプルのReactファイルが生成され、yarnも実行されるはずです。

また、webpackerのREADME.mdを雑に日本語にしましたので、気になる方は読んでみてください。

github.com

yarnpkgに関してのこのツイートが無ければ永久にエラーで止まったままでした・・・感謝🙏

kirimoriというコマンドラインツールを作ってみた

久々にGolangコマンドラインツール作りました。

その名もkirimori(切り盛り)。

github.com

何が出来るの?

Vimプラグインを追加・削除・一覧表示が出来ます。

例えば、

$ kirimori add Shougo/neocomplete

と実行することで、指定した .vimrc にVundle/NeoBundle/dein.vimのいずれか指定した形式で行を追加します。

Vundleの場合は以下の行が追記されます。

Bundle 'Shougo/neocomplete'

で、後は BundleInstall を実行するだけ。

要らなくなったら、

$ kirimori remove Shougo/neocomplete

で、行を削除。

一覧が見たい場合は、

$ kirimori list
Shougo/neocomplete
Shougo/unite.vim
Shougo/neosnippet.vim

という形で表示されます。

かなり大雑把にコード書いたので、PR・ISSUEなど大募集しております。

2017年の抱負

今年の三が日は食っちゃ寝しながらscalaを勉強してたしょっさんです。

去年も抱負を考えたんですが、今年も何か抱負を立てようかなと。

PMとしての経験値を溜める

去年は年末にちょびっとPMとしてお仕事しました。

自分以外のエンジニアを携えてPMをやるのは、ほぼ初めてだったので至らない所が多々あり「経験不足だなぁ」と我ながら感じました。

なので、今年も機会があればPMをやって経験値を溜めたいなと。

こればっかりは会社の都合もあるので、機会があるなら手を挙げていきたい。

キチンとしたOSSを開発する

今迄はちょっとしたツールの開発くらいでしたが、今年はキチンとした役立つOSSを開発したいなーと。

もっと俗な言い方をすればStarが欲しいです!

ISUCON再トライ

去年のISUCONでほぼ役に立たなかったので、今年こそはちゃんと役に立てるようになって再トライを!

ISUCON開催までにGolang力溜めておきます!

痩せる

めちゃくちゃ不摂生していたためにかなりのデブになってしまいました。

健康のためにもそろそろ標準体重に戻していきます。

英語勉強する

ゆるふわに英語読んだり書いたりしてましたが(Google翻訳使いつつ)、Google様の力を借りなくてもドキュメントはサラサラっと読めるくらいには勉強します。

こんな感じでザッと挙げましたが、これらを中心に頑張っていきます。

あと、色んなエンジニアさんと会ってみたいので興味がある方はお気軽にこちらtwitterアカウントにリプライを飛ばして頂けるとうれしいです。

2016年の棚卸し

あともう少しで2016年が終わりそうですね。

今年は色々とやった年だったので、どんなことをやったか自分のために棚卸ししてみます。

1月

2016年の目標

1月には2016年の目標として以下の4つを設定しました。

  • エロ系サービスを2つ作る
  • Qiitaで1000Contributionを超える
  • ISUCONに出場する
  • MashupAwardに出場する

果たして、この目標は達成できたのでしょうか?

Golangコマンドラインツールを作る

2016年の一発目の生産物としてGolangコマンドラインツールを作りました。

github.com

この頃はちょうどフレームワークやライブラリ等の素振りをしていた頃で、いつも「README.md書くの面倒くさいなぁ・・・」と感じていたので作りました。

今や株式会社エウレカのCTOであるkaneshinさんがContributeしてくださって、「ありがてぇ・・・ありがてぇ・・・」と感謝しつつOSSの息吹をとても感じました。

株式会社ホットスタートアップさんのイベントに参加

peraichi.com

というサービスを作っているホットスタートアップさんが主催していたペラトークというイベントに参加しました。

今年、物凄く成長された会社さんなので興味のある方は一度行ってみるといいですよ(ダイレクトマーケティング

www.wantedly.com

GoogleChromeExtensionを作った

github.com

という、Githubリポジトリの新鮮度がひと目で分かるExtension作りました。

これも僕が「Issueに書き残したいけど、このリポジトリちゃんと整備されてんのかね?」って時に整備されてるか分かるツールが欲しいなーと思ったので作りました。

基本僕が欲しいと思ったものしか作らない主義です。

2月

1発目のバズ

syossan.hateblo.jp

なんか分かんないけどもバズりました。

たまたまGithubで発見したTILリポジトリが意味分かんなかったので、調べてみたことを書いた感じです。

僕は今でもたまにTipsとして書き残したいことや勉強になったことがあった時はTILリポジトリに書いてます。

雑兵Meetup #3 の登壇

また雑兵で登壇しました。

2月頭に痛風になったので、その時の話をしました。

技術関係ない話が出来るのが、雑兵コミュニティの一つの良い所だなーと改めて感じました。

またGoogleChromeExtensionを作る

今度はGithubのトップページに流れてくる「◯◯さんがstarしました」とかのリポジトリの情報を簡易的にサクッと見るツール作りました。

github.com

人のstarした情報見る頻度が下がったので最近は使ってない残念ツールです。

3月

社内エイプリルフールハッカソンで大敗した

「4/1のエイプリルフールの日に何かサービス公開しよう!」って名目で開催された社内エイプリルフールハッカソン

そこで、「イベントに参加申し込みしているユーザーのイベントキャンセル率を表示する」ツールを作ろうとしましたが、期限に間に合わず。

何が問題だったかというと、APIサーバを設けてユーザー一人一人の全イベントのキャンセル情報をそこで取得しようとしたのですが、リクエストのタイムアウト制限(30秒?60秒だっけ?)を回避することが出来ず、無理ポとなった感じです。

ちなみにAPIサーバはGolangで書きました。

このサービス名を「キャンセルわかるくん2号」と名付けたのですが、今でもこれは抜群に良いネーミングセンスだな。と我ながら思います。

2発目のバズ

qiita.com

新人プログラマ応援ってタグがQiitaにあったので書いてみました。

なんか新卒で入った会社への恨みつらみを思い出し、テンションが高まった状態で1hくらいで書きました。

これも何故バズったのかよく分からない・・・

言っときますけど僕マジでクズですよ。

ちなみにこの記事で目標の一つの「Qiitaで1000Contributionを超える」を達成しました。

副業を始める

弊社は副業推奨の会社なのですが、初めて副業をやってみました。

そこでwebsocketの経験など、お金以外の経験を積めたのが良かったですね。

また来年も副業頑張るぞ。

4月

特に何もなかった

5月

平和だった

6月

お仕事の関係でFirebaseとか触ってみてました。

syossan.hateblo.jp

同種のサービスだと国内にMilkCocoaとかありますが、Google様の威光には勝てなかったよ・・・

7月

BoostnoteにContributeしてみる

多分僕の中で初めてOSS活動と呼べることが出来ました。

Boostnoteというメモアプリを常日頃使っているのですが、ある時特定の状況でバグってしまう現象があったのでそれを直してPR投げた感じです。

この経験は本当に貴重でした、ありがとうBoostnote。

8月

JavaScriptの深淵を覗く

syossan.hateblo.jp

JSこわい

9月

ISUCONで大敗

ISUCONに出ました。出場はしたけども全然役に立てなくて泣きそうでした。

syossan.hateblo.jp

一応出場するという目標は達成。

10月

3発目のバズ

ちびっとバズりました。

syossan.hateblo.jp

ちなみに調子乗った結果、Wantedlyに怒られ、それ以来Wantedlyはスカウトメールくれなくなりました。

いやー、逆らっただけでスカウトメールもくれないサービス怖いなー!怖いなー!

11月

またまたGoogleChromeExtension作った

syossan.hateblo.jp

ちょうどポモドーロテクニックにハマってた時に作りました。

今は使ってません(クズ並の感想

Xamarin界隈で燃えた

syossan.hateblo.jp

僕、ちょまどさん大好きなのでそろそろブロック外してくださいお願いします!

12月

初めてGem作った

syossan.hateblo.jp

難しいのかと思ったら案外サクッと作れました。

また気が向いたら何か作りたい。

Advent Calendarの疑問を呈した

syossan.hateblo.jp

なんというか、「◯◯が好き→だから記事書きたい→Advent Calendarに投稿しよう!」って流れから「とりあえずAdvent Calendarに投稿しよう!」って流れになってません?

というような疑問を呈したかったんです。

まとめ

というわけで変に記事がバズった年でした。

僕は言いたいことを言ってるだけなので、まぁしょうがないなと。

あと、目標ですが、

  • エロ系サービスを2つ作る

はエロ系サービスに対する情熱が無くなったのでもういいや。

  • MashupAwardに出場する

も、諸々の事情を聞いたり自分の中で目指す方向性と違うなとなったので多分今後出場することはないです。

概ね目標達成でき、エンジニアとしても色々やれたので満足です。

来年もこの調子で頑張るぞ!