予測不可能な決定系

決定論的なのに予測が不可能……つまり, そういうことだよ

vim と WSL 上の Docker で C# プログラムを作成して Github で公開するまで

以前 Bitbucket に公開していた Project Euler を解いたコードがしばらく触っていないうちになくなっていたので1, これを機に新規で環境を用意して Github 上に公開しようとした際の備忘録.

環境は Windows 上の vim で terminal に WSL を使った C# 環境. vim の terminal で WSL を使い docker コマンドが使えることが前提.

WSL から Docker コンテナの dotnet コマンドを使えるようにする

Microsoft の公式イメージ を使って dotnet コマンドを使えるようにする. ついでに .bashrc に

dotnet='docker run --rm -v $PWD:/app -w /app mcr.microsoft.com/dotnet/sdk dotnet'

エイリアスを追加して以下のコマンドだけでサンプルプログラムなどの実行を確認できるようにする.

dotnet run

Project Euler 1問目の解答コードを C# で書く

作業ディレクトリに移動して

dotnet new console

でテンプレートを作成して Project Euler の1問目をとりあえず解いてみる. 使用した vim の環境はひとまず vim-lsp-settingsC# 用の Language Server を用意して自動補完ができるようにしたのと, caw.vimでコメントのオン・オフをトグルできるようにしたくらい.

ひとまず最低限のコードを書いて問題なく正解を出力できることを確認.

git リポジトリの作成

次に何も考えずに

git init

としてリポジトリを初期化したが, よく考えるとこの時にできるデフォルトのブランチ名は master である. 今後のことを考えるとデフォルトでできるブランチ名を main にしておいたほうがいいかもしれない2. 途中で何故かエラーで git 操作(status や add や諸々)ができなくなったが一度親ディレクトリに移動すると解決した. もしかしたら途中でディレクトリの名前か何かを変更したのかもしれない. 調べてすぐに解決したから良かったけど.

stackoverflow.com

あとは

dotnet new gitignore

で .gitignore を作成し, vim の swap ファイルも無視するように記載.

dotnet コマンドでできる .gitignore だと自分の環境の場合過剰すぎるけど, このファイルに関してはそれでも問題ないと判断.

ここまでで commit してローカルの作業は一旦完了し, リモートの準備をして push すればいいだけ(のはずだった).

Githubリポジトリを作成

Github 上で新規にリポジトリを作成して, ローカルでリモートリポジトリとして登録する3. ここで Github で2段階認証の設定をしていなかったことを思い出して2段階認証の設定をした. ただし, 2段階認証にすると push 等のコマンドラインでの操作時のパスワードによる認証の方法が変更される.

docs.github.com

そこで SSH キーによる認証に切り替えるべくローカルで鍵を作成する. ただし, この時に Windows 側のディレクトリで鍵を作成するとパーミッションが意図したものにはならないので Linux 側のディレクトリで作成する必要がある. これについては以下を参考に解決した.

qiita.com

それ以外で鍵の作成方法や Github への登録方法は以下を参考にするとよい.

docs.github.com

ここまでで認証自体は通るようになったがこの段階だとローカルのブランチ名が master なのでこのまま push するとリモートで main(デフォルト)と master の2つのブランチができることになる. これは本意ではないので今度はローカルのブランチの名前を main に変更してから push する必要がある. そしてローカルのブランチ名を main に変更しても今度はリモートリポジトリにあるライセンスファイルや README ファイルがないので一度 pull する必要がある. ここで単に

git pull origin main

とすると別のエラーになる.

考えてもみればローカルリポジトリとリモートリポジトリはそれぞれ別に作成された関連付けのないリポジトリなので, 単純にマージしようとしても出来ないのが当然であるべき. なので, 以下を参考に

git merge --allow-unrelated-histories origin/main

とすることで強制的に同期させる.

qiita.com

ここまできてようやく

git push origin main

でローカルに作成したコード一式を Githubリポジトリに push して公開することができた.

感想とまとめ

今回公開したリポジトリは以下になる.

github.com

今後の反省としては予めローカルで作成するリポジトリの名前も main に変更しておくとか

chiroru-memo.hatenablog.com

そもそも最初に Github 上でリポジトリを作成してクローンしてから作業するのが混乱が少なそう. 想定されるシナリオはローカルで何かコードを書いていて途中でリポジトリの作成と公開をしたくなった場合は, リポジトリをローカルで作成せずに最初に Github 上で作成してから clone してローカルのファイルを add なり push なりをするのが良さそう. つまりこの場合は自分で git init と打つ必要はなさそう.

