Retired Colourman

何度も朝がやってくる

pubのアップグレードについて

Dartのpubspec.yamlを更新したりする便利なツールとして、denというのがある。いちいち手書きしなくていいので便利。 denを使ってアップデートするとき、どこで情報が更新されるのか忘れがちなのでメモっておく。

  1. コードを完成させる。テストも成功させる。
  2. masterブランチにマージする
  3. CHANGE LOGを書く
  4. den bumpでバージョンをアップする(ここでgitのタグも作られる)
  5. pub publishでpub.dartlang.orgにアップロード
  6. denが新しいバージョンのタグを作ってくれるので、必要であればそれもgitレポジトリにあげる

ポエム

高校3年生になり、ついに大学受験のための勉強をはじめざるを得なくなってしまった。

私はもともとコツコツとなにかをするということが苦手であり、もちろん勉強をする習慣なんてなかったため、三年間こつこつ真面目にやってきた優秀な人達に追いつくために夏休みのかなりの時間を受験勉強に割くことになった。普通の高校生なら当たり前なんだろうけど。

私が通っている学校は少しだけ普通の学校とは違う活動をしている人が多いため、推薦やAOで大学を決める人が多い。二年の終わりまでは私自身そうやって進路を決めていこうかと思っていたのだけれど、一番行きたい大学の推薦がとても厳しいということを去年の結果から知ったので、一般で行くしかないと覚悟を決めた。

夏休みに入ってからの勉強の進捗具合は悪くはない。一番自分が問題として抱えているのが、休日と平日のやる気の差だ。

平日は所謂夏期講習をとっているため、そこにある自習室などを活用して、それなりに勉強出来ているとは思うのだが、休日になるととつぜん気が抜けてしまい、家の机の前で魂を抜かれたようにぼーっとする時間が多く、休日の勉強時間は皆無と言っていいほどである。

もともとONとOFFの切り替えが苦手な人間なのだけれど、これだとマズイ気がする。というかマズイ。百合CPについて考えていたら大学落ちましたなんて、そんなに面白くもないし洒落にならない。なんとかしないと。アイマス百合の沼の深さがいけないのかもしれない。

結論

アイマスが悪い。

twitter.dartを作った

github.com

前々からつくろうと思っていたことを思い出して作った。

現状ちょっと使いやすいというだけでこれライブラリである意味あるか?みたいなところがあるのでいろいろ改善していきたいとおもってる

  • エラー処理

現状DartTeamの公式パッケージであるhttpのhttp.BaseClientを継承して作られたoauth.dartを継承して作っているだけなので、返ってくるのがhttp.Responseクラスなので、twitter.dartを使いたい人はエラー判定とかも帰ってきたresponseのstatusCodeとか使って自分でやらなきゃいけないという欠点があるので、ライブラリ側でエラーを投げられるようにしたい。

  • レスポンスのデータのクラスを作製する

こういう表現が正しいのかわからないが、今の段階だとtwitter.dartを使ってTwitterクライアント作ろうとか思っている人はレスポンスのbodyを読んでそれを自作のtweet classに代入して…みたいなことをやらなければいけないので、こちらでサポートしてしまいたい。

この夏受験生ということもありかなり忙しくなるのでちゃんと出来るかどうかわからないけれど、出来るだけ自分で直していけるようにしたい。

C++でWebsocketを扱う

知見を得たが使わなくなってしまったのでここで供養する。

Websocketpp

C++でWebsocket用のライブラリには、boost::asioがベースとなったwebsocketppがある。

github.com

boost::asioを使ったことがある方なら比較的簡単に扱うことが出来ると思う。

使うためにはboostが必要である。ubuntuなら

apt-get install libboost-dev 

あたりをやれば入ると思う.

コンパイルオプションに -lboost_system -I websocketpp/ あたりをつければ動くと思われる。

websocket_client.hpp

#ifndef WSCLIENT_WEBSOCKET_CLIENT_HPP
#define WSCLIENT_WEBSOCKET_CLIENT_HPP

#include <websocketpp/config/asio_client.hpp>

#include <websocketpp/client.hpp>

#include <string>

typedef websocketpp::client<websocketpp::config::asio_client> client;

using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;

typedef websocketpp::config::asio_tls_client::message_type::ptr message_ptr;

class websocket_client {
    typedef websocket_client type;
    
    public:
        websocket_client(std::string uri);
        void connect();
        void start();
        void send(std::string meesage);

        const std::string get_status();
        const std::string get_message();

    protected:
        void on_open(websocketpp::connection_hdl hdl);
        void on_message(websocketpp::connection_hdl hdl,message_ptr msg);
        void on_close(websocketpp::connection_hdl hdl);
        
    private:
        client m_client;
        websocketpp::connection_hdl m_hdl;

        std::string m_status;
        std::string m_url;
        std::string m_msg;

        bool m_is_connect;
};

