キーボードメモ

OpenSCAD無理。交差の無い図形をunionすると消えるだとかがあります。ポリゴンは人間が手で書くものではない。

案1

せきごんさんのこのアイデア。プレートの強度とstruggleだと更に強度が落ちたりしそうだけどその辺りはスペーサを埋め込めば良さそう。 ただこのアイデアそのまま使うのはどうなのか。

案2

3Dプリンタで斜めの支柱を作る。強度の確保もあり現実的だけど左右のスペースを食う。 普通のキーボードでは問題ないがトラックボールを置く空間を食べる。

案3

曲面配置やめる。キーキャップで誤魔化しましょう。

Tubus Tara用のライトマウントを自作しました

今日は入力イベントがサイドパネルで開いたTweetdeckに吸われない

TL;DR

フロントバックを自転車に付けると大抵ライトが付かなくなるのでフロントラックに塩ビパイプを固定しました。

本文

自転車にフロントバックを付けると補給食や手袋等を雑に入れられて便利ですが、付ける位置の関係上ライトの光を遮る事となります。 ところで僕の自転車にはこれが付いています。

f:id:namachan10777:20190127233142j:plain
Tubus Tara
これにこうします

ラックのパイプをt3のアルミで挟み込み、そのアルミ板に塩ビパイプを固定しているだけです。 アルミ板とパイプの間にテニグリ(テニスのグリップ様)を挟んでいるので締め付けトルクが小さくても十分に固定されるためパイプへの負荷も少ないです。 ちなみに塩ビパイプを固定するネジは破断しました。油断していましたね。今は塩ビパイプを裏に取り付けています。

適当にJwCADで描いてCNCで彫ったので図面とかはないです。使ってみて実用に耐えそうならCADデータも公開するつもりです。

DensanCTF

Writeupです(多分)

このとんかつが美味い2019受賞

ykbrさん作問だと一発で分かる。 Google Mapから探したけど分からなくて「水沢駅 とんかつ 温泉卵」と検索したら出てきました。メニューは「半熟卵」なのにこれで見つけるGoogle凄い。

More, more, more

分からないのでヒント見たらltrace、straceを使えとあり、ltraceでstrcmpの呼び出しが見えてフラグ取得。フラグが完全にhsmさんでしたね。

Hello, Reversing World!

stringsしてgrepで終わり

WHITE OUT

Base64では無さそうなのでBase52とか試すも分からず。いくら考えても分からず適当にフラグ検索したら平文で出てきました。マジか。 問題とはそこまで関係ないですが、neovimが激重になって辛かったです。 Neovimのバッファは行のリストで実装されているらしく、一行が巨大になると諸々の操作がO(n)な事になって重くなります。 各種エディタの実装を調べていた時にNeovimはline listらしいとの情報を見てはいたのですが、流石にNeovim程の巨大なプロジェクトでそんなナイーブなデータ構造は無いだろうと思い勝手にgap bufferのリストあたりだろうと思っていました。マジか2

この高専カンファが新春2019

春高専カンファに行きました。常にカンファに居ます(いいえ)

前日

高松→大阪なので近いですね。前日は殆ど何もしてないです。 バスは車輪が4つあるのでフェリーで高松から神戸三宮まで動きます。 f:id:namachan10777:20190114014822p:plain 近いですね。これだけ近いと自転車で行ったほうが良いです。

当日

午前の部

時刻 何か
0000 高松ジャンボフェリー乗り場
0100 出港
0510 入港
0800 淀川河川敷で就寝
1030 起床
1100 大阪駅
1130 ラーメン
1145 さくらインターネット到着

行きのフェリーにはちかっしーさんも乗っていたようです。

神戸三宮から大阪ですが、バイパスって車が最優先で設計されているので、歩道は道幅は広いもののアップダウンが激しく歩道橋も適当に設置されていて歩道を走ると本当に疲れます。疲れました。車道を走りましょう。

時間が余るのとフェリーの睡眠では足りないのとで淀川の河川敷で寝ました。1月とは言っても日中ならシュラフとウレタンマットがあれば安眠できます。太陽好き。大阪市はホームレス対策か何かで条例により野宿が禁止されているので昼寝(昼ではない)は出来ても宿泊が出来ないのが辛いところです。そもそも法的に都市公園での野宿はグレーですが。この条例の効果については大阪駅などでところどころ見られる強い生活感から感じられます。

自転車は有料駐輪場に置いてラーメンを食べに行きました。大阪駅は何度か来たことあるので構内は大して迷わず済みました。

午後の部

本体です。今年のグランフロント大阪には案内スタッフが配置されていて助かりますね。初見だとさくらインターネットに辿り着くの絶対に無理なので。 久しぶりにトミーとちゅらさんに会えて嬉しかったです。jigインターンのメンバーと2ヶ月おきに会う生活をしている。

