出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

meteorチュートリアルを試してRocket.Chatの実装を調べてみた

普段利用しているSlackクローンのRocket.Chatについて, 結構前から動作に影響の大きな不具合が出ていたので頑張ってIssue報告してみた. これ自体は意図は伝わったのか,他にも同様の不具合を報告してくれる人が何人も現れ, これで対処してもらえると思いきや,報告から2ヶ月たっても修正されそうな雰囲気なし.

このままでは非常に使い勝手が悪いので, 自分で修正してみることを視野に検討してみた. とはいえ,フロントエンドはまったくわからないので どこから手を付ければいいのか悩ましいところ. いろいろと調べていたら, Rocket.Chatを実装する meteorフレームワークには 複数のチュートリアルがあることが判明. RocketChatのソースコードを読んでもわからないことばかりだし, かといってJavaScriptから勉強していたのでは時間が掛かり過ぎるので フレームワークの動作からおさえることに.

チュートリアル内容

3種類のチュートリアルのうち,最も基本的なReactなTODOアプリを実装してみた. meteorフレームワーク自体はなんとなく理解できたが, 途中まったく動作せずいろいろと確認してみた結果, チュートリアル内容に誤りがあることが判明. また,同様の不具合としてテストを追加実装しても実行されない様子.

Rocket.Chat実装調査

meteorフレームワークの動作がなんとなく理解できたので それではRocket.Chatの実装も調べてみようと思いきや 当然実際のアプリはより複雑で理解できず.

特にチュートリアルにはなかったディレクトリやインスタンス?が多数登場し どのような仕組みでロードされているのかわからないという, チュートリアルを試した成果がまったくない状況に. 諦めようか悩んでいたところ,やっとファイルを読込む順序や各種ディレクトリの意図を説明する ドキュメントを発見. これを読むことでやっとRocket.Chatの動作がなんとなくわかるようになった.

Issueへの対応

それじゃあ不具合修正も簡単に対処できるかというと,そちらは全く進捗なし. 不具合の原因がmeteorのルーティングまわりを制御する FlowRouterまわりにあることは理解できたが, FlowRouterがおかしいのか,Rocket.ChatにおけるFlowRouterの制御がおかしいのかは切り分けできず.

いろいろと調査しているうちに,時間切れになったので3連休中の調査は一旦終了. ECMAScript2015やnpmまわりの理解も追い付いていないのでまだまだ時間は掛かりそう. このペースで調査を進めて不具合修正できるのが先か,他の人が修正してくれるのが先か.

参加記録 ARC100

記念すべき第100回にて大敗北してしまった.

0完で1001 -> 956. 安定してCD解けるようになりたいと思っていたけど Cが解けないのはきびしい.

C - Linear Approximation

bの候補は b = A_i - i を満たす最小のbと最大のbの間のいずれか => bの候補は最大109通りになるので当然TLE

bの候補は b = A_i - i となる最大N個のうちのいずれか,かつ中央値付近? => 一部でWAが発生(実は悲しさの値のオーバーフロー)

となって,候補はN通りではない?と疑問を持ち始めて悩んでいるうちに モチベーションがどんどん低下していく最悪な事態.

  • 最初からA_i - iと考えておけば問題をシンプルにできたので考察が簡単に進めることができたかもしれない
  • bの候補は考察を基に高々N通りであると判断できておくべきだった
  • そもそも最初の提出がTLEの事を何も考えていなさすぎて酷い
  • intのオーバーフローに気を付けることは競技プログラミングの初歩の初歩
  • 解が中央値であることは考察以前に知識として持っておくべき頻出問題だ
  • コンテストの100分くらい集中力を持続させろ

と,反省点が多過ぎる.

Ubuntu 18.04リリース記念オフラインミーティングに参加しました

UbuntuをメインOSとして利用している割には今までオフラインミーティングに 参加できていませんでしたが,ついに参加することができました.

主催のグリーさま,運営のUbuntu Japanese Teamのみなさま ありがとうございました.

UbuntuでRAW画像を取り扱う

カメラで撮影した画像をUbuntuで取り扱う注意点など. このあたりに苦労するのは自分でなんでもしなくてはいけない Ubuntu(Linux)ならではの問題だなと. 話には出ていなかったけど,Windowsならカメラ側の サポートで問題なく処理できるのだろうか.

Ubuntuで対応できるかを踏まえて道具(カメラ)を選定する という視点は一般的ではないけど Linuxを利用する上では重要なので頭の片隅に残しておきたい.

Ubuntuの同人誌をUbuntuで書く

最近流行り?のドキュメント作成にソフトウェア開発ツールを利用する話. このあたりは自分も会社で導入してみたけど, 消費リソースの関係でフォントを選定するという話は 出費がシビアな同人ならではだなと感じた.

実は「うぶんちゅ! まがじん ざっぱ〜ん♪ 」については 知らなかったので,頂いた本に加えて バックナンバーについても確認してみようと思う.

