福野泰介の一日一創 - create every day

反響あったパスワード付きZIPファイルの話、GPUを使った高速化、やはりありました!(Thanks! @JG1WWKさん)
パスワード付き ZIP ファイルを hashcat + JtR + GPU で総当たりしてみる - CUBE SUGAR CONTAINER

300万円するGPU、NVIDIA Tesla V100 を使うと、なんと秒間280億探索!
Go言語で作成しMacのCPUで動かした速度の16万倍のスピード!
一般用 RadeonⅦGTX1080TiFHC- でもこの半分程度の性能がでることにも驚きます。

ここで使われている hashcat というツールは、MacのGPUでも動きます。
PKZIP2が現行バージョンでは動きませんでしたが、同じアルゴリズムと思われるSHA2-256でのベンチマーク結果は・・・

hashcat -b ========================= * Device #1: Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz, skipped. * Device #2: Intel(R) Iris(TM) Plus Graphics 640, 384/1536 MB allocatable, 48MCU Hashmode: 1400 - SHA2-256 Speed.#2.........: 127.8 MH/s (46.40ms) @ Accel:32 Loops:16 Thr:256 Vec:1

127.8MH/s、1秒に1.278億探索と高価なGPUの1/200ほどですが、Go言語のCPU版と比較して700倍!
さすがGPU!サクッとプログラムして使えるようにもなってみたいところです。

ZIPファイルでなくとも、サーバーやPCにハッシュ化されているパスワードにもリスクはあります。
2019年10月16日 “脱帽です”―9億3,000万ハッシュ/秒でようやく判明したケン・トンプソンのパスワードは…?:Linux Daily Topics|gihyo.jp … 技術評論社
偉大なハッカーの過去設定された記号付き7文字パスワードが4日間で破られたとのこと。
パスワードの使い回さなくとも、短いパスワードはハッシュ値からパスワードが特定され、気が付かない内にアクセスされる恐れがあります。

圧倒的なGPUパワーの前ではありますが、クラウドを使った実装編として、さくらのクラウドから仮想コアを借りて実験!
結果、MacBookPro Corei5 の倍のスピード!前回見積もり15,000円の半額でいけそうです!


次に、仮想20コアを借りてみます!


こちら残念ながら1仮想コアの倍にもなりませんでした。今の作りではメモリが競合してしまってだめなのかも。
こちらは前回見積もりを下回るため、今回のプログラムには向かないことが分かりました。


サーバーの解約も管理画面からボタンひとつで簡単!
GPUサーバーを借りる「」や「Google Cloud」も熱いですね!
8GPU搭載した1PFLOPS級を、10台借りれば京にも匹敵するコンピューティングパワーが使えてしまいます!


記号を使ったパスワード生成のため、ASCIIコードから記号を調べるのに、使用した IchigoJam web
スペースからチルダまで、ちょうど32文字ありました。数字アルファベット大文字小文字と加えて、94種類。1文字増える毎に94倍探索に時間がかかるようになります。13文字使うと10の25乗通りとなり、少し盛って秒間1兆回のアタックにも1兆秒(=3年くらい)耐えられる強度となります。

ただし、この強度はアルファベット小文字のみの18文字と同程度なので、記号が使える使えないの環境さを気にするよりは、ちょっと長めなパスワードがオススメです。ただし、意味ある単語のつながりだと、辞書攻撃され、圧倒的に弱くなるので注意。 強いパスワードづくりには、こちらのツールをどうぞ!「パスワードメーカー」推奨、20文字パスワード!

こちらパスワードに記号を使った場合の探索コードにして、分散起動にも対応させたGo言語のコードです。

