2014年7月20日 09:45

[CTF] SECCON2014 CTF オンライン予選(日本語)write-upまとめ予定地

Posted by


SECCON CTF オンライン予選(日本語)にodprojectで出て、1000点51位ぐらいでした。

とりあえず、自分で書くのはあとにして、早い人のwrite-upをメモっておく

バイナリ300:ダンプを追え

他にもまとめ作ってくれてる人がいたのでそっちをみてもいいかも
SECCON 2014 CTF オンライン予選 みんなのWrite-upまとめ – sonickunのブログ



VS2010でIntelliSenseを使う

2013年10月30日 00:20

[プログラミング] VS2010のIntelliSense修復メモ

Posted by


Windows XP上でVisual Studio 2010を使用すると、コード補完ツールのIntelliSense(インテリセンス)が機能しなくなるという不具合が発生する場合があるそうです。
手持ちのマシンで試してみたところ、見事に当てはまっていました。
WinXPのサポート終了まで半年を切り、あまり役に立つことはないと思われますが、せっかくですのでその復旧手順を残しておきます。

不具合の再現

まず、こちらで確認できた再現環境は以下の通りになります。
それぞれ最新版のアップデート(2013/10/30現在)を適用しているものとします。
もちろん、この環境を満たせば必ず発生するというわけでも、他の環境では起こらないことを保証するわけでもありません。

  • Windows XP Professional SP3
  • Visual C++ Express 2010 SP1

この状態でVisualStudio2010を起動して適当になコードを打ちこみ、IntelliSenseを起動します。

VS2010でIntelliSenseが機能しない

VS2010でIntelliSenseが機能しない


…反応がありません。
ログを出力するように設定しても、特に何も表示されないようです。

原因はWindowsの更新プログラム

Stack Overflowによれば、2013年9月に配布されたWindowsのアップデートパッチ「KB2876217」の適用後に不具合が発生したようです。

コントロールパネルから「プログラムの追加と削除」を起動し、「プログラムの変更と削除」を選択します。この時、「更新プログラムの表示」にチェックを入れます。
たくさん項目があって見当たらないときは、配信日である2013年9月9日を目安に探してみると良いかもしれません。

WinXPセキュリティ更新プログラム KB2876217

WinXPセキュリティ更新プログラム KB2876217


不具合の直接の原因はともかく、これを削除してみましょう。
ただし、セキュリティパッチを削除するということは、それだけマシンが危険に晒されるということです。可能であれば別の手段(他OSやIDEを使用するなど)を取るべきと思います。

パッチを削除したら、Windowsを再起動します。

復旧確認と自動更新の停止

再起動後、きちんとIntelliSenseが機能しているかチェックしてください。
手元のマシンでは以上の方法で復旧しました。手順自体は簡単ですが、Windowsのパッチに原因があるということに気付かないと、ひたすら再インストールを繰り返して涙目になってしまいます。

Windowsの設定でアップデートを自動にしている場合、KB2876217が再インストールされて元の木阿弥です。
自動更新を切る、あるいは更新の通知が出たときにインストールせずに再通知しないようチェックを入れるようにしましょう。



ブロック要素にfloat:leftを指定する(2)

2013年8月13日 01:09

[Web] Masonryを使ってdivをタイリングする

Posted by


先日、ODプロジェクト総合ウェブサイトのトップページのデザインを修正しました。

段組のレイアウトにするためfloatを使って配置していたのですが、その途中、特定の条件下でデザインが大きく崩れてしまうという問題に直面。
それについての簡単な説明と、僕が取った解決策を以下に記しておきます。

まずは、ざっくりと。

ブロック要素(div等)をを並べて記述すると、縦に連なって表示されることが多いと思われます。
ここでCSSの float:left を指定すると、左から順番に並ぶよう配置されます。

ブロック要素にfloat:leftを指定する(1)

ブロック要素にfloat:leftを指定する(1)


ブラウザの表示領域の右端に到達すると、次からは下に移動します。
ここでは、ブラウザのウィンドウサイズを変更して、その状態を発生させています。
ブロック要素にfloat:leftを指定する(2)

ブロック要素にfloat:leftを指定する(2)


綺麗にタイリングされていますね。
固定デザインには向きませんが、ユーザの環境に合わせて見た目が変化するウェブページの完成です。
ここまでは特に問題ありません。

異なるサイズのブロックを並べる

ですが、これが異なるサイズの場合はどうなるでしょうか。

高さの異なるブロック要素を並べる

高さの異なるブロック要素を並べる

例えばこのような、高さ(height)が異なるブロック要素を用意します。
先ほどと同じように、ウィンドウ幅を狭めてみましょう。

しまった! バラバラに配置されてしまった!

しまった!バラバラに配置されてしまった!

ご覧の通り、酷いことになっています。