解いていくうちに vim 上の環境をより良くしたくなったり(たぶんスニペットとか欲しくなる), 解答を改良したくなったり, 別の言語で解きたくなったりした際に新規でリポジトリを作成することがあるだろから, その時は今回踏んだエラー等に気をつけながら進めたいものです.


  1. たぶん Mercurial で管理していて何もせずに2020年8月を迎えたのだと思う https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket

  2. https://github.blog/2020-07-27-highlights-from-git-2-28/

  3. git remote add origin [REMOTE_URL]

第4回 日曜数学会 in 札幌に参加しました

以前から気になってた日曜数学会…… 札幌でも何度か開催されているのは把握していたけど今まで都合が合わずに参加できないでいました.

今回はついに参加することができたので, 少し感想を書いてみようと思います.

全体を通して

終始ゆるやかな雰囲気の中, ワイワイガヤガヤ楽しんでいる感じでした. 個人的にもメッチャ楽しかったです!

午前の部も含めて11:30~20:30と長丁場でずっと数学のことを時に緩く, 時に深く考える時間というのはかなり貴重だと思います.

少し細かく

おおまかには以下のスケジュールでの進行でした.

  • レクリエーション (午前の部)
  • LT
  • レクリエーション2
  • 懇親会

レクリエーション (午前の部) では「ヌメロン」という数当てゲームに数学っぽい独自ルールを加えてチームに分かれての対戦.

LTでは発表者が語りたいことをパッショナブルに発表し, そして突発的に作成されるトーラスのモデル(回る).

レクリエーション2では別の数当てゲームを全員で楽しみ, 懇親会ではオードブルをつまみつつそれぞれが思い思いに語らい交流.

f:id:Aut_Spyke:20200126124931j:plain
ヌメロンのチーム勝利後のホワイトボード

f:id:Aut_Spyke:20200126154808j:plain
急遽作成される回るトーラス

その他

他には Looking Glass に表示された時刻が素数の時に音が鳴る装置が展示されており, 会を通して随時話題になっていたように思います……そして遂には四つ子素数を皆で楽しむという結末に.

あと昼, 夜ともに食事として参加者の一人が店長をされているカレーパンドラのケータリングサービスがすごく良かった.おいしかったー!

f:id:Aut_Spyke:20200126194614j:plain
素数時刻に音が鳴る

最後に

普段は数学勉強会@札幌に参加している自分としては, 数学勉強会@札幌は既存の数学を「みんなで勉強する!」という感じが強いけど, 日曜数学会のほうはそれぞれの数学を「みんなで楽しむ!」というのがすごく印象的でした. とにかくみんなで楽しもうとする工夫が随所に見られる会だったなぁ.

運営・参加者みんなが一体となって楽しめる会, 本当にありがとうございます! また次回も参加します!!

f:id:Aut_Spyke:20200126183722j:plain f:id:Aut_Spyke:20200126183718j:plainf:id:Aut_Spyke:20200126203446j:plainf:id:Aut_Spyke:20200126161620j:plain
その他の会の様子

「JAZUG札幌支部(きたあず) 第22回勉強会 Azure Kubernetes Service(AKS) ハッカソン」に参加しました

4月13,14日の2日に渡って開催されたきたあずの勉強会に参加してきたのでそのレポートです.

jazug.connpass.com

今回はいつもの1日で座学中心の勉強会ではなく, 2日(しかも午前中から夕方まで)と時間的にかなり長丁場なものでしたが終ってみればアッという間な感じでした.

内容

具体的な内容としては午前中に Microsoft の寺田さんによる Kubernetes などの説明や注意点などの解説, 午後はモブプロの形で参加者の皆で一つのチームになりハッカソンをやるというものでした.

f:id:Aut_Spyke:20190414170930j:plain

感想

いままでは何となく言葉でしか知らなかった Kubernetes や Azure Kubernetes Service について, 今は何となく…ボンヤリと…概要や大まかな流れくらいは分かる……かも, くらいにはなったはずです(やっぱり難しい。。)

それでも基本的な内容については体験できたので今後は自分で調べていく際もよりイメージがついた状態でできそうです.

あとはモブプロというもの自体初めての体験だったので, そちらでの気付き・学びも多かったです.