一般発表

何と言っても最初の量子コンピュータの15分発表です。数式を追うのも精一杯と言うか後半は完全にthinking_face。 Cilviaさんの女装の話も本質で良かったですね。スライドも綺麗で流石だなと思います。 式部さんの発表はdotfilesについての物でしたが、僕もdotfilesは公開しているものの毎回手でln -sの温かみをしているのでGNU Makeでインストーラを書くのは是非取り入れたいです。

LT

termiusはプロプライエタリUbuntuしか対応してない(AURに無く公式サイトでUbuntuとあったので)ようで、少数派の苦悩。 政治経済の話は良かったですね。社会契約論以降を何もやってないので資本論をゆるふわに発表したいですが、知識と理解が空中浮遊しているので讃岐カンファぐらいにはどうにかしたい。

女子発表

ちゅらさんの発表が面白くて一番印象に残っています。航空機寝過ごした人の発表は一味違いますね。

LT

pythonはパイプライン演算子やメソッドチェーンのようなものでmapfoldが出来ないのがなあ。 プロジェクトのマネジメントは社会が無理になるので知見共有は積極的にやりたいです。MPが削られるので。

懇親会

caffeineさんとそこそこ話せて良かったです。前回の新春カンファほどFF外の人と会話出来なかったです。これが社会性の限界。 キーボード持っていくなどして会話力(かいわぢから)を補完します。

晩飯

jigインターン生とCilviaさん、福野さんで四国には無いサイゼに行きました。そこそこ食べましたが10人程度で入って8kで済むのすごい。 間違い探しクソ難しくない?

帰路

阪神高速下のバイパスをひたすら走りました。外側の1レーンが2輪専用なので側道を走ってもそこそこ安全です。文盲のドライバーが多いのか、2以上の数を数えられないドライバーが多いのか4輪ガンガン走っていましたが。路面状態は良好にも関わらず平均20 km/hしか出なくて貧脚ここに極まれりです。 出港時刻には余裕で間に合いフェリーで高松まで無事に帰れました。

翌日

0510に高松に着き、家に帰り風呂と就寝。起きるとTOEICで無事死にました。イングリッシュ無理。

高専カンファレンス in 名古屋

前日(移動日)

無計画です。何故なら計画が出来ないので。 瀬戸内海自転車一周を計画しているので予行でテントと寝袋を背負って移動しました。青春18切符です。

出席がアレなので4コマ目終わってからの行動ですが、これが原因で名古屋に辿り着けず米原までが限界でした。

道中大阪駅で見つけた野生のストロングゼロを紹介しておきます。多様性ですね。

当日

滋賀県内からの再出発です。絶起はしたものの普通に名古屋に1150に到着しました。 インターンで同室だったしゅんぴと合流して名古屋名物の台湾ラーメン食べました。

カプサイシンが程よく効いていて最高ですね。中川夏紀になりました(←?????)。台湾要素無いが...。

カンファ

印象に残った発表

ちげさんのフォントの話面白かったですね。フォントソムリエは怖い。 高専塾を作った人の発表はアニメーションが工夫されていて良さを感じました(語彙力)。 実行委員長の発表はアツくて流石実行委員長です。実行委員長すごい。

発表はどれも面白かったですがこれ以上やると語彙力が限界になりそうです。

懇親会

hsm_hx さんとGitコマンドかるたで対戦しました。ちなみにこれの作者は今回登壇していたちげさんです。 hsm_hxさんですが対戦する前まで「絶対勝てない」とか散々言っていたのに対戦始まってすぐ物凄い勢いで札を取っていったのでオタクそういうとこだぞになりました。 辛うじて引き分けましたがオタクそういうところだと思います。

今気付いたんですが、名古屋カンファから全ロボ行ったの僕だけではなかった。

飛び入りLTで限界旅行のLTをしたらウケたので嬉しかったです。宇部カンファではしっかり登壇したいですね。

全ロボ

名古屋カンファ終わってから全ロボ会場に移動していたら全ロボは2130以降入室不可能と知り死にました。青春18切符で名古屋から神戸まで2時間半で移動するのはどう考えても無理で限界宿泊発生です。

一応2日目には参加できましたが結構大変だしやはり名古屋→神戸を青春18切符で移動し次のイベントに参加は無理があると言うか無理しか無かったですね。

反省点

野宿はやめましょう。法的にグレー、雨に弱い、荷物が絶望的に重いなどの問題が発生します。ネカフェなら1.5kくらいで宿泊できるのでその辺りが狙いめですね。 宇部カンファはキャンプ場とネカフェで宿泊していきます...。

まとめ