もう少し見てみましょう。
1番(赤色)~3番ブロック(黄色)が一列配置され、そこで右端に到達します。
そして4番(緑色)が改行されるわけですが、左端である1番ブロックの下ではなく真下に置かれてしまっています。
これは縦に長い2番ブロック(オレンジ色)に阻まれてしまっている、と考えられます。

同様に5番(水色)と6番(青色)も、2番が邪魔になっています。
6番は上端がほんの少し引っかかっているだけですが、それでもダメです。
そして7番(ピンク色)になって、ようやく阻む物が無くなったので左端に配置されるわけですが、かえってそれが妙な空白を生み出してしまっています。

このレイアウト崩れが気になる場合、手作業で順番や高さを調整すれば良いことになります。
せっかくですし、何か自動的に解決してくれる方法が無いか探してみましょう。

Masonryを導入してみる

……と、探してみましたら、割とあっさり見つかりました。
MasonryというJavaScriptライブラリです。有名みたいですね。
ちなみにMasonは石工という意味らしいです。まさにタイル貼りといったところでしょうか。

JavaScriptライブラリのデファクトスタンダードであるjQueryを導入していれば、このMasonryはプラグインとして簡単に扱うことが出来ます。
もちろん、単独でのMasonry導入も可能とのことです。

<head>
	<script src="jquery-1.10.2.min.js"></script>
	<script src="masonry.pkgd.min.js" ></script>

	<script>
	$(function()
	{
		//タイリング設定
		$('article').masonry(
		{
			itemSelector:	'.itemSelector',
			columnWidth:	100,	//width,margin,border等の合計
		});
	});

	</script>
</head>

2~3行目:
scriptタグでjQueryとMasonryライブラリを読み込みます。

6行目~:
jQuery向けのコードです。

9~13行目:
Masonryの設定を記述しています。
ここでは、HTMLソース内の article 要素をレイアウト領域全体とし、その中のitemSelectorクラスを実際に配置するブロックとしています。
また、columnWidth は1カラムの横幅です。ブロックの横幅にマージン等を加算した数値を記述します。

<article>
	<!--タイリングするブロック-->
	<div class="itemSelector"> 01 </div>
	<div class="itemSelector"> 02 </div>
	<div class="itemSelector"> 03 </div>
	<div class="itemSelector"> 04 </div>
	<div class="itemSelector"> 05 </div>
	<div class="itemSelector"> 06 </div>
	<div class="itemSelector"> 07 </div>
</article>

続けて Body 内を以上のようにコーディングします。
article タグや itemSelector クラスにしていますが、設定さえすれば何でもOKです。
すると、以下のようなレイアウトになります。(実際には更に色指定などを追加しています)

Masonryによるレイアウト

Masonryによるレイアウト

だいぶ整いましたね!
どうやらこちらは、その時点で一番高さの合計が低いカラムを探し(同値の場合は左側を優先)、その下に配置する……というアルゴリズムのようです。

もちろんこれは極端な例ですが、それなりの効果を望めると思います。

注意点など

画像読み込みのタイミング

Masonryでのレイアウトには、各カラムの高さ情報が必要となります。
そのため、画像ファイル等を読み込む場合は、ロードのタイミングによっては綺麗に配置されません。
imgタグにwidth/heightを設定したり、あるいは読み込み完了を検知するライブラリを別途導入するなどで回避できるとのことです。

padding設定

itemSelectorで指定したブロック要素に対し、CSSでpaddingの値を設定しようとしたところ、上手く行きませんでした。
理由は分かりませんが、このブロック要素の内部に更に

タグでブロックを作り、そちらにmarginなりpaddingなりを設定することで解決できました。



2013年7月24日 20:03

[ガジェット] Oculus Rift購入手順

Posted by


最近、巷で話題のゲーム用ヘッドマウントディスプレイ「Oculus Rift(オキュラスリフト)」が気になって仕方ありません。

"Orlovsky and Oculus Rift" by http://galyonkin.com http://creativecommons.org/licenses/by-sa/2.0/deed.en http://en.wikipedia.org/wiki/File:Orlovsky_and_Oculus_Rift_%289084790214%29.jpg

“Orlovsky and Oculus Rift” by http://galyonkin.com
http://creativecommons.org/licenses/by-sa/2.0/deed.en
http://en.wikipedia.org/wiki/File:Orlovsky_and_Oculus_Rift_%289084790214%29.jpg


探せば輸入代行もあるようですが、OculusVR社は日本への発送も行っているようでしたので、公式通販してみることにしました。
英語オンリーな海外サイトゆえ、日本での買い物とは多少異なる部分がありましたので、その購入方法をメモしておきます。

注文してみよう

まず、OculusVR社の公式サイトから、Oculus Rift開発キットの注文ページを探しましょう。
Pre-Order Nowと書かれたリンクがありますので、これをクリックします。