自分がドライバーのときは緊張でうまくコマンドが打てなかったりとりあえず言われた通りに打つだけになりがちだったし, 他の人が操作しているときは別の人の指摘で「そうか, その視点があったか」という気付きがあったりと, いろいろな体験ができてとても面白かったです.

また, ほんちゃんの内容とは別ですが寺田さんが仰ってた中で印象的だったのが "英語力の差が技術力の差になる" という話でした.

どの技術もそうですが最初に出るドキュメントは英語であることが多く, 勢いのあるプロダクトや技術であればあるほど翻訳が追いつかなかったり日本語で書かれたブログなどの情報が古くなり, 結果として公式の英語のドキュメントを見て調べていくしかないことはままあります.

それを日本語で情報が出るまで待ったりしてるとその分だけどんどん差がついてしまうのは当然です.

また, issue の報告や英語での会話などにしても文化の違いなどもあり, どうしても考え過ぎたり慎重になり過ぎたりする傾向があります.

ただそんなことではあれこれビクついて何もできない・しなくなるので, 拙くても短かくてもいいからまず自分の意思を伝える意識が大事なのかもしれません.

Don't be shy!

要するに

すっごい楽しかった!!

チームの皆さん, 2日間ありがとうございました:D

Code2015 に参加した

Code2015に参加した。

終わってからけっこう時間が経っちゃったけど、
覚えてる範囲で今年も参加した感想を簡単に書いておく。

Opening Speech

@DrewRobbinsさんの基調講演。

今年も3つの単語からなるキーワードを元にしたお話。

今年は

「Eat. Drink. Sleep.」

  • どこで情報を収集し、どこでそれらを共有するのか (Eat)
  • 次々と生みだされる技術やサービス、デバイスの中で何に興味を持っているか (Drink)
  • 今どういうことに取り組んでいるか ((not) Sleep)

これらの情報をOneNote Onlineを通じてイベント中に共有しよう、
という内容だった。


毎年キーになる言葉は変わるけど、
その本質的な部分は初めての時にあった
「Learn. Practice. Share.」
からブレずに、それに肉付けをしている感じになっているんだと思う。

きんぎょばち

今年も結局セッション抜けて温泉行ったりプール行ったりせずに、
ずっと何らかのお話を聞いてた。

自分が聞いていたのは

1日目
  • @jsakamoto さんのWindows環境でのPHP開発
  • チャックさんの「Beyond Openness of the "Death Star"」
2日目
  • にいやまさんのしーぴーゆーの話
  • @jsakamoto さんの「Raspberry Pi を使って、Web 技術を UI にして、スマホからLEDやモーターなどを操作してみる」

急遽にいやまさんのしーぴーゆーの話が2コマ連続になって2日目の2コマ目をどっち行こうか迷ったけど、
結局元から聞きたかった @jsakamoto さんのラズパイの話を聞いた。
最後はラズパイ使った話じゃなくなってたけど、やっぱり実物のデバイスが絡む話は面白いなぁ。

だしもの

去年のコードゴルフに相当するだしものとして今年は
脆弱性ゴルフ」と「QRコードクイズ」が用意されていた。

脆弱性ゴルフ」は事前に用意されたサービズ(Zabuton)に仕込まれた脆弱性を探すというもの、
QRコードクイズ」はQRコードを読みそこにあるクイズを解こうというものだった。

かろうじて自分にできそうだったのは「QRコードクイズ」だったので、なんとなく頑張ってみた…
結果今までで一番真面目にコードを書いた年になった気がするけど、
最終的には自分のIT教養のなさを痛感する結果になってしまったなぁ…まだまだ精進が足りないです。
(Base64とか名前しか知らないレベルなんで。。)

その他

今年も宴会中に参加者の体(心?)をはった大喜利があったり、
VRで遊んでみたり、
温泉入ったり、
朝方までコード書いてたりしてた。
なんかトータルで遊んでた気分だった。


今年も充実した楽しい2日間を過ごすことができました。
参加者の皆様、そして今年も開催してくれたスタッフの皆様に感謝です:)

Azure CLI で Azure の仮想マシンを操作する

手元のマシンにWindowsの開発環境が欲しくてAzureでVMを作ることにした。
とりあえずサブスクリプションの準備をしてポータルでVisual Studio Community 2013の使えるVMを作成してリモートデスクトップで接続できるところまでは確認。


普段使わないときはVMを落としてるから、使うときはポータルからVMを起動→リモートデスクトップで接続という流れになるけど、
どうせならいちいちポータルから起動しないでコマンドで起動して接続したほうが楽そう…
ということでAzure CLIを使ってみることにした。