Wineの話 (タイトル忘れた)

Wineについてや,Wineで動くアプリや動かないアプリ, Wineの使い方などについて. Wineの苦労話をこれでもかという程解説してもらった.

自分はWineは早々に諦めていたので 久しぶりにWineの濃い話を聞いた. 残念ながら自分でも挑戦してみようという気にはならず.

Ubuntu Weekly Recipeのフィードバックの話 (タイトル忘れた)

Ubuntu Weekly Recipeの記事にフィードバックを返そう, OpenNebulaについてやったことを話すよ,という内容. CentOSでやってselinuxにひっかかったり, OpenNebulaのストレージまわりで苦労した話とかは 自分も経験しているのであるあるだな,と思いながら聞いてた.

たぶんこのイベントの中で一番はっとさせられた. 学んだことをアウトプットすることが大切だとは理解していたけど そこに発表者へのフィードバックという意識はあまりなかった. せっかく発表してくれた人のためにも きちんと感想等を述べることは非常に有意義なことだと思うので これからはできるだけ忘れずにフィードバックできるようにしたい.

リリースノートの解説 (発表タイトルあった?)

突如行われた?リリースノートの解説. リリースノートを読むだけでは知りえない リリースノート作成の裏話や, 各項目についてつっこみを入れる話など, まさにリリース記念ミーティングならではであった.

イベント全体

イベント詳細のページでイベント開始時刻が記載されていない, タイムテーブルが大雑把など,かなりゆるふわなイベントを 想像していたけど,想像以上でした.

開始早々お酒とからあげが振る舞われたり, 各種アナウンスがジョークにあふれていたりと 楽しくイベントが進行しました.

またじゃんけん大会(残念ながら勝ち残れませんでした)や 参加者全員サービスプレゼントなど, 思わぬお土産も頂きました. ありがとうございました.

Redmineのサブプロジェクトをソートして表形式に表示する

以前にサブプロジェクトを View Customize Plugin を利用して 表形式に表示する 記事を書いた が 実はサブプロジェクトはソートされていなかった.

デフォルトではサブプロジェクトの作成順に表示されるが, サブプロジェクト名に応じてソートされた方が便利. 実際に,他に利用してもらっている方からもそういう意図のコメントがあった.

あらためて考えてみると,ソートの仕組みを導入すること自体は楽に実装できるが, どのようにソートするかは難しいことに気が付いた. 例えばアルファベットの大文字・小文字の取り扱いや漢字を含む場合など.

あまり複雑なソートを導入するにしても どのようにソートするかは難しいので, 雑に文字列比較で実装することにした.

redmine 'view customize plugin' script to show sub ...

ゼロから作るDeep Learning2の公開レビューに参加しました

Deep Learningまわりは勉強しないといけないよな, と考えていた矢先に 『ゼロから作るDeep Learning ❷』公開レビューのお知らせ を知り,参加させてもらうことにしました.

業務では技術ドキュメントのレビューを行う機会は多いものの, 市販される前の書籍をレビューしたことはなく, 貴重な経験を体験させて頂くことができました.

自分のスペック

前書から読むかいきなりレビューに参加するか迷っていたけど, ニューラルネットPythonを理解していれば前書のを読んでいなくても 読み進められるようにする,と書いてあったので参加を決意することに. 実際,自分の様に前書の評判を知って本書から読む人もいるだろうと思ったので.

レビューした感想

1章に記載の復習でキャッチアップできたので 前書を読んでいないくても内容を理解できたのでよかった. ところどころ前書で説明済みなのか 説明のない表現等があったところが多少困った(指摘した).

自然言語処理には苦手意識を持っていたので 読み切れるか心配していたけど,そこは問題なかった. 基本的な内容の説明はもちろん,最新の研究ではどこまで(どうやって) 上手くいっているのか示していた. これにより,本書の技術的な位置付けを上手く示していたので, 本書の先まで簡単に見通せたのはすばらしいと思った.

一番レビューを進める中で大変だったのが,Dropbox上のpdfによる制約だった. 章ごとにファイルが分割されていたので,ファイル間の検索ができず, 前に出てきたかな?と思ったときに探すことが大変だった. また,同一ファイル内の検索もきちんとできているか怪しいところも.環境問題? 実際にレビューする際は,覚えていなければ説明済であっても気にせずコメントするようにした.

また,どういった点についてレビューすればいいのか迷った. 社内文書であれば,最終的なイメージは想像できる/ある程度決まっているので指摘しやすいが, オライリー本は多数読んだことはあっても前書は読んでいなかったので 好みで記載方法が分かれるところは指摘しない方がいいかも,とも考えていた. とはいえ,他の人も結構好き勝手にコメントしているようだったので, 気にせずコメントすることに.