package main import ( "flag" "fmt" "github.com/yeka/zip" "io/ioutil" "log" "os" "time" "sync" ) // make zip file with password // rm test.zip | zip -e --password=9999999 test.zip test.txt // rm test.zip | zip -e --password=passw test.zip test.txt // go run getpassword.go -f test.zip const LETTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ !\"#$%&'()*+,-./:;<=>@[\\]^_`{|}~" // 10 + 26 * 2 + 32 = 94 //const LETTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" // 10 + 26 * 2 = 62 //const LETTERS = "0123456789abcdefghijklmnopqrstuvwxyz" // 10 + 26 = 36 beam5:313sec? //const LETTERS = "0123456789" // 10, beam6:5.7sec, beam7:55sec func MakePassword(n int) string { plen := 1 nlen := 1 nl := len(LETTERS) for { nlen *= nl if n <= nlen { break } plen += 1 } b := make([]byte, plen) for i := range b { b[i] = LETTERS[n % nl] n /= nl } res := string(b) return res } func Check(wg *sync.WaitGroup, filename string, start int, skip int) { defer wg.Done() var err error r, err := zip.OpenReader(filename) if err != nil { log.Fatal(err) } defer r.Close() f := r.File[0] if !f.IsEncrypted() { println("this zip file is not encrypted") return } fmt.Printf("Check %d skip %d\n", start, skip) tstart := time.Now() for i := start; i < 100000000; i += skip { pw := MakePassword(i) //time.Sleep(1 * time.Second) //println(pw) f.SetPassword(pw) r2, err := f.Open() if err != nil { print("ignore pw") } buf, err := ioutil.ReadAll(r2) if err != nil { r2.Close() continue } println("Password: " + pw) println(buf) r2.Close() break } println("Check end") tend := time.Now(); fmt.Printf("%fsec\n", tend.Sub(tstart).Seconds()) os.Exit(0) } func main() { var ( filename = flag.String("f", "test.zip", "a filename of zip") ncpu = flag.Int("n", 1, "cnt of go routien") ncpuoff = flag.Int("off", 0, "offset of start") maxcpu = flag.Int("max", 0, "step of search") ) flag.Parse() if *maxcpu == 0 { *maxcpu = *ncpu } var wg sync.WaitGroup for i := 0; i < *ncpu; i++ { wg.Add(1) go Check(&wg, *filename, i + *ncpuoff, *maxcpu) } wg.Wait() }

