ぼくフルスタックエンジニア。

フルにスタックされすぎて積んでる人のブログ

ネカフェハッカソンのすすめ

皆さんこんにちは、じぶりんです!

進捗どうですか。ダメですか?ダメですよね??

今日は、進捗でないときに使える魔法のテーマパーク、ネカフェハッカソンを紹介します!!!

ネカフェハッカソンとは

f:id:gpioblink:20191023093613p:plain

その名の通り、ネカフェでハッカソンすることです。 普段の開催時は、ナイトパックで8時間ほど滞在しています。

今回は、「快活クラブ」でのネカフェハッカソンを紹介します。

ネカフェハッカソンのメリット

充実した設備で進捗がどんどん出る

過ごしやすい気温。 喉が乾いたら飲み放題。味噌汁だってある。 お腹すいたらソフトクリームも食べれる。 疲れたらシャワーで休憩もできる。

f:id:gpioblink:20191023093737p:plain

そして、朝になったら食べ放題の朝食が出てくる!!

f:id:gpioblink:20191023093841j:plain

これ全部合わせて8時間パックで学割適用なら1000円いきません! 快適に進捗が出せます。

誰かに監視されている感が得られる

1人だと進捗でないけど、誰かに見張られていたら進捗を出そうと思いませんか。 ネカフェなら、客や店員など様々な人が深夜でも時より歩いています。

そのため、誰かがいる感覚を常に得られます。 誰もいない閑散とした自習室より、進捗が出ることでしょう!!

Twitterから逃れられる

特に朝4時以降、タイムラインに流れてくる日本語のツイートがぐっと減ります。 一日中起きていることで、時間から開放されたゆったりとした開発を楽しむことができます。

ネカフェハッカソンの疑問点

夜やったら体に悪いのでは?

この点については、検証中です。

ネカフェハッカソン開けに、募金のボランティアで街頭に一日立ったときは、さすがに午後に死んで早退しました。 前日長めに寝ていれば、普通に勉強とかしている分にはあまり疲れないように感じています。

スマートウォッチで心拍数の変化とかをログしているので、この点についてはそのうちちゃんとまとめます。

8時間も集中力もつの?