ちょうどその頃, 技術書のレビューの経験則 というブログ記事を見付けて内容を参考にした. 特に,「ミクロな指摘より、マクロな指摘を」という指摘にはなるほどと思い, それ以降はできるだけマクロな指摘をするように気を付けたけど, 残念ながら実践できたかどうかは難しいところ. やはり,レビューを出す際にどういった点について レビューして欲しいか要望を出してくれると参加しやすいなと思った.

ただ,公開レビューということで,他の人がどのような視点で読んでいるのか参考にできたのは 普段技術書を読むのとは別の面白さがあった. 最近は輪講とかしないけど,文字に残すと(残そうとすると)輪講とは違った 意見が残るのでこれはこれで面白いかも. もちろんレビューという形で文字に残すと通常の感想とは違うのだけど.

その他

ゼロから作るDeep Learning2は2018/6/25に発売予定とのこと. もう一度読むか悩ましいけど,どう直っているか気になるし, 謝辞に名前を入れてくれるということなので記念に買うかも.

ゼロから作るDeep Learning ? ―自然言語処理編

ゼロから作るDeep Learning ? ―自然言語処理編

参加記録 GCJ Qualification Round 2018

システムが一新したGCJ. サーバエラーが相次いだようだけど自分は影響なかった.

ただし,コンパイルエラー(提出クラス名の修正ミス)とか 入出力形式ミスがあったので気を付けたい.

ABC small解けた時点でどれか1つはlarge通るだろうと Dは問題文読むだけで解かなかった.

Saving The Universe Again

Cを右に,Sを左にもってくればいい. 特に右側のCほどダメージが大きいので 後ろからCSの順序となっている位置を持ってきて 交換することを繰り返せばいい.

最初にSの数を数えて最小ダメージを算出し, IMPOSSIBLEかどうか判定したけど必要なかった. Pが30文字以下,Dは109以下なので intだけでよかったけど,本当にそうか悩んでしまった. 最初から思考停止でlong使えばよかったかも?

本当に後ろのCSを交換することが最善か 自信がなくていろいろ検討した(結局確証は得られなかった)のと, 出力形式にコロン(':')を入れていなくてエラーとなったことに気付けなくて 数時間を消費してしまった.

Trouble Sort

手元で実験して奇数番目同士または偶数番目同士でしか 交換が生じないことに気付けた. 先に偶奇でそれぞれ別にソートして 最後に合わせたときにソートされているか判定すればいい.

配列を分割・統合する処理を実装するのに 手間取ったので実装力が足りない.

Go, Gopher!

問題文を理解するのに手間取った. Aが20/200で固定なのにサンプルでは3とか11だったり, テストツールが上手く動かせなかったり.

先に処理する領域を決定し, 領域をはみでないように座標を選択するとよい.

正方形に近くなるような領域を処理するようにしたけど, 折り返し処理が面倒な上に無駄も多くなるので どちらかの一辺は3マスでよかった. 領域が限られているので一辺が3だと足りなくなると思い込んでいたけど 考えなくても自明だった.

参加記録 Codeforces Educational Round 41

久しぶりのCodeforces & 初のEducational. よく知らないままにとりあえず参加.

ABC解いて1619th, Rank 1402でRatings 1408 -> 1419 (+11). 久しぶりの海外コンテストかつEducationalの形式を知らない中で参加した割にはまあ満足. ただし,コンテスト終わり際になってDの方針が決まるものの, 提出できないで終わったのが悔しい.

A: Tetris

最初はまったく問題文が理解できずに時間が経つ. 問題文のテトリスという単語からやっと意図を理解して解いた.

問題を理解してからはすぐに解けた.

B: Lecture Sleep

どこで起こすとスコアが最大になるか,しゃくとり法で探索するだけ. 比較的すぐに解くことができた. (しゃくとり法というアルゴリズム名自体は忘れていた).

C: Chessboard

分割された各パネルの左上を黒or白にするコストを計算し, その組合せが最小となるように選べばいい.

解いている最中から気になってはいたけど, 黒にするコストと白にするコストの両方を計算する必要はなかった. このせいで無駄に複雑にしてしまった.

また,コストの総和が最小となる組合せの選び方を どうすればいいかわからず謎実装してしまった.

D: Pair Of Lines

最初は方針が立たなかった. よく考えれば3点が直線に並んでいれば直線は確定なのだから 最初の5点から1つの直線を決めて,直線にのらない点はもう1つの直線候補として保存, 以降はどちらの直線にものらなくなった時点で不可とすればいいだけだと気付く.

方針を決定した時点で残り時間があまりなく,実装しきれなかったのが悔しいところ. 実装方針もよくなかったし,実装にオーバーフローによる不具合もあったのでダメダメだった.

E: Tufurama

一目シンプルで簡単に解けそうだと思ったけど方針がたたなかった.

Wavelet Matrixというアルゴリズムを利用する問題らしい(参考). 要復習.