yamaguchi.txt

開発日記。備忘録代わりだよ。

ブラウザではアクセスできるのにcurlでhtmlが取ってこれない時

curlのUser Agentが弾かれているのかもしれません。ブラウザのUser Agentをホワイトリストにしてそれ以外を弾くようにしているサイトもあるみたいです。
何のUser Agentで通信しているかは、-vオプションを付ければわかります。

$ curl -A "Mozilla/5.0" https://www.example.com

などとしてUser Agentを偽装しましょう。

超古いサーバーからhttpsにcurlする時

curl: (35) Unknown SSL protocol error in connection to www.example.com:443

こんなエラーメッセージが出るときは、curlが使っているopensslのバージョンが古くて、tlsv1.2以降がサポートされていないのかもしれません。

curlとopensslのバージョンを確認する

$ curl -V
$ openssl version

opensslのバージョンが0.9.hogeだった場合はtlsの最近のバージョンがサポートされていないので、おそらくこれが原因です。

実際に通信しているsslプロトコルを調べる

$ curl -v https://www.example.com

標準エラー出力の中に以下のような行がある。

SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256

opensslのビルド

公式サイトから新しいopensslをダウンロードしてきます。

$ export CFLAGS=-fPIC
$ ./config --shared
$ make -j 4
$ sudo make install

正しくインストールされているか確認する

openssl version

パスを通しておく

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib

curlをビルドする

公式サイトから新しいcurlをとってきます。

$ ./configure --with-ssl=/usr/local/ssl
$ make -j 4
$ sudo make install

with-sslがないと新しいopensslが使われないので大事。

バージョンを確認する。Protocolsにhttps,FeaturesにTLSがあることを確認する。

$ curl -V
curl 7.33.0 (x86_64-unknown-linux-gnu) libcurl/7.33.0 OpenSSL/1.0.1g zlib/1.2.3.3 libidn/1.15
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

これでhttpsに対してもcurlが動くはず

トラブルシューティング

$ curl: (1) Protocol https not supported or disabled in libcurl

こんなエラーメッセージが出た時は、curlをビルドするときにopensslが紐づけられていないのでhttpsに非対応になっている。--with-sslをつけてconfigureしよう。
curlを./configureするとエラー出力の一番最後にビルド情報が載っていて、そこに対応プロトコルが載っているはず。httpsに対応していることを確認する。

QTcpsocketがwriteされない時

全くwriteされない、もしくは意図していたのと違うパケットがtcpでwriteされてしまった場合、デフォルトで有効になっているNagleのアルゴリズムが原因かもしれません。

できるだけまとめて送られてしまうので、逐次的にwriteしたい場合などはsocket->waitForBytesWritten();をwriteの後に書くと正しい挙動になってくれます。

socket->write("hoge");
socket->waitForBytesWritten();

QAbstractSocket::LowDelayOptionでNagleを無効にできると公式ページでは書いてありますが、少なくとも私の環境では無理でした。

techgirlでLTしたよ

昨夜は@kamapuさんにお誘いいただき、techgirlというイベントに参加してきました。


techgirl.doorkeeper.jp

みなさん普通にIT企業にバリバリ勤めていらっしゃる方が多く、普段あまり外の世界と関わらない私にとっては"世の中にはこんなに女性エンジニアがいるんだなぁ"という感動がありました。
LTでは仕事の話が多く私が発表した"/etcを歩く"は完全に浮いてしまっていたのですが、会社の人ってこんなこと考えてるんだーと勉強になりました。
今度からはもっとウケのよさそうな話題を提供するぞ…。

/etcを歩く

/etcのファイル・ディレクトリの小ネタです。
会場がハートビーツさんというサーバー管理の会社で、完全に釈迦に説法状態になっていて怖かったです。

一応スライドはあるのですが、口頭で話すつもりだったので情報量が0なので是非画像の方を見てください。

www.slideshare.net


