しらとりのブログ

社会人ひよこプログラマのtil

Javaからexeを起動したらデッドロックしてしまった話

TL;DR 下記の条件をすべて満たすとデッドロックします。 呼び出されるexeが標準出力や標準エラー出力に何か書き込むプログラムを持つ ProcessBuilder.start()やRuntime.exec()の後に何もせずProcess.waitFor()する 解決策はProcessが持つストリームのバッフ…

プロジェクトのドキュメントをMarkdownで管理した感想

silatori.hatenablog.com 以前にこんな記事を書きました。社内のMarkdown布教も進み、ついに成果物ドキュメントをMarkdownで管理していたプロジェクトが先日終了したのでその感想です。 前提 今回のプロジェクトは受託案件でした。機能要求ドキュメントだけ…

キーボード戦争

このまえPC購入の注意点について書いたので、延長線上にPCキーボードについて書いておきます。 silatori.hatenablog.com 方式 大体3つに分かれます。 メンブレン 安いだけ メカニカル うるさい 静電容量無接点 そして私のおすすめは静電容量無接点方式の東プ…

そこそこゲームができるパソコンを買うときの注意点

仕事柄PC購入時の相談をよく受けるのでよく言っていることをまとめ。 ゲーム以外の用途は対象外です。普通に買うならmacbook系かsurface系をデザインや予算と相談で買えばよいと思います。 ベースはツクモのBTO とりあえずG-GEARのどれかをベースにカスタマ…

社内ドキュメントはgitbookで書こう

共有フォルダにExcelとWordで管理するのがつらすぎるので再考。 gitbook node.jsで動作するmarkdown→html変換ツール。 じつはあまりgitとは関係がない。 採用例 Djangoの有名チュートリアルのDjango Girls Tutorialで使われているのがgitbookを知ったきっか…

スマホアプリをリリースしたい 環境選定編 その1

silatori.hatenablog.com 認証とDBとAPIサーバーが欲しい。 → firebase 一応マルチプラットフォームにしたい。 最近WPFやっていたのでXAMLとかMVVMできる。 → Xamarin.forms これだけで済みそうなのが凄い...... 方針 よくよく考えるとPCからも操作できるよ…

Chocolateyでwindowsでもパッケージ管理する

もうバイナリを落としてきてインストールする作業とサヨナラ。 apt-getとかhomebrewのwindows版です。 インストール @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex …

Rebuild.fm

Rebuildというネットラジオが面白いので布教です。 現役エンジニアのTatsuhiko Miyagawaさんが回ごとにゲストを呼んで話題のITニュース、ソフトウェア、ガジェットについてトークするテック系のネットラジオです。最初は自分も友人から教えてもらって聞きは…

スマホアプリをリリースしたい ユーザーストーリー編

silatori.hatenablog.com As a <role> I want <feature> So that <BusinessValue> 誰のために、何をしたい、なぜならこういう価値があるから。 上記のフォーマットでユーザーストーリーを箇条書きしておきます。Connextraフォーマットというらしいです。随時更新予定。 role I want So that</businessvalue></feature></role>…

スマホアプリをリリースしたいことはじめ

今年の目標はストアに自作アプリを並べることなのでそろそろ動きます。 とりあえず作りたいアプリのメモです。 作りたいもの 社内備品管理App 会社で購入する物品の管理ができるアプリ 機能要件 備品登録/参照/更新/削除ができる オフィスを登録できる 端末…

WSL(旧:Bash on Windows)のルートディレクトリが無い

ものごっつハマったので備忘録です。Ubuntu 18.04を再インストールしていた時の出来事。 昔ルートディレクトリがあった場所 C:\Users\%USERNAME%\AppData\Local\lxss 今(2018/07/25時点)ルートディレクトリがある場所 C:\Users\%USERNAME%\AppData\Local\Pac…

C#で競プロするときの標準入力取得コード(LINQ)

コピペ用です。 実行速度よりも提出速度を速めたいのでそっち系のコードです。 /* 入力系 */ // S string S = Console.ReadLine(); // N int N = int.Parse(Console.ReadLine()); // A1,A2,A3,... int[] an = Console.ReadLine() .Split(' ') .Select(int.Pa…

グラブル:クリティカル倍率の期待値を求める

グラブルで学ぶ統計学第1弾 グラブルのクリティカル事情 編成に技巧スキルを含む武器を装備すると、スキルの効果量に比例してクリティカル確率(大ダメージを与える確率)が上昇します。この技巧スキルは2種類存在し、通常技巧と方陣技巧に分けられます。この2…

メソッドグループとは

C#

int→string変換のコードを書きます。 int i = 10; string s = i.ToString; このコードは以下のコンパイルエラーが出ます。 CS0428 メソッド グループ 'ToString' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出しますか? 上記…

switch文を消す黒魔術

C#