OculusVR公式サイトのスクリーンショット

OculusVR公式サイトのスクリーンショット


Oculus Rift Development Kitの注文ページには、幾つかのフォームがありますが、これを埋めていきます。
文字コードがUTF-8になっているので、Addressの欄は日本語でも大丈夫かもしれませんが、念のため英語で書くことにしました。
また、クレジットカード番号など極めて重要な情報を入力することになりますので、セキュリティには十分に気をつけてください。

Order Form(注文フォーム)

Product
品物名。当然、Oculus Development Kitを選択します。
Qty
数量。quantityの略らしいです。
✓ I understand this hardware is intended for developers and it is not a consumer product.
開発者向けの商品であることを把握してますか?というチェックボックス。ONにします。

Payment Method(支払い方法)

VISA/MasterCard/Discover
クレジットカードで購入する場合に選択。これを選択したときは、以下のクレジットカード情報も入力する必要があります。
PayPal
電子決済サービスのPayPalを利用する場合に選択します。注文ページ入力後、PayPalのサイトで認証(支払い)を行います。
Card Number
クレジットカードの番号。
Expiration (MM/YY)
クレジットカードの有効期限。
CVV2
クレジットカードのセキュリティコード。カード裏面に書かれていたと思います。
Promo Code
プロモーションコード。何らかの方法でコードを貰った人は入力するらしいですが、詳細は不明です。

Billing Information(請求先)

Country
国名。Japanを選択します。
Company
会社名。個人なら空欄で良いでしょう。
First Name
購入者の下の名前。
Last Name
購入者の苗字。
Phone
電話番号。国際電話番号を付けて、+81-xx-…とした方が良いかもしれません。
Email
メールアドレス。当然ながら英語で送られてきますのでスパムフィルタに注意しましょう。
Address
市町村名より後の住所。例えば永田町1丁目7番1号ならNagata-cho 1-7-1とします。
Address 2
住所その2。建物名などを書く欄ですが、スペルが分からない建物が多いので困りものです。
City
区市町村名。例えば千代田区なら、ChiyodakuかChiyoda-kuのように書きます。
State / Province
都道府県名。
Zip / Postal Code
郵便番号。ちなみにZIPコードというのはアメリカ用の番号なので特に気にしなくて良いでしょう。

Shipping Information(送り先)

✓ Same as billing information
請求先と配達先が同じ場合にチェックします。チェックを外すと住所等の入力欄が表示されます。

以上を入力してcontinueボタンを押すと確認画面が出ます。
送料分の加算などもありますので、きちんと確認し、問題なければ購入します。
自分はPayPal支払いだったのですが、このタイミングで認証を行いました。

その後、確認メールが届きます。注文番号が記載されているので失くさないよう注意しましょう。
また、https://www.oculusvr.com/sales/のリンクから、状況確認や宛先変更ができるようです。



2013年7月3日 22:18

[EPUB] 一太郎2013 玄を使って脚注入りepub電子書籍を作る

Posted by


 前回の「一太郎2013 玄を使ってepubの縦書き電子書籍を作る」に引き続き「一太郎2013 玄」のepub変換機能を検証しようと思います。

 epubの特徴としてリフローで改行や表示行数を環境に応じて変えられるというのがありますが、そうなると気になるのがページごとに脚注を入れた場合の扱いです。
 一太郎では、脚注を「文書末に入れる」方法と「ページごとに入れる」方法が選べるので、今回はページごとに入れてみました。

一太郎で脚注を入力する

 脚注を入れたいところを選択して[挿入]>[脚注/割注/注釈]を選択

1taro_foot1

 今回は、脚注番号として「†(ダガー)」を頭文字、半角数字の連番を設定
 脚注文章に説明内容を入力します。

1taro_foot2

     また、[脚注オプション]を次のように設定しました。

  • [脚注の表示方法]の「縦組のとき縦中横で表示する」をチェック
  • [脚注番号の文字スタイル]を「ゴシック(小)」
  • [脚注エリアの位置]を「ページ末」
  • [番号の振り方]を「連続」

1taro_foot3

 同じ要領で、2ページにわたって3つの脚注を入れました。

1taro_foot0

epubに変換してみる

 メニューから[ファイル]>[他形式の保存/開く]>[EPUB保存]を選択して、epubで保存
 chromeの拡張機能「Readium」で表示させてみます、

epub_foot3

 ウィンドウサイズを調整して一太郎の編集画面と同じぐらいにして見ましたが、脚注は文章末にそろえられてしまいました。
 一太郎からの変換ではページごとに脚注表示をすることはできないようです。
 縦中横で表示されていた脚注番号も普通の縦書きになってしまっています。
 表示環境に左右される部分もあるのかもしれませんが、やはり表示を追及するとepubのコード調整が必要になりそうです。