f:id:yamaguchi_1024:20170409012915p:plain
話そうと思っていた内容は
・thermaldとかいうの、CPUの周波数を監視して冷却するデーモン
・brlapi.key brltty 盲目な人用の点字ディスプレイデーモン 
・magic スペシャルファイル。Fileコマンドが使用するmagicファイル。例えばelfなら7f45からはじまるマジックナンバーを見て、どのファイルか決める
・security ユーザーごとのリソース制御 cpu何コアとか、メモリ何ギガとか
・securetty rootがログイン可能なターミナル tty0,1…
・init系 init と init.dの違い。Linuxで初めに立ち上がるinitデーモンで、古いSysV init の定義ファイルがあるのがinit.dで、新しいUpstartの定義ファイルがあるのがinit. Initのほうが新しいんですね。
・network 基本的な設定。よく使うやつ。
・networks デフォルトは空。ネットワーク名とネットワークアドレスの対応を書く
・subgit gitをsubversionに移行
・passwd ユーザー名、ホームディレクトリ ここにはパスワードは書かれていない,shadow パスワードの実態
debian_version,os-release,lsb_release,issue ディストリやバージョンを取得



半分も話さないうちに時間切れになってしまいました…。
タイムマネジメントしような。

サイバーコロッセオに参加したよ

3/5に秋葉原で行われたサイバーコロッセオ×SECCONというCTFの大会にチーム_hodge+mamaとして参加しました。結果は10位。まぁまぁです。
東京2020公認プログラムらしいです。あまり意味は無さそうですが承認欲求が満たされますね。

今回はオンサイトなのでking of the hill方式ということで、jeopadyとはちょっと変わった感じでした。
可視化エンジンはNIRVANA改で、攻殻CTFの時に見たAMATERASとはちょっと違う気もしました。NIRVANAのほうが若干オシャレな気がします。

今回の教訓は、絶対に性能の良いノートPCを買おうな!!!!!ということです。
素因数分解、scapy等ちょっと重い処理をさせたらフリーズし、競技中10回は電源をブチ切ったので頭の血管が破裂しそうでした。

個別の問題の感想はディスりになってしまうので省略しますが、SECCONだなぁ…という感じでした。
第六問の謎プロトコルモールス信号を二時間くらい考えて思いつかなかったのは本当に世界一頭が悪かったと思います。深く反省しています。
競技時間が短いからか、時間がかかるrevとかpwn系よりも思いつくか思いつかないか、知ってるか知ってないか系の問題が多かったと思いました。


f:id:yamaguchi_1024:20170306213756j:plain
f:id:yamaguchi_1024:20170306213807j:plain
NIRVANA改。おしゃれですね?

f:id:yamaguchi_1024:20170306213814j:plain
f:id:yamaguchi_1024:20170306213837j:plain
SAO好きにならねば…。と思って見たのですが安直なハーレム的な感じが好きになれませんでした。攻殻機動隊でいいよ。

f:id:yamaguchi_1024:20170306213844j:plain
証明がめちゃくちゃ青かったので自殺防止か?と思いました。

鬼畜眼鏡布教ブログ

高校生の時からやってみたいなと思っていた、鬼畜眼鏡という18禁BLゲームをプレイしました。
ありえないくらい良かったので布教するために記事を書きます。

まぁとりあえずOPを見てみてください。いいですよね。
www.youtube.com


今までやった18禁ゲーム(とは言っても恋姫無双と沙耶の歌しかないが)の中でシナリオがダントツに良く、今までの人生の中で初めて主人公が一番好きになりました。
BL好きな人でも好きじゃない人でも、誰にでもおすすめできるゲームです。鬼畜とは言ってもそこまでハードな凌辱はないし、何といってもシナリオが神なので是非プレイしてほしいです。

あらすじ

(公式HPより)
何をやっても裏目に出てしまい、失敗ばかりの営業マン、佐伯克哉。
リストラを目前にして、半ばあきらめていた彼の前に現れたとある人物。

  「これを身につけた瞬間から、あなたの人生は大きく変わります」

