窓を作っては壊していた人のブログ

提督の窓や成績の窓を作ってました.今では適当に好き勝手に開発をしてます.

WebSharpを触ってみた(導入編

Xamarinの強い人たちのツイートを眺めていたらこんな記述がありました.(会話の内容は省略)

なにこの見るからに面白そうなもの…ということで実際にサンプルだけでも触ってみることにしました.

そこそこ詳しくこっちに書いたのでこちらも併せてごらんください. qiita.com

追記に追記(2017年2月20日) 追記(2017年1月27日)

さて,現在開発をmacで行っているのですが,dotnet core のバージョンが 1.0.0-rc4-004616 こんな感じといいますか, project.jsonでプロジェクトを管理するのではなくcsprojで管理し始めたものになると,binding.gypとかを書き換える必要が出てきます. ちょっとdiffを用意し忘れましたが,見ればすぐわかります(雑

ちなみにそれでビルドは全部通ったのですが,スタックオーバーフロー起こしてElectronで起動できませんでした,現在原因調べてます.

予想はついてはいましたが,1.0.0-preview2-1-003177とかに戻すと動きますね…dotnet coreの最新のrc4のものをリネームしてpreview2を指すようにするという対処法で行っていますが, あまり良い方法ではないですね…

edge.jsのプロジェクトにglobal.jsonを加えてビルドするようにしたら問題ないですね.自分のフォークしたリポジトリに入れたのでそれを見ていただければと…

導入

GitHub - xamarin/WebSharp: Support for running C# on the web browser.

からリポジトリをクローンしてきて,その中のExampleをとりあえず眺めてみることに.

Pre-requisitesとして挙げられているものを確認してみると

  • Node.js
  • Native Abstractions for Node.js
  • PepperPlugin

の3つ.Electron触ったことある人ならNode.jsは入ってるだろうし問題無し.

nanはネイティブライブラリをラップしたりしてたことのある人ならば入っているだろうけど,入っていなかったらnpm i nanでインストール

最後のPepperPluginだけれども,この名前を聞くとChromeのあれかな…と勘違いしてしまう.あ,流行ってる(?)PPAPでもないです.ということで,このPepperPluginのインストールについて触れてみることにする.

リンク先に飛んでみると,

If you have never setup WebSharp before, use the make setup makefile target, this will download the dependencies for the build: Pepper SDK and NuGet:

make setup

と言われてるので大人しくmake setupを叩いてみると make: *** No rule to make target `setup'. Stop.

おいREADME!!!!!!!となるのですが,文章を見て察しろということなんでしょうね,WebSharpを一度もsetupしたことがないのであれば,と言っているので,リポジトリのルートディレクトリに行ってmake buildを叩くと無事に関連物がポンポンダウンロードされます.あとは言われた通りにmake buildを叩けば準備完了…と行きたいところですが, 私が以前に書いた Visual Studio for Macをインストールしてmono4.8+が無いと怒られた時の対処法 - Qiita を実践し,monoが4.8.0になっていた場合, mono/utils/mono-dl.hがないとか言われて怒られます.

なのでその時は

sudo ln -nfs /Library/Frameworks/Mono.framework/Versions/4.6.2 /Library/Frameworks/Mono.framework/Versions/Current

みたいにして以前のバージョンに戻してください.(この辺り.zshrcとかに関数用意しておこうかなあ…)

追記(2017年2月20日)

上記のリンクに載せたQiitaの記事に色々と対策やら考察やら書きました. とりあえずPKG_CONFIG_PATHを設定すればln -sとかをしなくて良さそうです.あとはmono 4.8.0 のバージョンを新しめの物にかえれば問題なく動作しそうですね.

あとは言われた通りに写経すれば動くはずです.動かないなーっていう人は,使われてるElectronが自分でglobalに入れたものでバージョンがあっていないとかその辺の問題だと思いますので,node_modules/.bin/electronあたりのものを使って起動しましょう.

とPepperPlugin必要なのかーという感じではありますが,機能を限れば不要でした.

というのもDotNetSamplesのサンプルを試した時はPepperPluginのインストールをしない状態で始めた時に動作していたからです. 詳しい理由とかは調べるのが めんどう たいへんなので,誰か詳しい方お願いします.

触ってみた感想としてはcsxみたいなものかーという感想です. 私はjs書くのが非常に苦手だったので,C# で書けるのはだいぶ負担が減って良いと思います(jsじゃなくてtsという選択肢もあってそっちも使ってたけど,やっぱりC# の方がいい).

すぐ試したいことはネイティブライブラリをラップしたやつでも容易に呼び出すことができるか,またReactの中に埋め込んでごにょごにょ出来るかって感じですかね.

ViewをReactで書いてモデル部をC# で書くとかごった煮感あってすごい楽しみ…Electronで使えるから,GUIアプリケーションもある意味C# で書ける環境が作られつつあるって考えてもいいんですよねやったーーー

mixi git challengeに参加してきました

経緯

今年の夏休みにもメールでgit challengeのことは知っていたけれども,クックパッドインターンに参加していて,後半まで残れるかわからなかったため参加を見送りしていたイベントでした. しかし今の時期に開催されるもので,友人から一緒に出ないと誘われ参加を決意しエントリーシートを提出したところ通ったので無事参加に至る. 通常のgitの運用だったり,OSSへのPRベースの運用でひどい運用のリポジトリを触ったことがなかったので,ぬるま湯につかった私が生き残れる現場なのかこれは...という不安でいっぱいでした.

当日

朝の新幹線に乗っていて大宮で乗り換えたら誘ってくれた友人(k君)と遭遇し,一緒に会場まで向かった. けどこういう日に限ってトラブルは起きるもので,濃霧のため電車が遅延,田舎っぺなので乗り換えの電車がわからないなどなど重なり, 結局集合時間には間に合わず,渋谷駅から会場に行くまでにも迷い,オリエンテーション開始時間ぴったりに到着しました,本当にmixiさん,参加者のみなさんごめんなさい....

会場に着いてからの感想は,ここ本当にオフィスか???というものでした,本当に綺麗(社員の人に聞いたらお客さん向け&人事とかそういう人が基本的に使う空間だったらしい). そこで簡易的なオリエンテーションを受け,なぜバージョン管理システムを利用するか,またmixiでの利用の方法についての解説を受けました.

私たちもチーム開発(SmartCampusや東北大学祭公式アプリ)でgitを活用してソース管理をしていたが,チームがでかくなったりチームの方針ではデザイナでもバージョン管理システムを使うんだなぁということを知った. まぁこの非エンジニアであるデザイナだったりがバージョン管理システムを使うというのが後々の悲劇を生むということは競技のうちに知るのであった.

お昼ごはん

最初のオリエンテーションで今からお昼ごはん,🍣🍣🍣っていうものが見えたので🍣きたあああああと思ったんですよ,思ったんですけどね... どうも今日はイチローマリナーズだかで何かしらしたやつの日らしく,それにちなんでイチローの好物である🍛でした. いや,🍛好きだからいいんだけど紛らわしいわ!!

食に命をかける系エンジニアなので結構早めに並んだのですが,ビーフ人気で私の眼の前で売り切れました,一緒にきたk君,ビーフは美味かったかい...? 私はポークを選択しましたが,結構美味かった,甘めのルゥだったなぁという印象(ビーフ,ポーク,チキン,野菜だと甘めが公約数なのかしら). 他にも野菜なりデザートなりジャガバターがあってよかった. f:id:yamachu_co:20161120121401j:plain:w400

本日メンターになった人は同じ東北大学出身で,しかも馴染みのある研究室の方でした(S研). 研究室の話で盛り上がったり,Subversionからgitになってよかったみたいな感じの話だったり,だいぶ楽しいお昼ごはんでした.

競技に関して

同じ大学から参加のk君と一緒のIチームで競技を行いました. 同じチームで開発していた(リポジトリは違うもので開発をしていたけれども)ので信頼のおける相方でした. 即興で組むとさすがにどれくらいの力量があるのか測れないので本当に相方ガチャっぽくなってしまうので,本当にチームには恵まれていたと思います.

チームの攻略方針としては,とりあえずk君は奇数番目の問題を,私は偶数番目の問題をということで問題を解き始めました. 結果的にいい選択だったんじゃないかなとは思っています(問題の出題傾向的な意味で<-検閲対象

ずっと語録を発していたりで一番 うるさい 和やかで賑やかなチームだったのではないかとう感じで,マイペースで競技を行えました. そのこともあり,問題のことについてはあまり話せないですが,頑張りました,健闘しましたとしか言えませんが,1位タイが3チームあって,結局5位でした. スコア的には3ポイント差で,私が最後の問題を通していれば表彰でした,ほんとごめん... 競技終了10秒前ぐらいにk君がpushして無事CI通った時はマジで燃えました,あいつもってるわ,マジ.

解答解説

知るかこんなコマンド. (と思ったけどクックパッドインターンでやってたことを思い出して頭を抱えた)

まず感じたのは,低級コマンド触ることがないように,ちゃんとしたgitの運用を心がけたいですね,ということ. あとforce pushで投げくんなという印象しか持たなかった. けど実際非エンジニアの入るリポジトリでは今回競技に出たクソリポジトリみたいなことが起こるらしい(最初のオリエンテーションで言ってたやつ),

けどforce pushされた時でもすーぱーえんじにあなら,はいはいこういうことねってことで直せるあたりかっこいい,ああなりたいって思いました.

今日得られた教訓としては, * git の運用に関してのルールを正しくもうけよう * これがいいらしいということではなく,正しく理解できた上で変更をかけよう * 誰かのやらかしがわかるようにCIだったりテストをできる環境を作って,常に通知させるようにしたほうがよさそう

ということでした.ローカルバックアップ強い.

懇親会

酒飲んでソシャゲのチート対策だったりテープメディアがまだ存在しているという話で盛り上がったことぐらいしか覚えてない. 琥珀エビス美味かった.f:id:yamachu_co:20161120175129j:plain:w400

帰宅

帰れてよかった,本当によかった...

実は私帰りの新幹線適当に窓口行ったら取れるだろうと思っていまして,油断していたのですが,はい,とれませんでした(自分では). JRさんDOS攻撃まがいのリロード作業してごめん,本当に指定席とりたかったんだ...となっていたのですが, 本日の相方のk君がチケットをなんとかしてモバイルページでとってくれて無事帰ることができました,20分以上連打作業に付き合ってくれて本当にありがとう,本当にありがとう. ということでこれは今k君がとってくれた新幹線の中で書いています.

おわりに

実際mixi git challengeに参加してよかったかと言われればよかったです,非常に満足のいく内容のイベントでした. 実際あんなやばいリポジトリに触れるかは別として...

あと何がよかったって,こんなにいっぱいoctcatとかのシールもらえました!!!!!!神!!!!!!!(大学から借りてるMacじゃなかったら貼ってた).

f:id:yamachu_co:20161121001433j:plain:w400

他にも強い同年代のエンジニアとの交流もあるし,こんなgitの運用があるんだ,こんなgitのコマンド,業(ワザとも読んだりゴウと読んだりもする)があるんだってことで非常に勉強になりました. 自分のこれからのgitの運用に(あんなひどいリポジトリはないと信じたいが)活かしていけるかなと思いました.

エンジニア職を目指すのであればVCSは手足のように使えて当たり前の世界ですし,是非ともこれからエンジニア職を目指して就職活動だったり, 自分のgit力を上げたいという方は是非とも参加してみてください,非常に優しい面白いメンターの方が待っています.

本当に内容が無いような感じの記事ですけど,お酒が入っているからしょうがないの,許して♡(あとやったこと書くと検閲対象になりそうだから書けない)

検閲対象に入らなければいいな

要チェックgitコマンド * git reflog * git log --pretty=formatほにゃらら

gitコマンドじゃ無いけど,簡単なshell芸出来ないのはちょっとどうかと思います(

けど優勝チームとかSourceTreeばりばり使っても普通に上位行けたので,やっぱりちゃんと使い方とどうなるかと理解すべきかなと思います,あとグラフ見て何がどうなっているのかを察して.

本当の最後に

oppai さいこー!!!!!!!!!!!