TIM Labs

問題

git rebase は便利ですが、時々コンフリクトが起きて停止します:

$ git rebase master
Applying: Add GeneratedColumn
Applying: Add EnumerateGeneratedColumns
Applying: Use EnumerateGeneratedColumns to CreateQuery
Using index info to reconstruct a base tree...
M       AAA/BBB/Summary.cs
Falling back to patching base and 3-way merge...
Auto-merging AAA/BBB/Summary.cs
CONFLICT (content): Merge conflict in AAA/BBB/Summary.cs
Failed to merge in the changes.
Patch failed at 0037 Use EnumerateGeneratedColumns to CreateQuery
The copy of the patch that failed is found in:
   c:/Users/VimWizard/projects/SecretProject/.git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

まず何が影響してるか、 git statusgit diff で確認しますよね。 あれこれ端末内で情報を表示して状況を確認した結果、コンフリクトの解決に取り掛かる訳ですが、 解決するには元々 何のコミットをapplyしようとしてコンフリクトしたのか という情報も重要です。 この情報自体は上記の git rebase からのメッセージに含まれています。 が、しかし、

  • git statusgit diff を何回も実行しているので git rebase のメッセージは流れています。 あのメッセージがどこにあったのかスクロールして探すのは面倒です。
  • 仮に端末内の出力を検索したとしても、 git rebase はコンフリクトしたコミットのコミットメッセージは表示してくれているものの、 コミットIDは表示してくれないので、結局問題のコミットにおける変更点だけを見るには不向きです。

どうにかして一発でapplyし損ねたコミットを表示できないものでしょうか。

今回のあらすじ

SICP3.4.2 Mechanisms for Controlling ConcurrencyDeadlock からラストの Concurrency, time, and communication までバリバリ読んで、残った問題をバッサバッサと解きまくります。

Let over Lambdaの図

Moodle でプラグインやテーマをインストールするには、zip で固めたモジュールを scp などでアップロードするなどの昔ながらの方法 (?) も使えますが、Web の GUI を経由してインストールすることもできます。最近の WordPress みたいなもの−−とかいってもよいのでしょうか。

moodleaddoninstall1.jpg

操作としては、管理権限のあるアカウントで、上の図のように、「サイト管理」>「プラグイン」>「アドオンをインストールする」をメニューから選びます。

少し前の話になるのですが、MariaDB Galera Cluster を、Azure 仮想マシンの Ubuntu 14.04 にインストールしてみたときの手順を備忘録として。完全同期型でどのサーバーもマスターになるというのに心惹かれて導入してみました。

結論からいえば、参考にした「Installing MariaDB Galera Cluster on Debian/Ubuntu」のページに記載されている手順を、そのままコピペでいけたのですけれど、あちらは Ubuntu 12.04 使用だし、日本語のテキストも少し需要があるかもしれないということで、このブログにアップしてみます。

まず、Azure 上に Ubuntu 14.04 の仮想マシンを 2 台、仮想ネットワーク (今回の例では 172.16.  のアドレス設定) 内に新規作成します。以下、1 台目の内部アドレスは 172.16.0.4 で、2 台目は 172.16.0.5 です。作成時点では SSH のポート以外は開けていません。

また、Web サーバーになる予定の仮想マシンも Ubuntu 14.04 で作成しておきます。これのアドレスは 172.16.0.6 です。


問題

以前、 JavaScript でオセロを実装 していたのですが、 この実装には一つ大きな問題がありました。

AI相手にゲームをするのは、それはそれで楽しいものの、 やはりこの手のゲームは人間同士で対戦したくなるものです。 一応、あの実装は人間同士で対戦できると言えばできるのですが、 同じPCの前に座って交代しながら操作する形になので、色々と不便です。

インターネット全盛のこの時代、やはりネット対戦できるようにしたいですよね。 しかしプレイヤー間の通信やプレイ中のゲームの状態の共有は一体どうすれば良いのやら。 オセロのようなターン制の単純なゲームでさえネット対戦対応するには課題が山盛りです。

どうにかして簡単にサクサクっとネット対戦できるようにできないものでしょうか。

今回のあらすじ

SICP3.4.2 Mechanisms for Controlling ConcurrencyImplementing serializers をバリバリ読んで Exercise 3.47 まで解きます。

正常に動かないサンプル実装を眺める図

今回のあらすじ

SICP3.4.2 Mechanisms for Controlling ConcurrencyComplexity of using multiple shared resources をバリバリ読んで Exercise 3.45 まで解きます。

並列処理のバグを埋め込んでいる図

今回のあらすじ

SICP3.4 Concurrency: Time Is of the Essence から Exercise 3.42 までバリバリ読み解きます。

あーでもなくこーでもないと悩んでる図

先日 GHOST と呼ばれる glibc の脆弱性が発表された。なんでも、「リモートから任意のコードを実行できる可能性がある」らしいではないか。しかも様々なプログラムで利用されているライブラリ部分の問題とあって、影響範囲がとても広い。なかなか厄介なことである。

はて、しかし一体全体どうやってリモートから任意のコードを実行しようというのだろう? 話を聞くに、たかが数バイトの情報を範囲外のメモリに書き込める可能性があるだけだという。実際それだけのことでサーバーの乗っ取りなどできるものなのだろうか。そんなわけで、その疑問に答えるべく、本記事では以下の URL で解説されている実際の攻撃方法を若干端折って紹介してみようと思う。

http://www.openwall.com/lists/oss-security/2015/01/27/9

なお、本記事はこの脆弱性そのものに対する緊急度などについて言及するものではないし、実際に攻撃を行うことを推奨するものでもない。くれぐれも攻撃に用いたりしないようご注意願いたい。また、脆弱性そのものに対する適切な対応などについては、専門機関や専門家の指示や勧告に従って欲しい。

今回のあらすじ

SICP3.3.5 Propagation of ConstraintsExercise 3.34 から Exercise 3.37 までサクサク解いていきます。

唸ってる図

最近のコメント