その際の手順やハマった点のメモ。


基本的にはMicrosoft Azure 自習書シリーズの公開の「17: コマンドラインによる Microsoft Azure 管理 Mac,Linux 編」からダウンロードできるPDFに沿って作業した。
こうしたドキュメントが日本語で読めるなんて素敵な限りだ。

インストール

なにはともあれコマンドのインストール。
Azure CLI ツールを動かすにはNode.jsが必要なのでまずはそのインストールから。

ドキュメントではCentOSへのインストール例が載っているけど、自分のマシンはUbuntuなのでyumではなくaptitudeでインストール

$sudo aptitude install nodejs npm
$node -v

でNode.jsのインストールを確認しようとしたら失敗。。
どうやら標準パッケージから普通にインストールすると"node"ではなく"nodejs"というコマンドになってしまうらしい。
一応そのまま進めてみたけど、やっぱり途中で「node コマンドがないよ!」って怒られるので大人しくインストールしなおすことにした。

Ubuntu 14.04 に Node.jsをインストールする
上記記事を参考にPPAリポジトリを追加して再度インストール。
今度は無事に"node"コマンドがインストールされ、

$sudo npm install -g azure-cli
$azure 

で無事azureコマンドがインストールされるところまで確認できた。
(ここまで読んで初めてドキュメントにUbuntuへのNode.jsのインストールの記載があることを知る。。)

サブスクリプションへの接続

「発行設定ファイルによる認証」で接続情報をマシンにインポートする。
基本的には記載されているコマンドを順番に実行していくだけ。
途中で「無料評価版…」という名前のファイル(当然Azureのアカウント内容によってファイル名は異なると思う)がダウンロードされるが、どうにもこの名前だと補完がされずらいので名前を変えてからインポート。
最後にダウンロードした発行設定ファイルを削除して完了。


ここまででコマンドを使ってAzureを操作する準備が整ったのであとは実際にやりたいことに対してどういうコマンドを使えばいいかを調べるだけ。
以下は残りのドキュメントを読んでて気になったポイント。


いくつかコマンドを実行してみた感じだとazureコマンド以降の機能名や操作に補完が効かなくてちょっと打つのが面倒
(これは個人の設定の問題か??)

今回はあまり使用するつもりはないけど、一通り文書を見てるとBLOBの操作のファイルのアップロードの説明が間違えてる気がする…たぶん第一引数に転送したいファイル名、第二引数にコンテナ名、なんじゃなかろか。


想定としてはMacLinuxからAzure CLIを利用するっていうシナリオかと思っていたけど、
SSH接続の話でPutTTYやTeraTermを使ってSSH接続する話になっていたので、そうではないのかもしれない。


個人的にはコマンドでVMが起動できて状態を確認できれば満足なので

azure vm list
azure vm start name

あたりにお世話になるかな:)

eskk.vim で漢字の変換ができなくなったときのメモ

しばらく前からeskk.vimで漢字の変換が機能しなくなってた。


vimrcの設定は問題なさそうだし、仕事で使ってるWindowsでは問題なく機能していて、
変換が機能しないのは個人で使ってるUbuntu上だけだったので、
不便に感じながらもシステムのSKKを使ったり一時的に別のエディタを使ったりしてだましだましやってた。


そろそろ不便度が高まってきたので、重い腰をあげて調べてみると以下の記事を発見。


eskk.vim でハマった - yasu-n's blogeskk.vim でハマった - yasu-n's blog

久しぶりにeskk.vimを使用してみたら日本語変換できずハマったのでメモしておく。変更した点はOSのLANG設定とvimrcのlanguageのところ。色々試...


ここを参考にとりあえず

  • LANG: ja_JP.UTF-8 -> C
  • vimrc: language mes en_US.utf8

としたところ無事変換が機能するようになった。


しかしこの設定にするとGVIM全体の表示がやや残念な感じになったので、
片方だけ変更したり元に戻したりといろいろやっていると
元の設定でもきちんと機能していることに気づいた。
(一度変換されるようになると元に戻しても大丈夫??)


とりあえず今は動いているので問題ないけど、
もしまた変換できなくなったらこの辺りをとっかかりに調べればよさそうかな。