カンファ、全ロボ共々お疲れ様でしたとありがとうございました:pray:

久しぶりのカンファでしたがやっぱり楽しいですね。jig.jpのインターンの人とも沢山会えました。新春カンファも楽しみです。

再版巡りマス

この世界は不完全なので理不尽があります。四国総文ミニプロコンがそう。 諸々の理由がありMackysonの4単位を掛けてミニプロコンに出ることになりました。

四国総合文化祭

12月に四国の高専の文化部が合同で行う文化祭です。2日間に渡って開催され、吹奏楽や合唱部のあれやそれ、漫研や文芸部の頒布などがあります。 毎年四国の高専が持ち回りで開催しており今年は詫間でした(高松と詫間は別高専なので)。

一日目

近接キャラですね。

時間が余ったので文芸部などの集まるブースに行き、文房具を見てきました。 生まれて初めて万年筆を触りましたがなるほどねになりました。

二日目

決勝で阿南と当たりましたが残念ながらというか当然ながら負けてしまいました。高松は入力無理太郎になったので「俺は今からソルバを捨てる!」をしましたが、阿南はソルバを運用しており完全に負けました。 ミニプロコンでは準優勝ですが、一日目と二日目の昼食は優勝したので平均すると優勝ではないでしょうか(ない)。

まとめ

漬け丼とうなぎは最高でしたね

D言語のインラインアセンブラ

人生にはインラインアセンブラが必要なことがありますよね。 D言語にはインラインアセンブラが実装されておりIntelスタイルでアセンブリを書くことが出来ます。

はじめに

この記事はD言語 Advent Calenderの12日目の記事です。 遅れての投稿で申し訳ありません。 ここに書いてあることは殆ど公式LLVM公式に書いてあるのでそちらを読んだほうが多分正確な情報が手に入ります。

基本構文

import std.stdio: writeln;

void main() {
    int a = 5;
    writeln(a);
    // asmブロックで囲む
    asm {
       // asm外で定義した変数を触れる
       mov RAX, a; // 末尾には「;」が必須
       add RAX, 1;
       mov a, RAX;
   }
    writeln(a);
}

関数からの値の返却

RAXレジスタに入れて抜けます。

int add(int a, int b) {
    asm {
       mov RAX, a;
       mov RBX, b;
       add RAX, RBX;
   }
}

D言語で追加された命令

align

align <Interger Expression>

命令を次の命令までの倍数で整列させるためにアセンブラにNOPを吐かせる命令です。

even

alignのに2が指定されたのと同じ意味です。

naked

D言語インラインアセンブラはデフォルトでprolog(論理型プログラミング言語ではない)とepilogを生成しますがそれをさせない命令です。 関数を全て書く場合などで、prologもepilogもプログラマ自信が書く場合などに使います。 基本は付けておいたほうが良いでしょう。

d.?

コードにデータを直接埋め込むための疑似命令です。 オペランドに文字列を指定すればバイト列で埋め込む事も出来ます。 |疑似命令|データ型| |-------:|-------:| | db | 8bit 整数 | | ds | 16bit 整数 | | di | 32bit 整数 | | dl | 64bit 整数 | | df | 32bit IEEE754浮動小数点数 | | dd | 64bit IEEE754浮動小数点数 | | de | 80bit 浮動小数点数 |

Operand Types

mov [RAX], 3;

上の例では3の型が曖昧です。3の型によって命令の意味が変わってしまいます。

mov int ptr [RAX], 3;

なのでこのようにintのptrとして書き込むとしてしてやります。

構造体等の扱い

struct Foo {
    int a, b, c;
}

// bを返す
int bar(Foo *f) {
    asm {
       mov RBX, f;
       mov EAX, Foo.b.offsetsetof[RBX];
   }
}

offsetsetofを使います。

struct Foo {
    int a, b, c;
    int bar(Foo *f) {
        asm {
           mov RBX, this;
           mov EAX, b[RBX];
       }
    }
}

構造体内だとメンバ名だけで書くことが出来ます。

最後に

D言語インラインアセンブラアセンブリそのままではなくD言語コンパイラによって意味解析まで行われるのでかなり書きやすくなっていると思います。 ただ、全ての命令が使える訳でも無く、例えばshlなどはオペランドを2つ取る形式しか使えません。 SSEもSIMDモジュールと同じでSSE4.2までです。 D言語のasm{}ではx86x86_64までしかサポートされていませんがLDCを使うとLLVMインラインアセンブラを使えるモジュールがあるのでARM、PPCMIPSなどのインラインアセンブラも書くことが出来ます。 D言語Adc遅れて申し訳ないです。

編集

Twitterでshitsyndromeさんにご指摘頂きアーキテクチャ名をamd64 -> x86x86_64に、EAXを一部RAXにしました。