カプチーノと言うライブラリを使いたかった
初めに
この記事はごちうさ Advent Calendar 20167日目の記事です。
www.adventar.org
遅れてしまって申し訳ないです .
(と思いつつ,今の時刻は2016/12/7 14:00(EST東部時間)なので許していただけると……、と言う気持ちです。)
モチベーション
このようなライブラリを見つけました。
GitHub - cappuccino/cappuccino: Web Application Framework in JavaScript and Objective-J
しかし JavaScriptもObjective-Jも触ったことがないのとより身近なライブラリを作って
出来る限りチノちゃんと一緒にコントリビュートしたということでカプチーノと言うライブラリを作りました。
今回はこれを紹介したいと思います
- 「この部分はチノちゃんに働いてもらう?」
- 「ココはチノちゃんが働いているから問題ないと思うよ」 等が聞こえるチームにしたいです。
作ったもの
C言語のSocket周りの練習がてら上の夢をかなえるために動きだしました。
環境
READMEにも書いてあるのですが基本的にc++14がビルドできる環境なら動きます。 シンプルにしたかったのでboostは使ってないです。
簡単な例
#include "../cappuccino.hpp" #include <json.hpp> using json = nlohmann::json; using Response = Cappuccino::Response; using Request = Cappuccino::Request; int main(int argc, char *argv[]){ Cappuccino::Cappuccino(argc, argv); Cappuccino::templates("html"); Cappuccino::publics("public"); Cappuccino::route<Method::GET>("/",[](std::shared_ptr<Request> request) -> Response{ auto res = Response(request); res.file("index.html"); return res; }); Cappuccino::run(); return 0; }
こんな形でかけます。
実行
$ ./chino $ curl -X POST http://localhost:1204/
改善点
作ってみて
- チノちゃんと何かモノを作ると言う経験が可能になったのは大きい。
- port番号の意味でチノちゃんの誕生日を共有しやすくなった。
最後に
チノちゃん誕生日おめでとう!いつも癒やしありがたき🙏
SCTPを使ってみた//WIP
WIPです
本当に申し訳ないですが日本時間には間に合いそうにないです…… すみません(2016/12/6 AM 8:15)
はじめに
この記事はAizuAdventCalenderの記事である。 一つ前は misoton665 さん 一つ後は 0xShone さんです。 よろしくおねがいします。
モチベーション
SCTPと言うプロトコルを知り良さげだと感じたのとLinuxでAPIがあると知って やってみたくなった
SCTPとは
Stream Control Transmission Protocol
と言うプロトコル。
RFC4960で書かれている . RFC 4960 - Stream Control Transmission Protocol
簡単に説明するとTCPの様な信頼性は担保したいが制約が多すぎるので作られたのがSCTP。
公衆電話通信用に作られたが他の用途でも使うことができる。
TCP,UDPに比べあまりポピュラーではないがLTEのトランスポート層でも採用されている。
TCPと比べて良い点
Features TCP SCTP multi-streams support No Yes multi-homing support No Yes preservation of message boundaries No Yes unordered reliable message delivery No Yes
マルチホーミングとは複数の経路を使ってアクセスすることができる機能
使い方
LinuxのAPIでサポートされているので普通に利用できる https://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-10
環境
Ubuntu 16.0.4 gcc 5.4.1
下準備
sudo apt install libsctp-dev
簡単な実装(server)
#include<sys/socket.h> #include<netinet/in.h> #include<netinet/sctp.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include <errno.h> #define MAX_LISTEN 10 #define BUFSIZE 2048 int main(){ int sockfd; struct sctp_sndrcvinfo sndrcvinfo; sockfd = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP); if(-1 == sockfd) { perror("error open socket"); exit(EXIT_FAILURE); } struct sockaddr_in server, from; memset( &server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_addr.s_addr = htonl( INADDR_ANY ); server.sin_port = htons(1204); if(-1 == bind(sockfd, (struct sockaddr *)&server, sizeof(server))) { perror("error bind"); close(sockfd); exit(EXIT_FAILURE); } if(-1 == listen(sockfd, MAX_LISTEN)) { exit(EXIT_FAILURE); } struct sctp_initmsg sctp_init; /* num_ostreams: number of outbound streams; max_instreams: max number of in-bound streams; max_attempts: max re-transmissions while establishing an association; max_init_timeo: time-out in milliseconds for establishing an association. */ memset( &sctp_init, 0, sizeof(sctp_init)); sctp_init.sinit_num_ostreams = 10; sctp_init.sinit_max_instreams = 10; sctp_init.sinit_max_attempts = 0; sctp_init.sinit_max_init_timeo = 0; int opt = 1; setsockopt(sockfd, IPPROTO_SCTP, SCTP_INITMSG, &sctp_init, sizeof(sctp_init)); if(listen(sockfd, 1) < 0) { perror("error listen for connection"); exit(EXIT_FAILURE); } const char* message = "Hello world"; char buffer[BUFSIZE]; printf("start listen loop\n"); int msg_flags; while(1) { int resv_size = sctp_recvmsg( sockfd, buffer, strlen(buffer), (struct sockaddr *)&from, // sockaddr * from &len, // socklen_t * fromlen &sndrcvinfo, // struct sctp_sndrcvinfo &msg_flags // int * msg_flags ); if(-1 == resv_size) { perror("error receiving message"); exit(EXIT_FAILURE); } buffer[resv_size] = 0; int ret = sctp_sendmsg( sockfd, (void *)buffer, (size_t)strlen(buffer), NULL, // struct sockaddr *to 0, // socklen_t tolen 0, // uint32_t ppid 0, // uint32_t flags 0, // uint16_t stream_no 0, // uint32_t timetolive 0 // uint32_t context ); if(-1 == ret) { perror("error sending message: "); exit(EXIT_FAILURE); } } return 0; }
コンパイル
gcc sctp.c -lsctp
進捗
error open socket: Socket type not supported
Ref
http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/other/rfc3286.txt マルチホーミング
http://tech.queryhome.com/44164/what-is-the-main-advantage-of-using-sctp-over-tcp-ip
大学院入試辛かった
結果的にアレだったがどうせなのでメモしておく。
自分は入試に向かないなという気持ちで胸がいっぱい
英語
大学的に大丈夫だろうと思いつつ不安だったので一工夫した。
具体的には東山奈央さんの声を耳に馴染ませ全ての英文が東山奈央さんの声で再生されるようにした。
これにより英文を読むことで気分がよくなる->英文を読みたくなるの流れをつくっていった。
その結果入試とは関係無いが英語が好きになった。イギリスに行きたい。
ポイントとして
- 作者: きんいろ英語レッスン受講生一同,川合亮平,原悠衣
- 出版社/メーカー: KADOKAWA/中経出版
- 発売日: 2015/04/29
- メディア: 単行本
- この商品を含むブログ (7件) を見る
これを読むと九条カレンちゃんで脳内再生されるのでとっかかりとしてはいいと思う。
これも定期的に聞こう。
実技(プログラミング)
とりあえずC++書いた。実技の問題は特に難しいアルゴリズムというより
なんか1つできる言語あるんすか?てなのを調べるのが目的だと勝手に感じた。
普段書いてる言語を使えるようにしておけばいいと思う。(ファイル入出力とかスレッドとか痒いところが出る)
自分のPCを使うことができる利点として彼女たちと一緒に試験を受けられるということがある。
しゅき〜❤️
筆記(情報工学)
前日にMAに参加してて割と対策していなかった。
hacklog.jp
MAではとりあえず仮想通貨システムをブロックチェーンで作った。
東北予選で優勝!wだったので東北代表😄。スフィアかわいい。
今年の試験の内容はロボット工学と論理回路周り。
会津大の授業で履修した内容がそっくりそのまま出てたのでアド。
面接
1 vs 14てめげるわぁ😥(末原恭子 in 咲-saki-)
という感じ。第二志望の方は適当に書いていたので理由聞かれて気まずくなった。
シンフォギアライブ2016の円盤を手に入れることができたので面接頑張れた入試終わってないけど優勝したw pic.twitter.com/zWVzTEyJxC
— Sonoko Mizuki (@mizuki_sonoko) August 24, 2016
感想
外部進学なので待ち時間は回線がなく辛い。
今回はiPad pro+iPencilを持って行ったのが功をなして暇をつぶせたのがアド。
当然だが試験時間はオフラインなのでかなりしんどい。合計10時間ぐらいオフラインなので辛い。
入試嫌い。
membersrvcをsupervisorで動かす
hyperledger/fabricの証明書サーバー動かすメモ
続きを読むhyperledger/fabricをEC2で動かす
SPAJAM仙台予選でブロックチェーンでアセット監視システムを作ったが
その時hyperledger/fabricをEC2で動かそうとして結構はまったのでセットアップをまとめた。
GitHubで大学課題を管理した
さいしょに
私の通う大学には”言語処理系論”と言う講義がある。
簡単に内容を説明すると言語処理の手順を学びつつ自作言語と自作コンパイラを作っていく面白い授業だ。
なお、この講義の演習はチーム制であり、提出方法は学内の自分のホームに作った専用フォルダに指定時間内に置いておくといううものである。
今回、GitHubのprivate repoが大幅値下げされたことに伴って課題をGitHubを使って提出する方法を共有しようと思う
背景
- 自分含め3人のチーム開発
- 提出先は
~/lp/ex**
, testdir内に入ってmake,testall.shをしてその結果ACなら問題無い
下準備1 GitHubのAccess Tokenを取る
curl -u 'MizukiSonoko' -d '{"scopes":["repo"],"note":"Help example"}' https://api.github.com/authorizations
下準備2 各種変数
Repository名を入れる
REPO_NAME="LanguageProcessingInUoA"
GithubnのAPIKeyを入れる
API_KEY="RabbitHouseTeaParty"
Scriptを書く
gist1eee3bd7b12882bbff97bb78e58988e2
使い方
./deploy.sh ex04
的な
運用
とりあえずdevで開発、testが通ったらmasterにPRしていった。
マージして、上のscriptを走らせてたら無事提出できてたっぽい。
結果
Bもらった!!!!!
今後
もう課題提出の講義が無いので後輩にはtravisとか色々導入してより良い課題提出環境を作っていってほしい。
automatorでコンテクストメニューにSlack共有作ったら捗った
automator開く -> サービスを新規作成
ユーティリティ -> シェルスクリプトを実行
shellscriptを書く。SlackのIncoming WebHooksを使う
curl -X POST --data-urlencode "payload={\"channel\": \"#favorite\", \"username\": \"webhookbot\", \"text\": \"http://$1\", \"icon_emoji\":\":star:\"}" https://hooks.slack.com/services/**chino**cocoa**rize
サービスをインストールする的なダイアログが出る。インストールする。
コンテクストメニューに追加されているので使う
捗った
ToDo
URLに対応