そういって手渡された、なんの変哲もない眼鏡。
それをかけた瞬間から、彼の人生は180°変わり始めた――。

その眼鏡をかけている間は、人が変わったように有能に仕事がこなせるようになったのだ。これで俺は今までの駄目な自分を捨て、変わることができる。

しかし、断片的によみがえる眼鏡をかけているときの自分の行動。 
これは本当に俺なのか? 一体俺は何をしているんだ?
そう、その眼鏡は、なんとかけた者を鬼畜に変える禁断のアイテムだったのだ…。

眼鏡の着脱によって、弱気な主人公(受)から鬼畜な主人公(攻)へと変身できる、アダルトリーマンラブストーリー。


感想

太一ルート→本多(ノーマル)→片桐→御堂(ノーマル)→本多(眼鏡)→アキ→御堂(眼鏡)
の順で攻略した。

太一ルートはシナリオが厚く説得力があり本当に良かった。太一の言動は納得できる人が多いのではないだろうか。
太一は克哉の家の近くにある喫茶店の店員。ちゃらんぽらんな感じがする一見普通の大学生だが、ストーリーを進めると太一の育った環境やその倫理観に驚くことになる。
歪んだ愛情ルートは最高だった。太一は克哉のことを「ここにいるのに、いない」と形容していたが、歪んだ関係になってしまうルートでは、克哉のことをどれだけ凌辱して侍らせても自分のものになったという満たされない気持ちだったんじゃなかろうか。救われなくて最高。
太一ルートと本多ルートは受け克哉が一番幸せになるルートなんじゃないだろうか。


片桐はあまり期待していなかったが、結果的には激シコだった。バツイチの課長がメンヘラ乙女だって誰が想像する?
仕事の能力も低く誰にも必要とされていないと感じ続けた片桐にとって、凌辱という行為であっても眼鏡克哉が自分を必要としてくれるのが嬉しかった。バッドエンドの刺殺ルートも他のキャラの刺殺よりCGがあるなど気合が入っており、メンヘラ感が出ていて非常に良かった。
「それは、僕が気が利かないおじさんだからかい?」
眼鏡克哉に凌辱され依存させられて捨てられた時に縋りついていったセリフがこれって、どんだけいじらしんだよという感じだった。
バッドエンド快楽落ちの時の「次は、僕も…」というセリフも可愛くて最高だった。


本多ルートは、王道というか克哉の心の闇を一番理解して慰めてくれるルートだった。
本多は克哉の同期で同僚で、ウザいくらい熱血な男なのだが、克哉との心の摩擦というかすれ違いがアツくて最高だった。
単細胞脳筋な所は攻めでしかなく、ノーマル克哉に対する優しい攻めはもちろん、眼鏡克哉に対しても対等?に攻めようと努力し(受けだが)ちゃんと自我を保っているところがすごい。
約束された攻めという感じ。


御堂攻めルートは王道凌辱という感じ。まあ普通?個人的には電話口であえぐ克哉の声を聴いて好きになっちゃう本多が救われなさ過ぎて好きだった。
御堂受け、あまり期待してなかった分刺激が強かった…。御堂ただでさえ美しいのに一年後に告白した時のCGが絵になりすぎて泣いた。
君は、強姦されると好きになっちゃうタイプのフレンドなんだね!って思っていた。
どれだけ凌辱されても絶対に屈しない芯の強さはもちろん、あんなことされても好きと言われただけで憎しみから愛情に変わってしまう繊細なところも最高。


アキは、ビジュアル的には好みなのだがシナリオが薄い感じがした…。残念…。
受けはアキみたいな淫乱猫みたいな感じより、堅物で真面目だけど弱気…みたいなのが好きなので微妙だった。
もうちょっと一ひねりあっても良かったんじゃないかな?