#endif 

websocket_client.cpp

#include "websocket_client.hpp"

#include <websocketpp/config/asio_client.hpp>

#include <websocketpp/client.hpp>

#include <string>
#include <iostream>

typedef websocketpp::client<websocketpp::config::asio_client> client;

using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;

typedef websocketpp::config::asio_tls_client::message_type::ptr message_ptr;

websocket_client::websocket_client(std::string uri){
    // set url
    m_url = uri;

    m_client.set_access_channels(websocketpp::log::alevel::all);
    m_client.set_error_channels(websocketpp::log::elevel::all);

    //Initialize ASIO
    m_client.init_asio();
        
    //Register our Handler
    m_client.set_open_handler(bind(&type::on_open,this,::_1));
    m_client.set_message_handler(bind(&type::on_message,this,::_1,::_2));
    m_client.set_close_handler(bind(&type::on_close,this,::_1));
        
    //m_hdl is null in first

    //Set client status value
    m_status = "none";
    m_msg = "";
    m_is_connect = false;
}

void websocket_client::connect(){
    websocketpp::lib::error_code error_code;
    client::connection_ptr con = m_client.get_connection(m_url, error_code);

    if(error_code){
        m_client.get_alog().write(websocketpp::log::alevel::app,error_code.message());
    }
    //Save connection hdl from connection_ptr
    m_hdl = con->get_handle();

    m_client.connect(con);
    m_status = "connect";
    m_is_connect = true;
}

void websocket_client::start(){
    if(!m_is_connect){
        connect();
    }
    m_client.run();
}

void websocket_client::on_open(websocketpp::connection_hdl hdl){
    m_status = "open";
    send("test");
}

void websocket_client::on_message(websocketpp::connection_hdl hdl,message_ptr msg){
    m_msg = msg->get_payload();
    std::cout << m_msg << std::endl;
}

void websocket_client::on_close(websocketpp::connection_hdl hdl){
    m_status = "close";
}

void websocket_client::send(std::string message){
    if(m_is_connect){
        try{
            m_client.send(m_hdl,message,websocketpp::frame::opcode::text);
        } catch (const websocketpp::lib::error_code & e){
            std::cout << e.message() << std::endl;
        } catch (...){
            std::cout << "nanika okiteru " << std::endl;
        }
    }
}

const std::string websocket_client::get_status(){
    return m_status;
}
const std::string websocket_client::get_message(){
    return m_msg; 
}

詳しい説明みたいなのは今度追記する

今年度を振り返る

4月~7月ぐらい

無事に進学できたので二年生になった。新しいクラスは去年よりかなり頭のおかしい奴の割合が上がっていた気がする。やりたいことが大体似ているからだろう、気が合うクラスメイトが多く、居心地もよかった。

GitHubを見ると自分のWebサイトを直している日が多い。まあ特にプログラミングはGitHubにあげるようなものはやっていなかったということかな。

というかここから一学期にかけてほとんど進捗がない。多分レポートがきつかったからだと思う。

この学校に入ってからも僕はそれなりに健康的な生活をしていたのだけど、サボり癖と追い詰められないとやる気がでない性格から*1、提出日前から提出日の深夜にかけてレポートをやっては次の日の授業をウトウトしながら受けるみたいなことが多かった気がする。完全に自業自得ですね。

8月~10月初め

夏休みもあったのだけど、基本的には部活に励んでいた気がする。別に4~7月に部活に行っていなかったわけではないんだけど、10月に文化祭があるのでその準備が忙しかった。

文化祭はとても良い経験になったと思う。目の前で導線が焼けたりとか技術についてわりと厳しい意見を聞いたりとかチームワークの大変さを再認識したこととか。どうでもいいけど「改めて再認識した」って言葉、たまに使ってしまうけど二重になってますよねこれ...

あとこの時期に個人的にショックで今でもトラウマになっていることがある。まあそれに関してはいつか書く機会があると思う。

10月後半~12月

この時期から結構いろんなことしてると思う。まず部活関係で音声認識出来るぬいぐるみをつくったりした。このころにJuliusを知って興味を持った。未だに音声認識難しいしちゃんともっと勉強したい(というかする)。

あとはFRCという海外の大会に参加することになったのもこの時期のようだ。GitHubみるとWebサイトへのコミット数が結構多くて、ああわりと苦労したんだなと再認識した。他にもいろいろありましたが。

Dartに興味をもったのもこのころだ。最近は追いきれてない感じがあるので大会が終わったらいろいろ漁ってみようと思う。

1月~2月

さっきも言ったけれどFRCという大会にかかりっきりだった。まあいろいろなことがあった。あんまり多くをここで語るのも諸事情によりあまり良いことではないだろうと判断したので大変だったけどいい経験になったと述べておく。

最後に

一年間を振り返っても進捗はでないことは俺が証明した。仕事をしよう。

*1:世間的にはクズという