ラムダ式勉強中に錬成されてしまったもの。 var commandDict = new Dictionary<object, Action>() { // コマンドID, コマンド { CommandId.hoge, ()=> hogehoge() }, { CommandId.fuga, ()=> fugafuga() }, { CommandId.piyo, ()=> piyopiyo() } } showCommandDict[CommandId</object,>…

競プロの問題を考える(期待値の線形性):続き

続きです。けりを付けます。相変わらず適当なこと言ってるかもしれません。 silatori.hatenablog.com 問題文 数列 ( ) の 美しさ を、隣り合う 2 項の組であって、 差の絶対値が d であるものの個数として定義します。 例えば、d=1 であるとき、数列 (3,2,3,…

競プロの問題を考える(期待値の線形性)

昨日の続きです。ただしく理解できているかあやしいですが、脳内を公開しておきます。 silatori.hatenablog.com 問題文 数列 ( ) の 美しさ を、隣り合う 2 項の組であって、 差の絶対値が d であるものの個数として定義します。 例えば、d=1 であるとき、数…

和の期待値は期待値の和

某所で話題になった問題を調べていたらおもしろかったので紹介します。 問題文 数列 ( ) の 美しさ を、隣り合う 2 項の組であって、 差の絶対値が d であるものの個数として定義します。 例えば、d=1 であるとき、数列 (3,2,3,10,9) の美しさは 3 です。各…

DataTemplateの中からDataContextのプロパティにバインドできなくてハマったこと

WPF

コレクションをItemSourceにバインドするとコレクションの要素にアクセスできる代わりにDataContextのプロパティが見えなくなりました。よく考えると当たり前ですけどハマりました。 RelativeSource こんな感じでバインドの設定をすると親のDataContextにア…

varはobject型ではありません

C#

なんでも入る型じゃないです。知っている型だけ。 型推論 インスタンスを生成するコードを書きます。 Character character1 = new Character(); Dictionary<int, string> FooDictionary = new Dictionary<object, Action>(); 明らかに冗長な部分があります。型宣言とコンストラクタです。v</object,></int,>…

MVVMにおけるViewModelの役割を考える

wikipediaより。 Modelの役割は、後述するViewとViewModelの役割以外の部分と考えるのが妥当である。 ViewはXAMLですし、ViewModelの役割がわかればよさそうなのでここから考えます。 View⇔ViewModeでの役割 コントロールに対応するプロパティを作成する。 …

git rebaseはtopicで

Git

私的Gitの使い方。 作業はfeature/hoge developから機能単位で切る。 git branch -b feature/hoge 他の人がdevelopを進めたら rebaseでdevelopの反映を取り込む。 git branchtopicにいる事を確認する事。 git rebase developコンフリクトはここで解消。 機能…

immutableについて考える

不変(immutable)オブジェクトについて考えを整理する備忘録です。C#を前提にいろいろ考えます。 C#のデータ型についての前提 そもそもC#のデータ型が結構複雑です。値型、参照型、プリミティブ型、組み込み型、複合型、ユーザー定義型、etc。 難しい。。。私…

継承の使いどころが難しい

機能自体を理解するのはそんなでもない継承ですが、使いこなすのはとても難しいと思った話。 コードを使いまわすための継承 同じコードを書いてはいけない。なので共通の処理を基底クラスに書いて継承させる。実装を継承させているパターンです。でもこれっ…

依存性の注入って字面がやばい

あぶない薬か何かでしょうか…???この用語を知らない人の前で口に出すといろいろ誤解されそうですね。 英語だと"Dependency Injection"です。 TR;DR 依存性の(ある物の)注入。 やっぱり字面はやばい…… 依存性とは プログラミングの文脈で依存といえば思い…

WPFで画面とロジックを分離する(ICommand 理論編)

WPF

ICommandとは何者か。という覚書きメモです。下記の実装編のコードがなぜ動くかの補足です。 silatori.hatenablog.com ICommandインターフェース ICommandは標準ライブラリにあるインターフェースです。このICommand型のプロパティをViewModelで作成、Viewに…

WPFで画面とロジックを分離する(ICommand 実装編)

WPF

描画とドメインロジックを一緒の場所に書くとすぐスパゲッティができます。(体験談) VisualStudioのイベントハンドラ自動生成機能はすごく直感的にGUIプログラミングができますが、代償としてイベントハンドラが生成されるコードビハインドが非常に大きくな…

WPFでプロパティの変更をトリガーにしてアニメーションするときにハマったこと

WPF

DataTriggerを使ってアニメーションをするスタイルを作ってハマってしまった。以下が間違ったコード。これだと初期化したときしかアニメーションしなかった。 <Style x:Key="animetionStyle" TargetType="StackPanel"> <Style.Triggers> <DataTrigger Binding="{Binding IsChecked}" Value="true"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> </storyboard></beginstoryboard></datatrigger.enteractions></datatrigger></style.triggers>

ややこしい委譲の意味

C#に触れていると委譲の意味で混乱することがあるので整理しておきます。 Javaに真の委譲は無い 一般に委譲といえばこちらのイメージ。 コンポジションと転送の組み合わせで処理を委譲する。 Javaのサンプルコード class Operation { public int sum(int x, …

WPFことはじめ おすすめ学習ルート

WPF

お仕事でWPFのフルスクラッチをすることになったので、そのときに勉強したことの覚書きメモです。詳しい実装については先人の素晴らしい記事がたくさんあるのでここでは言及しません。勉強をはじめたときにこんなペーパーがあったら良かったなーってものを残…