個人的には、学園ものなんかよりも舞台が会社でビジネスビジネスしているところがツボだった。世の中のリーマンすべてに優しい気持ちを持てるようになった。
エロシーンも良いのだが、それよりもホモが哲学しているシーンが好きということに気が付いたので、そういうゲームがあればぜひ教えてほしい。


ノーマル克哉は本当に最高で、こんなにMで可愛くて幸せにしたくなってシコい主人公はいないと思う。太一は「克哉さんって幸薄そうな感じ・・・。幸せにしたくなる感じ!」と言っていたが、本当にそうだし太一とはつくづく気が合うなぁと思う。
BLの主人公は幸薄そうであればあるほど、そこから救い出してくれる攻めが愛おしくなるから良い。
片桐とノマ克はまさに優しい弱気リーマンで、この二人に幸せになってほしいと心から思うのに、二人のルートがないことがさみしい…。
どちらが攻めでもなく、ゆるゆるとお互いに支えあう生活ができると思うんだけど…。

FPGAで自作CPUを動かしてみよう (1)

この記事はIS17er advent calendarTSG advent calendar の15日目の記事として書かれました。cookies146、お誕生日おめでとうございます。これは、お誕生日プレゼントを作ろうとする試みです。

FPGAでCPUを動かすことについて、ISの先輩の記事などから断片的な知識は得られるのですが設計など全く分からない初心者が全体像を把握したいような時に読める記事が無かったので書きました。間違いがあったら指摘してください。
いつになるか分かりませんが一応続くつもりです。

今日の話は、物理的に必要なもの(購入が必要なもの)と漠然とした設計の話です。

とりあえず、必要なもの

FPGAスーパーキット(これがないと始まらない)

・ MAX10-FB基板用の追加部品
   ・発振器
   ・ピンヘッダ2*40
   ・ピンヘッダ1*40
   ・ピンソケット1*40
   ・ピンソケット2*20
   ・ジャンパピン
   ・SDRAM(オプション)
・MAX10-JB基板用の追加部品
   ・PICマイコン
   ・レギュレータ
   ・LED緑
   ・LED黄
   ・ポリスイッチ
   ・水晶発振子
   ・抵抗の中から120,130,10k,10k,2,2kΩ
   ・電解コンデンサ*2
   ・積層コンデンサ0.1μF
   ・積層コンデンサ22pF
   ・USBコネクタ

環境構築

スーパーキットの本に従って、基盤の組み立てとQuartusの導入、FPGAでLチカくらいまでしましょう。(所要時間10時間)
良ければこの記事を参考にして下さい。

設計の雰囲気

お手本にするアーキテクチャMC6800で、一応先行研究としてこんなブログを発見したが、途中で途切れているのでネタの被りはなかったことにします。この記事だって途中で途切れるかもしれないし。MC6800にしたのは8bitCPUが作りたいとハードウェアの先生に相談したところ、おすすめされたため。

具体的な話は今度にして、とりあえず何を作って何を作らないかを明確にする。

イメージ的にはこんな感じ。RAMとROMはQuartusのwizardという機能でサクッと作れるので、実際にHDLを書くのはcontrolerとALUになる。
f:id:yamaguchi_1024:20161215054318p:plain

現在CPUのモードを3つ考えている。
1.ラズパイのGPIOから信号を受け取りRAMの開始番地から書き込む
2.RAMから命令をfetchし、実行する
3.実行結果をラズパイに送る
1,3は外部と通信するとそれっぽいかなというだけで、本質的には2が重要である。

1のイメージ図
ラズパイのGPIOからの通信をFPGAの外部ピンで受信し、I/O controlerを介して命令がRAMに書き込まれる。
f:id:yamaguchi_1024:20161215222101p:plain


2のイメージ図
RAMから命令がfetchされ、Decodeされてexecuteされるよ、という図。
f:id:yamaguchi_1024:20161215221706p:plain


今回はここまで。
次回はタイムチャートとブロック構成と入出力を決めたい。