C Sharpens you up

http://qiita.com/yuba に移しつつあります

第4回Kotlin勉強会 @ Sansanにいってきた

AltJava言語(特に手続き型のBetter Java言語)では3年前からCeylon推しだったんですが、Kotlinにはかなわなかったなーと負けを認めてKotlin勉強会に参加してきました。 ちなみに同時期、AltJS言語としてHaxeを推してたけどこれもその後の流れはTypeScriptの…

ちょまど問題の算数的解法を改善=14手

昨日の http://cs.hatenablog.jp/entry/2014/06/18/174157 には出題者の名前からちょまど問題という名前が付いたようです。16手というのは算数的解法で、数学的にはまだまだ先があるのですが、ともかく算数的には16手が最短かと思っていましたが、まだまだ改…

4択10問テストの正解探索回数=最大16回(破られた)

本日twitter上でエンジニアの間で話題になった問題。 4択問題10問のテストを全部埋めて提出すると正解数がわかります。 何回提出すればすべての正解を知ることができますか。10問すべての正解は、最大16回の試行で知ることができます。 (2014-06-20追記:こ…

PostgreSQLでは識別子に大文字を使ってはいけない

タイトルの通り、PostgreSQLではテーブル名、カラム名など識別子に英大文字を使うべきではありません。

DBの自動連番がロールバックしても戻らない理由

SQL

DBの主キーカラムに自動連番(MySQLならAUTO_INCREMENT、SQL ServerならIDENTITY、OracleやPostgreSQLならシーケンス)を設定していると、基本的には連続した数字が付番されていくのですが、行削除もしていないのに抜け番が発生する場合があります。 INSERT…

返す値を一時変数に受けるよりはtry-finally

余計な一時変数というのはなるたけ作りたくないものですが、例えばJavaでこんなコード書いちゃうことあるじゃないですか。 static T poll() { Integer result = array[top]; // (1) if (++top >= array.length) top -= array.length;// (2) return result; }…

.Net FrameworkのDateTime型

日付時刻のデータタイプはだいたいどの処理系でも深い闇を湛えているものです。 .Net FrameworkのDateTime型はさてどんな闇でしょう。

AngularjsがHaxeから扱えない理由

AngularjsはJavascript(以下JS)でリッチクライアントを書くためのMVCフレームワークです。JS MVCフレームワークはいま混戦状態で決定版はどれといいにくい状態ですが、確実に三強の一角ぐらいは占めていますね。Angularjsについてもう少し知りたい場合はこ…

Windowsのコマンドプロンプトでワンライナーを書こうとすると二重引用符がビョーキ

Windowsのコマンドプロンプト(cmd.exe)でコマンド引数に空白を含む文字列を渡したいときは二重引用符でくくります。ここまではよく知られたノウハウ。では、二重引用符を含む文字列を渡したいときは?、となると大半の人はあやしいはず。「¥でエスケープす…

半二重のRS-485上に複数機器をつなげるModbus

BEMS機器の接続規格として最も古いModbusは1970年代からあります。その物理層は二線式のRS-485。半二重のシリアル通信を二線間の電圧差分で伝達するものです。RS-485は単純なシリアル通信であり、ルーティング機能や衝突検知機能は持ちません。しかも半二重…

5Lと3Lのバケツで4Lの水を作る問題・人力で解く編

コーディング課題・5ℓと3ℓのバケツで4ℓの水を用意する問題 - C Sharpens you up 就活シーズンだからかこの記事が検索されることが増えてきたので、プログラムではなく人の頭で答にたどり着く方法をまとめておきます。問題は 5Lと3Lのバケツで4Lの水を作って…

DHCPで立てた社内サーバにマシン名でアクセスできるようにする

Windowsを使えばよろしい。 …で終わってしまうのでLinuxでもマシン名でホストアクセスを受け付けるようにする方法。ドメインがexmaple.comでマシン名がmyhostだったら、dhclientの設定ファイルに次の設定を加えます。 send fqdn.fqdn "myhost.example.com"; …

EBeanのトランザクションがtry-with-resources構文で書けるようになります

Play!(2.2以前)も採用している軽量O/RマッピングライブラリEBeanに出していたプルリクエスト*1が通ったので手前味噌。これまでEBeanでは、トランザクションはtry-finallyで書くのが基本でした。 Ebean.beginTransaction(); try { Order order = Ebean.find…

GitBucketのユーザ認証をActiveDirectoryと連携する

GitBucketは驚きの超お手軽GitHubクローンです。 そのお手軽さたるや、落としてきたgitbucket.warファイルをTomcatにデプロイするかjarとして実行java -jar gitbucket.warするかするだけで社内GitHubがもう構築完了。 あとはrootユーザ(初期パスワード root…

Play2でHaxeを使う覚え書き

HaxeはActionScriptをベースにした汎用言語だが、Javascriptへのコンパイルが当初から実現されているのでBetter JSのひとつとしても人気。 実験的にJava, C#, C++へのコンパイルまでサポートされている。特徴としては、強力な型推論を持ったクラスベースのオ…

Play2でTypeScriptを使う覚え書き

新規プロジェクトのためクライアントサイド開発に使うBetter JSを選定中。 2014/01/09現在の状況。 TypeScriptコンパイラの導入 TypeScriptコンパイラtscはNode.js上で実装されているので まずNode.jsをインストール http://nodejs.org/ (PATHも通す) npm …

C#, Java8のラムダで再帰関数を書く

C#はラムダ記法で無名関数が書けますし、Javaも8からラムダ記法が可能になりました。しかし無名関数では再帰関数が書けません。 さてどういうことか。再帰関数の代表選手として階乗計算を例にとってみましょう。 まず、メソッドとして再帰的に書いてみます。…

ステートレスなPlay2でログイン状態を管理する

Play framework 2.x Java and 1.x Advent Calendar 2013*1の20日目(5日ぶり4回目)です。寄稿予定表をみると、明日担当のgakuzzzzさんの内容とかぶってしまっている可能性がとても高いのですが、Play1とPlay2の違いがあるので許してもらえないものでしょう…

Play! 2.1 アプリを Play! 2.2 に移行した作業の覚え書き

Play framework 2.x Java and 1.x Advent Calendar 2013*1の15日目(4日ぶり3回目)です。Play! 2.1(Java)で作り始めたWebアプリなのですが、まだ作り始めたばっかりのうちに2.2系列のPlay!が出て来たので、どうせなら今のうちにと乗り換えを敢行しました(B…

顧客ログイン後にEBeanのアクセスDBを切り替える

Play framework 2.x Java and 1.x Advent Calendar 2013*1の11日目(5日ぶり2回目)です。さて、法人向けクラウドサービスを提供するときに問題となる、顧客ごとのデータの分離についてが今日のトピックです。個人向けのWebサービスであればすべての情報は1…

LINQで組み合わせを列挙する

先週から話題のこちらのプログラミング課題 新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1 アプローチの仕方はいろいろあると思うのですが、新宿Scala座主宰のid:numanuma08氏は「Scalaだったらリストか…

EBeanでもユニットテストの導入はスマートです。そう、Lombokならね。

Play framework 2.x Java and 1.x Advent Calendar 2013*1の6日目です。お題は、Lombokを使ってPlay2 Javaのユニットテストを書きやすくできますよという話。 *1:Advent Calendarとはクリスマスまでのカウントダウン日めくりのことで、それになぞらえて12/1…

CodeIQ×はてなの賞品をいただきました

「CodeIQの問題・パズルを考えよう」 http://partner.hatena.ne.jp/codeiq_matsuri2013_2 に調子に乗って3問ほどパズルを出したところ、佳作にあたるんですかね、CodeIQ賞に選んでいただけました。 http://codeiq.hatenablog.com/entry/2013/09/06/150247で…

Play2.0 - secureクッキーは設定でオンにしておきたいけど開発機ではオフにしたい場合

secureクッキーは、HTTPSを使っていない場合にはブラウザからサーバに送り返されないフラグを付けたクッキーのことです。 秘密情報をクッキーに乗せて覚えさせたのに、うっかりさんユーザーがHTTPでアクセスしてきてクッキー内容がパケット盗聴で漏れるとか…

SQLプログラミング課題・表示順変更の実現

SQL

CodeIQの問題・パズルを考えよう!(by CodeIQ×はてな)タイトル見ただけで苦労の記憶がよみがえってきた方はその時点で合格ってことでいいかもしれません。INT型の主キーを持ったテーブルがあり、1行を1アイテムとして表示できます。 CREATE TABLE items ( …

C#/Javaで読む、HaskellがIOモナドで実現したいこと

モナドを理解した人がまだ理解していない人になんとか理解してもらおうと書く解説記事ばかり積み上がっていくのはもはやIT系ブログ界の伝統芸ですが、この記事で少しでも貢献になるでしょうか。この記事ではHaskellも関数型言語も出て来ません。読み慣れた手…

コーディング課題・貸しボート屋の問題

CodeIQの問題・パズルを考えよう!(by CodeIQ×はてな)ある湖の貸しボート屋が古いボートを処分しようとしましたが何艘残せばいいかわかりません。 貸し出しリストから、ピークのときに何艘が貸し出されていたかを求めたいです。貸し出しリストは 貸出日時,…

コーディング課題・5ℓと3ℓのバケツで4ℓの水を用意する問題

CodeIQの問題・パズルを考えよう!(by CodeIQ×はてな)5リットルのバケツ(A)と3リットルのバケツ(B)だけ使って4リットルの水を測れと言われたら Aを満タンにする Aから注げるだけBに注いで、終わったらBの水は捨てる(Aに2リットルたまった) AからBに2リッ…

SQL Serverでも論理削除と一意性制約を両立

SQL

一意性(UNIQUE)制約はNULLでない値に対してだけ効く、そう思っていた頃が私にもありました… SQL ServerはNULLも一意性制約の対象になります。NULLになっている行が複数あると重複だと判定されます。SQL-92の規格書をあたってみると、これは完全な規格違反な…

Intellisenseが解析あきらめるコードもあるんです

納涼!ほんとにあった怖いコード(by CodeIQ×はてな)ある夏体験した悪夢のようなコーディングの話です。そのソフトは、もともと1本のプログラムでクライアントとしてもサーバとしても機能するという作りになっていました。そのソフトに転機が訪れます。 サ…

エクスプローラから一発でコマンドプロンプトやPlay!プロンプトを開く

Windowsでコマンドライン操作が必要なとき、わざわざスタートメニューからコマンドプロンプトを探して起動しておられる方はまさかおられませんな。基本操作【フォルダをSHIFT右クリック】→【コマンドウィンドウをここで開く】 はもちろんのこと皆様使ってお…

WindowsのmklinkコマンドとUNIXのlnコマンドは引数が逆

Windowsでシンボリックリンクを作るときは mklink 【作るリンク】 【実ファイルパス】で、UNIXでシンボリックリンクを作るときは ln -s 【実ファイルパス】 【作るリンク】なので引数の順番が逆ですご注意*1。あと、mklinkでは/Hをつければハードリンクで、…

SQL製品別・XORと同値の書き方

SQL

SQLにブール型が定義されたのはSQL99と比較的最近のことなので、ブール型への対応にはまだばらつきがあります。 Oracle(12c), PostgreSQL(9.x) … 対応 SQL Server(2012), MySQL(5.x) … 非対応。1ビット整数のBIT型を代わりに持つ。 XOR(両辺の論理式のうち…

Windowsの巨大フォルダコピーが遅くていらつく? だったらコマンドラインで

Windowsの巨大フォルダコピーが遅いのには、コピーに取りかかる前にフォルダ構造を分析する手間も含まれています。いいから何も考えずコピーしてくれというときにはこれが本当にいらつく。コマンドラインで何も考えずにコピーしてもらいましょう。 xcopy コ…

Linuxサービスが書き出しているログファイルを一発で探し出す

LinuxというかUNIX系のプログラムは、設定ファイルの位置もログファイルの位置もプログラムごとにバラバラ、それもディストリビューションごとにまた違ってくるから扱いづらいです。「Jenkinsのログはどこ!?」となったときにGoogle先生詣でをすることなく一…

SQL Serverの計算列を使ってツリー構造データを完全に制約付ける

SQL

ツリー構造をSQLで扱うための定石はいくつか知られています。 隣接リスト最も単純で、各行が親に当たる行を自己結合で参照します。構造は単純ですが、古いSQLでは子孫を一気に取得する方法がないのでSQLアンチパターンでは「ナイーブツリー」と命名して安易…

IEEE1888のコード例(その1:C#でコンポーネントアクセス)

IEEE1888を検索ワードにしたトラフィックが思った以上にあるのでコード例を追加していくことにします。IEEE1888についての概説はこちら。 IEEE1888を20分で理解する - C Sharpens you up コンポーネントへのアクセスをC#で記述してみます。今後、レジストリ…

データベースでクラス継承を表現する

SQL

こんなスキーマ設計を見ました。 CHECK制約で排他的サブタイプを実現する - pikio公式ブログ オブジェクト指向のプログラミングでは、クラスを継承してサブクラスを作ることはよくあります。そして、アプリケーションではデータを複数のサブクラスに分けて扱…

外部キー参照しあうテーブルを遅延制約で実現する

SQL

先に結論。DEFERRED, DEFERRABLEという単語を覚えてお帰りくださいませ。 そして先にごめんなさい。SQL ServerとMySQLはDEFERRED, DEFERRABLEを未サポートですのでこの記事の内容は使えません。さて話のはじめから。こんな条件のデータを格納したくなったと…

ガチで5分で理解できるワイルドカード総称型("? extends C"/"? super C")

もしくは、「Iterable<Number>にIterable<Double>を代入したいっ!」。もしくは「ガチで5分で理解できる共変・反変」、どれでもいいです。同じことです。 どういうことかというと NumberとDoubleに親子関係があったときにIterable<Number>とIterable<Double>にも親子関係が発生することを共変</double></number></double></number>…

データベース操作でデッドロックは不可避

SQL

デッドロック発生させたと聞いただけで「うわ出たド素人」「それだけはないでしょ」「設計の仕方教わらなかったの?」と炎上3波目くらいまで装弾済みの怖い怖いお兄様方お姉様方こんばんは。案外知られていないのでこの機会に確認しておいていただきたいのは…

JAX-WSでも少しはまともなWebサービスクライアントを作る(実行時にWSDLを要求させない)

注意 追記 2014/03/17この記事で紹介した問題回避方法は処理系依存かもしれません。Windows版JDK7(Oracle)のクライアントモードJVMでは意図通りに動作したもののLinux版JDK7(Oracle)のサーバモードJVMで依然として問題動作(WSDLを実行時に参照してしまう)…

TomcatのフロントエンドとしてApacheを立てないといけない理由

Java系の開発者にとっては当たり前のことかもしれないけど.NET系にとっては初耳の話だったりするのでまとめ。TomcatはJavaで書いたウェブアプリを実行できるウェブサーバ(アプリケーションサーバ)であり、ウェブサーバである以上、単体で80,443ポートを開…

有効なレコードだけに一意性制約をかける

SQL

SQL標準にある強力なCHECK制約をPostgreSQLでも使いたいでござる。 有り体にいうと、一意性制約を付けて論理削除をしたい、というような表現になるのでしょうか。 http://sugar-tomato.hateblo.jp/entries/2013/07/02 無効化したレコードは無視して有効なレ…

twitterでASP.NETとかADO.NETとかつぶやいちゃおうぜ

twitterでASP.NETだADO.NETだVB.NETだと、.NET関連の単語をつぶやくと確実にあれに捕まりますよね。t.coの自動短縮URL化。 ねえなんでWCFってバイト数とか文字数の上限ですぐ引っかかるの。http://t.co/ULsYbu7Lの方が全然ましだったじゃん。— ゆば大好き (@…

IEEE1888を20分で理解する

Wikipediaの記事を読んでもよくわからなかった人のために。 「5分で理解する」というタイトルにしようと思ったんですが書いているうちに5分は無理だなと悟りました。20分ください。 IEEE1888とはなんなのか IEEE1888は建物のエネルギー管理機器類がデータを…

Javascriptで一度しか呼ばれない関数

JavaScriptで、一度しか呼ばれない関数を作る - c4se記:さっちゃんですよ☆もっとJavascriptらしく書けないだろうかとアレンジを試みました。 function one(func) { function action() { var result = func(); action = function() { return result; } retur…

JavaでもC#みたいなオブジェクト初期化子書けるんですよ

コンストラクタが特に何もしてくれず、インスタンス作ってから初期化しないといけないタイプのクラスってありますよね。シリアライズのためだったりJavaBeansだったり、あとはふつーのArrayListだから作ってから内容詰め込みます、みたいに。オブジェクト作…

SQLのカラム制約はテーブル制約と等価

SQL

SQLのテーブルにcol_A, col_Bというカラムがあるとしますよ。ここでCHECK(col_A = col_B)という制約を、col_Aにカラム制約として付けたとします。すると UPDATE my_table SET col_A = col_A + 1; なんて操作は阻止されます。当然。では、 UPDATE my_table SE…

整数を可逆スクランブルする

2年前につぶやいた内容の詳しい説明。 32ビット整数をとりあえずスクランブルするすごく簡単な方法に気付いてしまった。なにか奇数をかけると、それにかければ元の数に戻るような奇数が必ずひとつあるから、それを力任せで見つけてしまえばいいんだ。ビット…