【2015-02-07:追記】
元に戻しても大丈夫ではなかった。
上記 LANG と vimrc の設定の時に変換した漢字がユーザー辞書に登録され、
設定を戻したときはそのユーザー辞書を見て変換されてるっぽい。
なのでユーザー辞書にある漢字は変換できるけど、
当然そこにない別の漢字は変換できなかった。
LANG と vimrc を C と en_US.utf8 にすればL辞書で変換できてるっぽいから、
やっぱり設定は変換できるほうにしておくことにする。
【追記おわり】

Code2014に参加した

毎年恒例になりつつある夏のイベントCodeに参加した.(三年連続三回目)

以下覚えてる範囲での感想をツラツラと

Opening Speech

@DrewRobbinsさんの基調講演.

一昨年の"Learn, Practice, Share",
昨年の"Clone, Commit, Push",
に続いて今年の標語(?)は

"Connect, Grow, Impact"

コミュニティを通じて人と出会い,人の繋がりがコミュニティを成長させ,
お互いにインパクトを与える,という話.


実際に自分の場合は,社外の人と積極的に会おうとしないと社内のことしか知らないままになっちゃうし,
それだと世の中にある面白いことやすごい人たちを知るチャンスも当然なくて,
そんなの絶対もったいないと思う.
いろんな人と出会い,話をして刺激をもらうことは多いので,これからもこういうのを大事にしたいと思う.


ここからは主に"きんぎょばち".
2つのセッションに別れて興味のあるほうに顔を出して話を聞いたりディスカッションしたり.

.NETアプリケーションの国際化入門

@stknohgさんのお話.
.NETアプリケーションを国際化するときの具体的な話など.
いろいろとハマるポイントや闇が存在して思った以上に大変そうな話だった.
Excelにbahttextなんて関数あったのか…たぶん一生使うことはないな..

TypeScript入門

@chack411さんのお話.
TypeScriptの存在は知ってたけど,ちゃんと話を聞いたり調べたりしたことはなかったかも.
JavaScriptを普段全く使わない自分としては,その手の世界に入門したり遊んでみるには馴染みやすそうでいいかもしれないと思った.
開発環境がいろいろあるのも魅力的に見える理由の一つかもしれない.
(コマンドラインだったりVisual Studioだったりってこと)

宴会 & 温泉

ご飯はおいしかったし,温泉もよかった.
のんびり入っていると体が緩んで明らかにリラックスしていく感じがした.
宴会中の大喜利も面白かった…が,絶対自分は登壇したくないな,とも思った.
登壇者の皆さんお疲れ様でした.(コワイコワイ)

コードゴルフ

前年と同様にコードゴルフも今回のイベントの主要企画の一つだったように思う.
今回は前回と違いチーム戦ではなく,個人的に挑戦した人が2日目に成果を発表する,という形式だった.
自分は早々に諦めて見るに徹したわけだけど,
挑戦した人たちが大変な変態であることだけはよくわかった.
いや,マジですごいな,執念にも似た情熱を感じたりもしたし.
とりあえずはその変態コードを読んで理解してみるだけでも面白いと思う.

Onsen UIの紹介

@jnkyknさんのお話.
Onsen UI自体もそうだけど,Monacaってのも初めて知った.
モバイルアプリの開発事情とか,どういうツールがあるのかは全然知らないので,
いろいろ調べて知っていける良い機会だったと思う.

How to learn English as an engineer

@chack411さんのお話.
エンジニアとして英語とどう向き合っていくか,という話.
ちょっと何かを調べたり,公式なドキュメントを読もうと思うと英語を避けては通れないわけだけど,
英語を読んだり書いたりしてて困った時に皆さんどうしてます?,って感じで参加者が実際に普段使っているサイトやテクニックをみんなで共有したりした.
また,読み書きだけじゃなくて,聞いたり話したりするうえで経験者の実際にあった困ったことや,
その対策なんかの話もあった.
英語で映画や動画を見るというのもあったし自分もたまに見たりするけど,
もう少し意識してその量を増やそうかなとも思った.
また,OSやツールなんかの環境を英語にするっていうのもあった.
これも仮想環境とかで持っておいてたまに触ってみるのも新鮮でいいかもしれない.
あとは,よく言われていることだけど,
日本人は英語を話せないことを過度にネガティブに捉える傾向があるとのこと.
たぶんどういう風に話そうかモジモジ考えて結局話せないくらいなら,
ジェスチャー交えてガンガン話したほうがお互いにハッピーになれるんだと思う.

最後に

今年もスタッフの皆さんのおかげで楽しく刺激的な2日間を過ごせました.
ありがとうございました!