これは、微妙です。毎回変わりますが、最初の6時間くらいで集中力が切れている気がします。 そんなときは、カラオケで歌うなどして気分転換しましょう。デート・ア・ライブのQ&Aを英語版で歌うのがおすすめです(ただの推し

www.youtube.com

快活なら、「オープンスペース」から「カラオケ」に移動してもパック料金を時間で等分して計算してくれるので安心ですよ〜。

参加したくなった

ぜひぜひ! 僕は基本的に進捗がヤバイときに会津でしか開催しないと思いますが、東京でホテルで宿泊代わりにネカフェハッカソンすることもあります。

ネカフェに行ってハッカソンだと思えばそれがネカフェハッカソンです。一人でも、グループでも、ネカフェでハッカソンしてみましょう。

ネカフェで開発しているときは、どんどんハッシュタグ #ネカフェハッカソン をつかってください!みんなで進捗を共有しましょう。

ちなみに会津でやるときは、connpass立てているので近くの方はそっちでも参加してもらえると嬉しいです!! necafe-hackathon.connpass.com

では皆さん、ネカフェでハッカソンを楽しみましょう!!

SECCON2019に参加しました

今までwebフロントばっかりやっていましたが、もともとアセンブラ寄りのセキュリティをしたいと思っていたので、SECCONに参加することにしました。

Beginnersに一回参加したきりで、CTF自体にほとんど参加したことがなく、何も分からない状態でした。 Zliとして、サークルのセキュリティに興味がある4人で参加しました。 一緒に参加した仲間は、mizuiro_ivi、くさつ、spookeydokeyの3人です。

f:id:gpioblink:20191020171915p:plain

結果は196位で散々でしたが、手を止めずにいろいろ考えてることができて、楽しかったです。 解けた問題について簡単に書いていきます。

今回解けた問題

  • coffee_break
  • Beeeeeeeeeer

coffee_break

最終的に作ったコードは次のような感じです。 元のコードから、独自の暗号化とAESで暗号化で2つのファイルに分けて作りました。

decsec1.py (独自の暗号化部分)

import sys
from Crypto.Cipher import AES
import base64


def encrypt(key, text):
    s = ''
    for i in range(len(text)):
        a = (ord(text[i]) - 0x20)
        b = (ord(key[i % len(key)]) - 0x20)
        c = (0x7e - 0x20 + 1) # 0x5f
        d = a+b
        e = d%c
        f = e + 0x20
        s += chr(f)
        # print("a", i, hex(a), chr(a))
        # print("b", i, hex(b), chr(b))
        # print("c", i, hex(c), chr(c))
        # print("d", i, hex(d), chr(d))
        # print("e", i, hex(e), chr(e))
        # print("f", i, hex(f), chr(f))
        # print()
    return s

def decrypt(key, text):
    s = ''
    for i in range(len(text)):
        f = ord(text[i])
        c = 0x5f
        e = f - 0x20
        d = e
        if e < 0x32:
            d = e + 0x5f
        b = (ord(key[i % len(key)]) - 0x20)
        a = d - b
        res = a + 0x20
        s += chr(a + 0x20)
        # print("a", i, hex(a), chr(a))
        # print("b", i, hex(b), chr(b))
        # print("c", i, hex(c), chr(c))
        # print("d", i, hex(d), chr(d))
        # print("e", i, hex(e), chr(e))
        # print("f", i, hex(f), chr(f))
        # print("res", i, hex(res), chr(res))
        # print()
    return s


key1 = "SECCON"
key2 = "seccon2019"
text = sys.argv[1]

# enc1 = encrypt(key1, text)
# print(enc1)
print(decrypt(key1, text))

こういうコードを全く読んだことがなかったので、オリジナルのencryptコードを変数で小分けして少しずつ比較しながらdecryptを書いていきました。 decryptのdで「%」の扱いに戸惑ってしまいました。アルゴリズムというかこんな実装しか出来なくてちょっと悲しいです。

decsec2.py (AESによる暗号化部分)

こっちはネットで使えそうなコードを見つけたので、そのまま採用しました。

symfoware.blog.fc2.com

import sys
import base64
from Crypto.Cipher import AES
enc = sys.argv[1]

key2 = "seccon2019"

# chr(0)で16バイトに不足している長さを埋める
key = key2 + chr(0x00) * (16 - (len(key2) % 16))
decipher = AES.new(key, AES.MODE_ECB)
# b64decodeしてから復号化
dec = decipher.decrypt(base64.b64decode(enc)).decode('utf-8').rstrip(chr(0x04))
print(dec)

Beeeeeeeeeer

「hogefuga」を自分で入れたコードだと思い見落としてしまい、解くまでにめちゃくちゃ時間がかかりました。

まず、問題にあったシェルスクリプトをダウンロードして、まずはコードの読み方を考えていきました。

難読化されていますが、bash -xv Beeeeeeeeeerのような形で実行すれば、実行とともに一行一行見やすくなった状態で表示されます。

How many beepsの問題で、beepがならない環境だったこともあり、xオプションには大変お世話になりました。

このスクリプトは、主に「起動時のスクリプト」。そのコードの中にbase64で内包されている「beep数を聞いてくるスクリプト」。そのコードのさらに中にbase64+aesで暗号化されている「最後のスクリプト」がありました。順番に見ていきます。

そのまま実行するとsleepとかで悩まされるので、alias sleep='echo sleep'のようにしておくことをおすすめします。

起動時のスクリプト

export S1=hogefuga

これは、「beep数を聞いてくるスクリプト」の前までのコードで、難読化を解除し、不要なコードを消したものです。一行になっちゃいました。 ほとんど不要なコードでしたが、このS1という変数がのちのち重要になってくるので注意です。

また、下の方に「コロン」で無効化はされていますが、poweroffなど怪しいコードが書いてあるので、気おつけてください。 ちなみに「:」を行の先頭に書くと、その行はどんな場合でもtrueと解釈され、それ以降の文字は無視されるようです。(間違えてたら教えてください)

beep数を聞いてくるスクリプト

for k in $(seq $((RANDOM % 10 +1)))
do l=$((RANDOM % 10 +1))
 for m in $(seq $l)
 do echo -ne '\a'
 sleep 1
 done
echo "How many beeps?"
 read n </dev/tty
 export n
 if [ "$n" -ne "$l" ]
then exit
fi
 done
echo -ne '\a';sleep 1;echo -ne '\a';sleep 1;echo -ne '\a';sleep 1;echo "How many beeps?";
 read  n </dev/tty
 export n

コードを見ると、最初の数回は完全にランダムですが、最後のビープ数(\aの数)は3固定になっています。よって3を入力することで、最後のスクリプトに行けます。

最後のスクリプト

echo 'n is ' $n
__=' filename [arguments]';
echo $__
set -- z y x w v u t s r q p o n m l k j i h g f e d c b a '`' _ '^' ']' '' '[' Z Y X W V U T S R Q P O N M L K J I H G F E D C B A;
echo $@;
echo 'Enter the password';
read _____ < /dev/tty
 : password is bash
echo a
echo $(echo -n $_____|md5sum|cut -d" " -f1)|grep -q "d574d4bb40c84861791a694a999cce69"&&echo "Good Job!"&&printf "\n\033[?7l%1024s" " "&&echo SECCON{$S1$n$_____};
echo -e '\033[?7h';

難読化を解除すると、ご丁寧にもpassword is bashと書いてあります。ただ、SECCON{$S1$n$_____}のようにフラグには他の2つの変数も重要だったので解析が必要でした。

ところで、このコードの頭に

__=$(. 2>&1);
__=${__##*.};

こんなコードがあったのですが、次のようなことをしています

__=$(. 2>&1); # "."というファイルは実行できないので、"bash: .: filename argument required .: usage: . filename [arguments]"というエラーになり$__に格納される
__=${__##*.}; # $__から最後の「.」以降の文字が出力される

今までは、こういうことを意識したことがなかったので、知れるいい機会になりました。

このサイトがとても参考になりました。

www.ryotosaito.com

挑戦した問題とか

今後一番やりたいと思っているのはpwnの問題ですが、今回は、pwnやcryptoの知識は全くなかったので、web問を中心に解こうとしました。

「Option-Cmd-U」と「SPA」の問題に挑戦しましたが、どちらも分かりませんでした。

特にSPAは、「document.cookie」を見る方法が分からず、せっかくのjs系の問題なのにって感じで悔しかったなぁ

普通に実務にも使えそうな知識でもありそうだし、あとでwriteupをちゃんと読みたい。

みなさんお疲れ様でした。

サンノゼの治安思ったよりよかった! (シリコンバレー研修 1・2日目)

前置き

はーい、こんにちは、ここは今ちょうど深夜0時で日本は午後16時です!

治安いいです。

使えないと言われて絶望してた100ドル札普通に使えました〜

バーニングマンのせいでみんな休みとってて町には肝心の人がいませ〜ん

何しにきたの?

大学のシリコンバレーインターンシップで、IoTデバイス(笑)を作りに来たよ!!

NVIDIAのjetson nano使ってるけど、正直イマイチかな。

本当はできるだけLT会とかもくもく会ハッカソン出たいんだけど、探せないんだよなぁ

教えて(タダ飯大歓迎〜www)

食べたもの

27日 朝

f:id:gpioblink:20190829161433p:plain 機内食。 写真撮り忘れましたが、おかわりして和食も食べちゃいました。

サンノゼでは何食タダ飯食べれるか期待が高まります。。

27日 昼

f:id:gpioblink:20190829161613p:plain 例のハンバーガ

味はマックに毛が生えた程度 これでもサンノゼイチのハンバーガ屋なんだって(未検証

locations.in-n-out.com

27日 夜

f:id:gpioblink:20190829162352p:plain

Walmartで買った7割引パンとチキンを4人でシェア 一人1ドルで済みました。

(ホテルにキッチンないのつらい

28日 朝

f:id:gpioblink:20190829160336p:plain ホテルの食べ放題!! 無料でバーガーを3コ食べました。 これから食べ放題が毎日続くなんて夢のよう

28日 昼

f:id:gpioblink:20190829160913p:plain セブンイレブンでホットドッグ 本当は野菜とりかったけど叶いませんでした。。 ソーセージは意外とおいしかった(語彙力)

28日 夜

f:id:gpioblink:20190829161052p:plain どこの国の料理かも、 料理の名前忘れたけど秋葉原の外人とかも売ってるやつ

(編集厨: ブリトーです)

行った場所

毎日

goo.gl 評価とか見てるとヤバイこと書いてあるけど普通のコンビニ。

レートだけ見てアキバのアクセスチケットで100ドル札3枚と両替しても大丈夫!

このセブンなら、特にジロジロ見られず普通にに100ドル札使えます。 お釣りもヤマダ電機みたいに、ちゃんと1枚1枚数えながら返してくれます。

goo.gl 24時間使える場所なのに大学としては遅くまで。。。とか言われて、 よいこいっぱいの会津大生は22時までしか使えません(自主規制)。

本当なら24/7ハッカソンができる夢のような場所です。 ただ、バーニングマンだかなんだかでぜんぜん人がいない

28日

www.swarmapp.com

電器屋らしいですが、ハンダとかLED1個(1つ3ドルくらい?!)も売ってます。 ドライバーはあるけどネジはないので注意(本当はあるのかも)

まとめ

明日はNVIDIAで副社長に合うらしいですが、 1日ハッカソンで作った ゴミ を見せるのが不安です

ま、sigezoneで「QC PASS」シール買っといたから 貼って持ち込めば歓迎されるでしょう!

ではまた明日〜〜

おまけ

MQTT導入するときの焦り asciicast

ng-japan2019に行ってきました!初めて東京のコンファレンスに参加してみた!

勉強会やもくもく会には参加しても、大規模なコンファレンスは初めてでした! LTとは違うけど、ほとんどの人が新しい技術や高度な最適化の話で次から次へといろいろしれた。

さ〜て、振り返っていきましょう!!

今回は、classiさんのスカラシップを利用してng-japan2019に行ってきました。 交通費とタダ飯ありがとうございました!

環境

六本木ヒルズでやりました。会場について早々、シートの幅が広い! 結構長めのミーティングでしたが、快適に受けることができました。 f:id:gpioblink:20190719092233p:plain

最近はvueにずっと浮気していたので、Angularたんは触っていませんでした。

それはやばいと思い、一週間前から再び「Angularアプリケーションプログラミング」を読み始めたのですが、4分の1ほどしか読めていませんでした。

翌日にYahooのLodgeに言って一気に読んだり出来たので、今月中にはデートできるつもりですw

セッション

正直、意味不明のプレゼンも多かったので、理解できたもののみ。

Keynote (Miles Malerba Rado Kirov)

Bazel Userは、ビルドやテストを全てGoogleに任せることが出来る。 「GNU Make」より「BSD Make」使えとか言われていた矢先、CircleCIで遊んだことはありましたが、これは使えそう。

CapacitorをつかってAngularアプリの可能性を広げよう (榊原昌彦)

僕がそもそもAngularに興味を持ち始めたのはionicだったのですが、そこで手を取ったのは榊原さんの本でした。 最初のうちに見ながらやっていましたが、Web Componentになっていてびっくり!

f:id:gpioblink:20190719100603p:plain 途中でReact Nativeとの比較もされていたのですが、めちゃ記述スマートでよさそうでした。(あれAngular?)

Angular generic forms (Eliran Eliassy)

ライブコーディングでした。正直何をやっているかあまり理解できませんでしたが、関数の分け方がとても上手く感じました。 TypeScriptなにもかわらん。よくわからない宣言がどんどんでてきました。

Angular build, polyfills and application size (Vojtech Mašek)

Codeの拡張機能で、インポート時の消費容量を計算するものがある。便利そう。 marketplace.visualstudio.com

Angularでメトロノームを作った話と、 Angular + pixi JSでメトロノームにオープニングをつけた話 (kawakami0717)

LT枠のような感じで10分で発表していて、会場が乗ってきました! そうそう、こういう雰囲気が好きなんだ〜

pixiJSは簡単に動きのあるシーンを作れるようで、気になりました。 www.pixijs.com

こう、1つのものに集中して作業出来るのが素敵です。浮気しすぎて今誰とやってたか分からなくなる僕とは大違い。真似したい

Building a Fast & SEO Friendly SPA with Angular (Jecelyn Yeen)

f:id:gpioblink:20190719122440p:plain

速度を早くするための話でした。 数キロバイトのデータを削減するためにどうこうしたというチューニングの話 日本にいるとあまりそこまで気にしないので、国柄も見れるようで面白かった

昼食・おやつ

昼食はサンドイッチ1パックでした。味は普通。 f:id:gpioblink:20190719091841p:plain

おやつにはどら焼きがでました。おいしいけど、もっと美味しいどら焼きを知ってるぞ f:id:gpioblink:20190719094310p:plain

な〜んて感じで、会場内ででた飯はまずまずでしたが、classiさんの懇親会では、 f:id:gpioblink:20190719094548p:plain 肉食べ放題の素晴らしい店で楽しむことができました。(肉の写真撮り忘れた)

その間にclassiの社員さんとも言語や雑談いろんな話をして、めちゃくちゃ明るい会社でした! みなさんおつかれ様でした

まとめ

  • Angularの勉強会いったらReactしたくなってきた
  • 次東京行くときは絶対どこかでLTして帰る
  • 会場ではもっと積極的に質問しろ
  • レポートは当日に書かないと忘れる

平成最後のハッカソンに参加してみた

タスクが多すぎて積んでるフルスタックエンジニアのじぶりんでーす! 今日は、平成最後のハッカソンレポートしまーす!!

www.cyberagent.co.jp

作ったもの

平成最後を振り返るクイズゲームを作りました

f:id:gpioblink:20190511000920p:plain

自分の思い入れのあるハードのコントローラーでクイズに参加できます!!

f:id:gpioblink:20190511001128p:plain

ゲーム機はMQTTを使いワイヤレス化されていて、大画面に映しながら楽しめます!!

ソースコードは、、、、えーと、平成と分かれるためありませーん(???) といいたいけど現在も開発中です!!

github.com

はじまりはじまり

なんか会津大の最強エンジニアがニアニアしてるZliサークルで「参加者を募集」してたので申し込んでみました!

f:id:gpioblink:20190511002729p:plain

「平成を振り返る」みたいなテーマだったので、「クイズ」がいいかなーと思って、クイズ作って出場することにしました〜〜 いろんなアイディアでたけど、意外とあっさり決定

ノリで状態遷移図っぽいものまで作ってました

f:id:gpioblink:20190511002915p:plain

フロントについて

フロントは最強エンジニアがニアニアしてるZliサークルで部長をしているD_kubo先輩が中心になって開発。

みるみるうちに内部処理が実装されていきます

デザインについて

ハッカソンまで残り3日のとき 画面ができない!!!!

f:id:gpioblink:20190511004134p:plain

まだ机上のイラストでした。。。。

でも、そこに救世主が!!

ダンスもデザインも機械学習もできる真のフルスタックエンジニアはしもーが、デザインを担当して

f:id:gpioblink:20190511004416p:plain

f:id:gpioblink:20190511004046p:plain

f:id:gpioblink:20190511004440p:plain

いつの間にかそれっぽくなっていました!

そう、自体は順調に進んでいたんだ、、、ハードの部分を除いては

ハード班について

ハード班は、漆塗りエンジニアのtari先輩が担当。

f:id:gpioblink:20190511005310j:plain

こんな感じの安いコントローラーを買い漁って(108円)

基板のパターンを剥がしつつ、ボタンの押下を検出するつもりでした。 しかし、、

ハッカソン3日前の状態で、、 f:id:gpioblink:20190511005050p:plain

あれ???? なんと、ゲームどころか謎の拡張端子を作ってる始末でした。

それはなぜか。基板に思うようにはんだがのらない。。。

これはハッカソン当日まで解決できず、かろうじて乗ったドリキャスのコントローラ1台しか作れませんでしたぁ

ハッカソン当日は、みんなPCをカタカタしてる中、香ばしい半田の匂いを提供しました

あとは抵抗値が無限に定まらず、ツールでごまかしたりしたなぁ

ま、人生いろいろですね!!

感想とか

  • レベル高いとは思ってたけど予想以上だった

  • さすが東京、不足した電子部品はなんでも揃う

  • ハード系と名乗っていいのは: CPU、コンパイラー、OSの3つを作れる人だけ

技術系の解説とかは後ほど公開します!! 本日はこのへんで