子供にも大人にも広めていきたい、圧倒的コンピューティングパワーを使った楽しいものづくり!
(追記、OpenCL/C言語 GPUプログラミングはじめのいっぽ on Mac

今週末「NT鯖江」にて、モノの名前が見えるメガネ「monoglass」や、最新 IchigoJama 1.4 など、出展します!

強いパスワードを作成するアプリを作りましたが、実際現代のパソコンでパスワードを突破するのにどの程度の時間がかかるか検証してみました。

手頃で高速でマルチコアに強そうという理由でGo言語を使ってみた結果、1秒間に18万パスワードをトライできる性能となりました。数字7桁のパスワードなら1分、8桁でも遅くとも10分で突破できます。


パスワードトライ中、全CPUフルに使い切ってます!
goルーチンを使って、1,2,3,4,5・・・と増やしてみたところ、Core i5の2コア4ハイパースレッディングでは、3が最も速いという結果となりました。ただ、最速でも1スレッドの2倍弱にしかなりませんでした。 そもそも、今回のプログラムは無駄が多いので、パスワードトライに特化してメモリの動的確保を0にすれば、更に10倍くらい速くもできるはず。 GPUをうまく使えば、飛躍的な高速化ができるかも?

アルファベット小文字+数字の36種類使ったパスワードの場合、数字のみ8桁の10の8乗と比較し、10の12.4乗と1万倍時間がかかります。10万分=70日=2ヶ月ちょっと、そこそこかかりますが、超重要なファイルであれば待てない時間じゃないですね。


パソコンを動かしっぱなしにするのは困る場合、クラウドを使うのも手です。さくらのクラウド、仮想1コアならなんと1時間9円で借りられます。 100コア借りて、仮に同じ性能がでれば1000分、17時間で結果が得られて、15,300円。(実性能を測ってみました、追記)


仮想20コアだと割安です。20コアを5台借りた場合、13,005円!(追記、そう単純ではありませんでした

無限にアタックできてしまうZIPファイルなどにかけるパスワード、少なくとも20桁くらいにはしておきたいですね。
強いパスワードを作ろう「パスワードメーカー」 パスワード付きファイルのリスク計算
さくらのクラウド、実際に仮想20コアを借りてみた編(追記)

ZIPファイルのパスワード取得プログラム(マルチコア対応 Go言語版)

package main import ( "flag" "fmt" "github.com/yeka/zip" "io/ioutil" "log" "os" "time" "sync" ) const LETTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" // 62 //const LETTERS = "0123456789abcdefghijklmnopqrstuvwxyz" // 36 //const LETTERS = "0123456789" // 10 func MakePassword(n int) string { plen := 1 nlen := 1 nl := len(LETTERS) for { nlen *= nl if n <= nlen { break } plen += 1 } b := make([]byte, plen) for i := range b { b[i] = LETTERS[n % nl] n /= nl } res := string(b) return res } func Check(wg *sync.WaitGroup, filename string, start int, skip int) { defer wg.Done() var err error r, err := zip.OpenReader(filename) if err != nil { log.Fatal(err) } defer r.Close() f := r.File[0] if !f.IsEncrypted() { println("this zip file is not encrypted") return } fmt.Printf("Check %d\n", start) tstart := time.Now() for i := start; i < 100000000; i += skip { pw := MakePassword(i) //println(pw) f.SetPassword(pw) r2, err := f.Open() if err != nil { print("ignore pw") } buf, err := ioutil.ReadAll(r2) if err != nil { r2.Close() continue } println("Password: " + pw) println(buf) r2.Close() break } println("Check end") tend := time.Now(); fmt.Printf("%fsec\n", tend.Sub(tstart).Seconds()) os.Exit(0) } func main() { ncpu := 3 var wg sync.WaitGroup flag.Parse() filename := flag.Arg(0) for i := 0; i < ncpu; i++ { wg.Add(1) go Check(&wg, filename, i, ncpu) } wg.Wait() }

仮想コア1(=n)のクラウド、3台(=max)で分散させて動かすには、下記のようにオフセット(=off)を指定して動かします。

cloud0$ go run getpassword.go -f test.zip -n 1 -max 3 -off 0 cloud1$ go run getpassword.go -f test.zip -n 1 -max 3 -off 1 cloud2$ go run getpassword.go -f test.zip -n 1 -max 3 -off 2

見つかったらメールでお知らせや、自動的にクラウドを解約しておくなどもプログラムしておくといいですね!

昨日に続き、食がテーマだったjigインターン2019、成果発表会紹介2チーム目。
今度は外食での悩みをモダンに解決するプロダクト。

チームnpm派「めしめーと」
箒コウモリ(香川高専高松キャンパス)、でみ(舞鶴高専)、watano(茨城高専)、はたはた(津山高専)


せっかくなら美味しいものを開拓したい外食。でも、レビューが当てになるとは限らない。そんな時、自分と味覚が近い人を頼ろう!
食べたものを投稿・チェックインすると、同じ好みな人をリコメンド。フォローすると優先的にタイムラインに並び、使うほどにヒット率上昇。


しゃもじをポインターとして解説する、はたはた。フロントエンドはモダンなフレームワーク Vue.js


GitHubのリポジトリから動かしてみました!(Foodmates-client (fixWholeDesignFinally) / server


幻の第4スプリントで、箒コウモリ(ホウモリ)がマージした、レスポンシブデザインバージョンで、スマホでもタブレットでも見やすい!


バックエンドは、Go言語(golang)で開発、データベースとしてMySQL、環境構築にDockerを使用。

ナウなDBの使い方を確認するため、Foodmatesのサーバー側を抜粋した、GoでMySQLにデータをいれてみるサンプル作成。
料理を、名前、価格、URLの3項目で、登録日時付きで、どんどん登録するシンプルなデータベースです。(src on GitHub)

package main import ( "fmt" "os" "time" "errors" "github.com/jinzhu/gorm" "github.com/joho/godotenv" _ "github.com/go-sql-driver/mysql" ) type Food struct { ID int `gorm:"primary_key" json:"id"` CreatedAt time.Time `json:"created_at"` Name string `gorm:"default:''" json:"name"` Price int `json:"price"` URL string `json:"url"` } var db *gorm.DB func InitDB() { USER := os.Getenv("MYSQL_USER") PASS := os.Getenv("MYSQL_PASSWORD") PROTOCOL := "" DBNAME := os.Getenv("MYSQL_DATABASE") CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8mb4&parseTime=True&loc=Local" var err error db, err = gorm.Open("mysql", CONNECT) // github.com/go-sql-driver/mysql if err != nil { panic(err.Error()) } db.LogMode(true) db.AutoMigrate(&Food{}) } func TruncateTables() { rows, err := db.Raw("SHOW TABLES").Rows() if err != nil { panic(err.Error()) } defer rows.Close() for rows.Next() { var table string if err := rows.Scan(&table); err != nil { panic(err.Error()) } db.Exec("TRUNCATE TABLE " + table) } } func GetDB() (*gorm.DB, error) { if db == nil { return nil, errors.New("can't get database") } return db, nil } func Finalize() error { err := db.Close() return err } func ShowAllFoods() { db, err := GetDB() if err != nil { fmt.Println(err) return } var foods []Food db.Table("Foods").Find(&foods) fmt.Println(foods) } func AddFood(name string, price int, url string) error { db, err := GetDB() if err != nil { return err } db.Create(&Food{ Name: name, Price: price, URL: url, CreatedAt: time.Now() }) return nil } func main() { err := godotenv.Load(".env") if err != nil { fmt.Println("Error loading .env file") return } InitDB() TruncateTables() AddFood("サラダ焼", 120, "https://www.sanrokusyoten-316.co.jp/products.html") AddFood("サバエドッグ", 280, "https://www.meat-sasaki.com") AddFood("眼鏡堅麺麭", 864, "http://echizen-yumekobo.com/?pid=52337987") ShowAllFoods() }

GORMを使うと、Go言語の構造体として定義したFoodを、db.AutoMigrate(&Food{})で呼び出せば、いい感じにテーブル生成をやってくれます。*GORM - ORM (Object-relational mapping / オブジェクト・リレーショナル・マッピング) for Go

MySQLのセットアップ、Mac編(参考、Mac へ MySQL を Homebrew でインストールする手順 - Qiita

brew update brew install mysql

MySQLにデータベースを1つ作成

mysql -uroot -p [dbrootpass] create database [dbname] create user '[dbuser]'@'localhost' identified by '[dbpass]'; grant all on *.* to '[dbuser]'@'localhost'; GRANT ALL PRIVILEGES ON [dbname].* TO '[dbuser]]'@'localhost'; exit

Go言語の設定ファイル「.env」にDB設定を記述

cat > .env <<EOF MYSQL_USER=[dbuser] MYSQL_PASSWORD=[dbpass] MYSQL_DATABASE=[dbname] EOF

Go言語のライブラリを取得

go get github.com/go-sql-driver/mysql go get github.com/jinzhu/gorm go get github.com/joho/godotenv

あとは動かすだけ!

go run fooddb.go [{1 2019-09-08 13:24:51 +0900 JST サラダ焼 120 https://www.sanrokusyoten-316.co.jp/products.html} {2 2019-09-08 13:24:51 +0900 JST サバエドッグ 280 https://www.meat-sasaki.com} {3 2019-09-08 13:24:51 +0900 JST 眼鏡堅麺麭 864 http://echizen-yumekobo.com/?pid=52337987}]

MySQLを初めて使ったのはもう20年前くらいかも・・・。
環境構築も、ライブラリも、便利になっていい感じですね!

インターン生に振る舞う、jigカレー!

大事なのはスピード感。速いテンポで踊る、ジグダンスが由来のjig.jp。(写真提供、インターン生)


2スプリント目に突入したインターン開発!ぬいぐるみも参戦!(癒やし担当)


12:00 調理開始。鍋に水を入れ火にかけ、買い物に走る。水量は後で増えるので作る量の半分!


12:20 調理開始。まずは肉、火がすぐ通り、食べごたえある小間切れが基本!


あとは具をどんどん投入。水気は切って入れて時短化!


今回のオープン隠し完全食は、Huel、コップ2杯ぐらいだと影響なし


具、投入完了。


12:25 完成。ルーを混ぜ込んで、出来上がり!


jigカレー ver 20190827


いただきます!


レシート公開!(QRコードを付けて、データ化が簡単になるとうれしいなぁ)
25人前、買い物合計金額7238円(ごはん含まず)一人あたり290円

jigカレー ver 20190827 材料オープンデータ

ルーはすぐ溶ける、粉タイプ
トライ枠で特徴づけると、作る人も楽しめる。入れすぎ注意。
トッピングを省略すれば、一人250円を切る。肉多めな今回、控えれば200円切りも射程内。
おかわりしたい人がちょうどできる感じでいい量だった。味も概ね好評。(ふりかえり)


金額割合、ルー:22%、肉:23%、具:34%、トライ:4%、トッピング17%

速くて、安くて、楽しい、jigカレー、ぜひトライ内容と合わせてTwitterに投稿してね!
ハッシュタグ #jigcurry


福井ラーメンツアー、福井駅前はプチ恐竜博物館、無料!

jigインターン9日目 カレーを作ろう!
links
- スピード優先「jigカレー」 オープンソースなラピッドプロトタイピング料理(2015)
- 鯖江でGO! jigインターン2016成果報告会(2016)
- 完全まちの要素とは?鯖江市長、フリーミアム動物園、創造拠点Hana道場とオープンソースなjigカレー(2018)
- インターン最終日の成果発表会を新たなはじまりに! Nuxt.jsはじめのいっぽの計算機(2018)
- カレーにイチゴはありか? 創立記念にjigカレー&食べられるイチゴジャム(2019)

5/28、jig.jp、16周年記念日、リクエストあってjigカレー。

今回のオープン隠し味は、IchigoJam専属農場の採れたてイチゴ!


おいしそうに赤くなったイチゴ発見!引っ張るとプチっと良い音がします。


PCN大野研究所長、前川さん。元福井高専の先生で、今も非常勤でアマハム部支援に来てくれてます。
納屋で語る、Oculus Questと高専教育。電波をVR空間で見るアプリとかおもしろそう。
VRですべての学習を実験化、体験化できる!


たった2株のイチゴの苗から始まった IchigoJam専属イチゴ農場、3年目には、こんな広大なイチゴ畑に!


17kgも収穫。


12時から準備を始めるのがjigカレー、買い物がスピード勝負。カットサラダは多めに買いましょう。


煮込まないのがjigカレー。すぐ火が通る、こま肉をチョイス。牛が安心度高め。ひき肉は溶けちゃうからコスパ悪いかも。


包丁禁止がjigカレー。調理済み煮物系も重宝します。


12:20、予め沸騰させておいた鍋に肉から投入。足を伸ばした買い物で、5分押し。


後は煮込みながらどんどん投入。


採れたてイチゴ、15コ投入。


12:35 完成!jigカレーイチゴ味、概ね好評!
調理済みごぼうは大正解!


イチゴミルクとタピオカも登場。


良い色のイチゴ!まだまだあるので、イチゴジャムに!


イチゴ1kgに、砂糖300g。混ぜて、2時間放置し、煮込み開始!


アク取り、大事?


1時間ほど完成!煮沸消毒した瓶を準備しておきましょう。


食べられるイチゴジャム、できあがり!
食べられない IchigoJam と同様、手作りは楽しいですね!

links
- How to make IchigoJam eatable edition! 食べられるIchigoJamのつくりかた
- 完全まちの要素とは?鯖江市長、フリーミアム動物園、創造拠点Hana道場とオープンソースなjigカレー
- 150枚限定、IchigoJam - jig.jp 15th anniversary edition
- jig.jpロゴに隠されたひみつ - jig.jp 10周年

人間に必要な栄養素をバランスよる全て含んでいるという、完全食「COMP」に朝食をアップデートして1年。 いよいよ人間ドック行ってきました。結果、すべて良好!

体重、微減。その他も弱改善方向とのことで、生活習慣病リスクもなしとお医者さんからの優良フィードバック。食事1/3、COMP生活、張り切って続けられます。


健康テスト - 健康診断結果基準値判定アプリ
測定値をいれると、基準値との判定を行います(成人男性設定)。
項目を合わせ、測定値を入れたCSVをimportすると、まとめて設定もできます。

私の健康診断結果オープンデータはこちら! 2010年健康診断結果2019年健康診断結果を見る。
白血球数が少なく、以前、精密検査したところ、そういう体質ってことで問題ないみたいです。

基準値は、諸説あるようですが、参照元と合わせてまとめた人間ドックオープンデータ(CSV)を作ってみました。
健康診断項目と基準値CSV
語彙設定して、5つ星オープンデータRDF化にもチャレンジしたい!


人間ドックでお世話になったのは、スタバも併設、社会福祉法人 恩賜財団 済生会支部 福井県済生会病院


私のCOMP朝ごはんを紹介。COMPパウダー96g(400kcal)と牛乳200g(137kcal)をレンジで飲み物として温めるだけ。


あとは、かき混ぜて、ホットスープとしていただきます。シェイカーいらずが地味に楽!
牛乳と合わせて、537kcal、見た目以上に腹持ちもよく、満足感ありますよ。

links
- COMP 完全食
- 完全まちの要素とは?鯖江市長、フリーミアム動物園、創造拠点Hana道場とオープンソースなjigカレー
- 健康を計算しよう!カロリー内訳計算機、バランスと食物繊維含有量をチェック、食べるをハックするカロリー編
- 化学は自分の仕様を探るテクノロジー、食べるをハックする食塩編
- ZOZOSUITが来たので、体格オープンデータと3D物理シミュレーションで歩くモデルづくり

IchigoJam 誕生5周年に感謝して、オール鯖江コラボでイチゴ焼!

Special Thanks: 三六商店さん、うちのぶどうさん、福岡農園さん、田中眼鏡さん


こちら採れたて、鯖江産イチゴ by 福岡農園!(めがね会館から車で1分)


期間限定、人数限定、鯖江で唯一のイチゴ狩りができたり、夏には採れたて野菜の自動販売もあり!


イチゴジャムにしていただいた、みやもとぶどう園「うちのぶどう」さん!


ふわっふわのサクラ風味のシフォンケーキもおいしいお店!
鯖江市下新庄町55-34-1、道路沿い(土日限定営業)


そして、鯖江のソウルフード、三六サラダ焼!三六商店社長と!
みなさま、コラボへのご賛同、ありがとうございます!!


サラダ焼、イチゴ焼の焼いている様子と珍しい焼印シーン。


この焼印、クラウドファンディングでゲットした、IchigoJam オリジナル!
目指せ全国制覇!鯖江の知られざるソウルフード「サラダ焼」を皆様に知ってほしい! | クラウドファンディング - Makuake(マクアケ)


こうして焼きあがったイチゴ焼!


早速、サラダ焼大使、田中眼鏡の田中さんによる食レポしてもらいました!


世界で唯一、IchigoJamが買えるメガネ屋さん、田中眼鏡、田中さんは、サラダ焼大使!


こちら開発中のウェアラブル 鯖gumo!?


メガネ裏のアクセサリーとしてもいけそう。光るシリーズに追加!?


150コ限定生産!


IchigoJam5才の誕生日!【IchigoJam生誕祭】: Hana道場
Hana道場、IchigoJam体験会にたくさん来てくれたこどもたち!お祝いありがとう!


サラダ焼の外見に、中身は鯖江産イチゴジャムとカスタードクリーム!
この世で一番うまい」と言った小学生、頭と体をフル回転する子供たちにはぴったりなのかもw


三重からかけつけてくれた、PCN三重代表の岡村さん!福岡、静岡、愛知など各地高専でも活躍!


おみやげも、イチゴ!


世代を超えて、みんなでつくって、みせあって楽しむ姿!


高専生、大学生も一緒に!


京都から里帰りしていた新小学3年生の女の子、初のプログラミングとゲームづくり、大いに楽しんでくれました。


ライフ制、ゴール付きのかわくだりゲーム。
38行の絵文字「うずまき」を「イチゴ」に変えると、イチゴゲットでライフ回復!1分(=3600)耐えればゴール!


こどもたち大はしゃぎ、ショップのふうせんさんより、IchigoJam 5th特別風船、いただきました!
IchigoJam ロゴ入りゴム風船 - ショップのふうせん」IchigoJamロゴ入り風船も!
ありがとうございます!


Hana道場のIchigoJamとイチゴ焼。


イチゴ焼コラボマップ
ご協力いただいた場所、半径3km圏内!


三六サラダ焼とイチゴ焼。
鯖江コラボ、またいつの日か!

5才になった、IchigoJam、これからも多くのこどもたちに笑顔とワクワク、届けます!
IchigoJam 5th Annivarsary | PCN プログラミング クラブ ネットワーク

化粧用スポンジの収縮を計測する変わり種センサー「ショッカクポット」を使ったやわらかボタン。 シリアル通信で使え、3.3Vでも動いたので、PC用のUSBシリアルを経由してマウス替わりのポインティングデバイスにしてみました。

やわらかい触り心地の新操作感、小さなこどもから、高齢者、障害者の方まで、幅広く提供する、インクルーシブソフトウェアとしてもオススメです! ThinkPadの赤いポインティングデバイスをご存知の方には、大きくなって、柔らかさが増した感じというとわかりやすいかも。


ショッカクポットの5V、GND、Tx、Rx、RSTを、3.3V(定格外ですが)、GND、RXD、TXD、DTSに接続すればハードウェアの準備はOK!

今回は、Python3でプログラムを書きました。

serport = '/dev/tty.SLAB_USBtoUART' import time, serial ser = serial.Serial(serport, 57600, bytesize = serial.EIGHTBITS, parity = serial.PARITY_NONE, stopbits = serial.STOPBITS_ONE) ser.dtr = True #reset time.sleep(0.1) ser.dtr = False time.sleep(0.1) ser.write('m'.encode('utf-8')) ser.read() # dummy recv 0xff time.sleep(0.1) import pyautogui try: data = [ 0, 0, 0, 0 ] # 10bit date: CH1, CH4, CH2, CH3 while True: ser.write(0x6d.to_bytes(1, 'big')) ser.flush() sum = 0 for i in range(4): n = int.from_bytes(ser.read(2), 'big') data[i] = n sum += n print(data) # drive Shokkaku pot! if sum / 4 > 40: pyautogui.click() else: dx = (data[3] - data[0]) / 2 dy = (data[1] - data[2]) / 2 dx = dx * abs(dx) dy = dy * abs(dy) pyautogui.move(dx, dy) except KeyboardInterrupt: ser.close()

pyserial, pyautogui を pip3 でインストール!
# drive Shokkaku pot! の下を書き換えるといろいろ好きに使えます
つまむ動作を認識して、特定の動作に対応させるのも、楽しそうです!


pyautogui.move の動作がちょっとぎこちないのが残念・・・。重いので自乗して簡易的に加速させています。java.awt.Robot版ともいいかも。

何事もまずは試作。山口県訪問時に買ってきた瓦そば。山口では家庭でフライパンやホットプレートで作って食べるのが一般的とのことなので、挑戦してみました。
高専生活躍! 異分野 x アプリ/IoTが熱い、G空間ハッカソン in 山口

一番の難関は錦糸卵。初挑戦に選んだ参考書はこちら
簡単すぎてウソみたい!失敗しない錦糸卵の作り方&春色アレンジレシピ3選♩ - macaroni

卵液を初回は全部いれてしまい分厚くなって失敗。2度目は裏返し忘れて失敗。3度目は焼き具合はよかったものの、細く切る技術が足りずそこそこなでき。「ひとつまみ」という、謎料理単位に悩みましたが、前進あるのみ。


牛肉を先に焼いておき、ゆでて水でしめて、ザルで水切りした茶そばを炒める。やきそばと違って、あまりかき混ぜず、焼く感じがポイントと知ったのは作った後。 確かに、本場で食べた瓦そば、下の方はカリカリしてました。その触感の違いもまた特徴とのこと。


ネギ、ノリ、レモン、もみじおろしを省略、しかも卵と肉が逆だった、第一試作でしたが、おいしかった!
次は、フルバージョンにチャレンジしたい!(Amazonにありました他多数

links
- タッチエンスのショッカクポット(POTU-001-1)を触ってみた。 - Qiita
- やわらかIoTボタンとバーチャルリアリティ VR ZONE SHINJUKU体験で想うVRゲーセンの未来形
- ショッカクポットI2C版 - Amazon

鯖江で造られ、世界98カ国に輸出される日本酒「」の進化が止まらない。

温湿度が完璧に管理され、世界中どこからでもチェックできるようIoT化された酒蔵。
麹菌を指定量、きっちり1往復3分ペースでふりかけるのが鍵。


砂時計で計測しているこの工程、テープLEDでガイドするプログラムでより簡単にできるかも!?
上記、片道1分半をガイドするデモプログラム。


酒蔵の到るところに見られる「加藤式」の数々。


鯖江のメガネの表面加工技術によって作られた、炊きムラをなくす工夫、ガラス製の擬似米。


完成していた天空蔵
前回訪問時に活躍が予定されていたのはロボットくん導入!
ただ、人力+台車によるもっと効率良い方法があったとのことで、本格活用は保留中。


日本酒をしぼる工程を待たず、味をすばやくチェックするための遠心分離機。


日本酒の成分を自動的に分析する専用マシン!


強運にも恵まれる梵、なんとこちら天然石!(ひょうたんに梵、左下には狛犬も)


キリンさんに加えて、新入りのくまさん!


SAPによる新コミュニティ組織「Business Innovators Network」
ASCII.jp:国内企業との共同イノベーションを促進、SAPがコミュニティ始動
鯖江 x SAP、新たな取り組み始まる!

links
- 日本酒「梵」の酒蔵 | 加藤吉平商店 |

jigインターン、がっつり開発する2週目!定時後、Adobe XD を使ったデザイン勉強会に混ざってみました!


UIデザインの便利無料ツール「Adobe XD」を使ってみるデザイン勉強会に参加し、ハンズオンで作ったTwitter風のモックアップ。 中央揃えや、等間隔など、スナップがいい感じに効いて気持ち良し。自動で出てくるピクセル単位のガイドも良し。 Designで画面をサクサクつくって、Prototypeで画面間のつながりをパパッと作れます。


できたモックアップは、ツール右上のボタンからAdobeのサーバーにアップロードして、web共有が可能(無料版は1つまで)
今回作ったもの(期間限定)」


チームみんなでモックアップを自分の手元のデバイスで確認できるので、すばやく失敗に気がつけますね! テーマカラーがまとめて変更できて便利!(シンボルの一括編集もしたい、できる?)


フロントエンド勉強会と、


デザイン勉強会。どっちも受けたかった?受けた人から聞いてみよう!


インターンOB、遊びに来てくれました!


OBにプロダクトのビジョンを説明、質疑応答から生まれる、新たな発想!


インターンOB達と食べるランチは、福井ご当地グルメ、ヨーロッパ軒 神明分店のカツ丼!


誕生105年、世界最古のカツ丼!
食べ方など詳しくはこちら「カツ丼誕生100周年!ヨーロッパ軒のソースカツ丼の食べ方
(写真は、蓋が締まりきらない、ご飯大盛りのカツ丼大)

うえるかむパーティーで行った秋吉など、ご当地チェーン店のみまとめるマップもあると良さそう!?

jigインターンDay8
初めての自炊 - jigintern2018’s diary

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像