なりました。21歳に(倒置法)

多分これ公開されるのが1/31とかなんですけど、ついに21歳になりました。今年はとても早かったですね。 変わったことは思想、価値観や自己評価です。使っているテキストエディタは変わりませんでした。 いつも通りですが非論理的な文章構造になってます。 どうでしたか去年は?(倒置法) 2017年は前半死んでて後半がんばってる感じだった気がしたんですけど、2018年は真逆だった気がする。 酒 たくさん飲んだ。主にビールが好きということがわかったというのがアドですね。あとは年相応にしてサイゼのワインを無限に飲むのが好き。 社会人ならもっと高い酒飲めよという話はあるのだが、ぶっちゃけ財布に余裕があるわけではないので許して欲しい。(突然の懺悔) お酒を飲んでる時が人生でそれ以外の時は人生ではないというのが今年一番の知見だと思った。アルコール最高!! コード 2017年よりは書いたと思う。GitHubの草は900前後とかだった。 まぁでも実用的なコードって全くなくて、OSSとかをガチガチでやってるって感じじゃなかった。でもブルーオーシャンな言語のライブラリを使って不便なところにPRを投げる遊びは楽しかった。 新しく学んだ言語は業務で使うためにScalaと、趣味で遊ぶためにRustを書いてた。っていうか今ではJavaScript(TypeScript)が一番書ける言語な感じがするんですけど、本格的に書き初めたのって今年っぽいですね。 各言語の感想を雑に書くとScalaはMonad的要素とパターンマッチが最高。Rustはブルーオーシャン感が最高(あんまり踏み込んで学習できてない)。TypeScriptはなんか雑に便利でよかった 名取さなさんの声を常に聞きたくてvimのpluginを書いたりしてた。あと、名取さなさんの音声を再生するDiscordBotを作ったりしてた。これは名取さなさんのガイドラインが制定された時に公開をやめた。DiscordBotを我以外の他人がホスティングし始めてしまったので。 後半はあまりコード書いてないがこれの理由は後述するんだがエンジニアの休日にコードやアウトプットがうんちゃらみたいな文化に吐き気がしたのと、そういうのを疑似強制するような人間が求めてることをやりたくなさが強くなったからです。 OSSメンテナに憧れて生きてるけど我にはきっと継続的にメンテしていく気力も自身もないよなって気持ちになってる。 ブログ 前半はよくできたね偉いってくらい書いたと思う。30はてブくらい付いた記事とかあって承認欲求の高まりを感じちゃった。でも後半は精神が荒れていたのと文化破壊欲求が加速して書かなくなった。アドベントカレンダーは本当にごめんなさい。来年からはもう登録しません ゲーム だいたいたのしかった。でもハースストーンはマンモス年のDKとかゴミレジェが環境を破壊していて単純に不快なゲームだったのでスタン落ちしたら呼んでください。 寄稿した。合同誌に(トーチゴーレム) 楽しかったんだが一番体力を使ったが関係各位にだいぶ迷惑をかけた気がしているやつです。まじでごめんなさい 始めて有料でイラストの依頼メールとか送ったけどこれは良かった(原稿進捗や仕事が忙しくて連絡滞りや雑な対応などあって反省点はおおいが‥)し、今度はアイコンとかで依頼してみたいなぁ 仕事 2/1に書きます VTuber 名取さなさんが好き。 見なくなったもの。見るようになったもの Twitterとはてブをあまり見なくなった。Twitterはモバイルが最悪で他人のいいねで容易に悪意が可視化されてるのが嫌だった。はてブもそう。ホットエントリーにたまに上がってくるDis系のコンテンツを見るのが嫌になってきたっていうがある。インターネットには悪意の渦が渦を巻いていることがわかる。 諸悪の根源 2018年は本当に嫌いな物や明確な悪意というのがよくわかった年だった。後半苦しかったのもそれが悪い。 全部人の中にある承認欲求が悪いんです。承認欲求消えさってくれ。俺の観測範囲に入ってくるな。おまえらはWebサービスを実装する時にいいねなんていうバカげた機能を実装するな。今すぐ滅びろ。頼む。俺のために滅びてくれ。人間。いいね合戦をやめろ。いいねを稼ぐなんて馬鹿げた目的を俺の観測範囲に入れるな。いいねを稼ぐ目的で過激をするな。やめろ。やめろ。やめろ。やめろ。やめろ。やめろ。やめろ。承認欲求はこの世に存在しちゃいけないんだ。インターネットを見てるだけで個体値厳選されてる気持ちになるのも全部こいつがいけない。 こういう事言うと「お前の生産性や評価がゴミなのを外部に擦り付けるな」とか言われそうなんですけどそういうことじゃなくて、単純にお前のそのやり方が他人の生き辛くしているからやめろといっているんですよ。 今年 まったりひっそりとなんかしていたい。なるべく外界とのアダプターを切っていきたいっていうのが正直な所なんだけど、もっといろんな人間と友達になってみたいというのもある。 これは友達の受け売りなんですけど、今のインターネットは何らかの影響ででかい存在になって走り続けなければ行けない人間と何の影響もなくてひっそりと永遠に停滞し続けるの両極端になってるっていう話があった。僕は後者なので一生停滞します。 さいごに 例のリストです http://www.amazon.co.jp/registry/wishlist/2MFXRTHKOUEYH/ref=cm_sw_r_tw

Posted

テスト記事

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Posted

RustでEnumを文字列(文字列slice)から生成したい

Rustを書いていると自分で定義したEnumを文字列から生成したくなる時がある。コード例で示すとこんな感じ pub enum Foo { Foo1, Foo2, Foo3, Foo4 } Foo::from_str("Foo1") // -> Foo::Foo1 こんな時は標準ライブラリに入っている、std::str::FromStr トレイトを実装してやるとうまいこといくし、他の似たような挙動をする型と一緒に扱えたりして便利で作法的にも良い。例は以下の通り use std::str::FromStr; use std::str::FromStr; pub enum Foo { Foo1, Foo2, Foo3 } impl FromStr for Foo { type Err = &'static str; fn from_str(s: &str) -> Result<Self, Self::Err> { match s { "Foo1" => Ok(Foo::Foo1), "Foo2" => Ok(Foo::Foo2), "Foo3" => Ok(Foo::Foo3), _ => Err("Error") } } } Foo::from_str("Foo1") // Ok(Foo::Foo1) Foo::from_str("Foo1sadasd") // Err("Error") もちろんFromStrはトレイトなのでenum以外にも適用可能なので、任意の型を文字列から生成したい時にはこの方法を使いましょう。

Posted

SPAにおけるOpen ID Connect認証

サーバーサイドとクライアントサイド両方とも実装する機運が出てきたのでそれぞれの役割を整理するためにシーケンス図を書いた。 Googleって書いてあるところはOAuthプロバイダーなら何でも置き替えられるはず 間違ってたら教えてくれ 追記: とりあえずシーケンス図が書けたのでAPIサーバーに求められている機構を実装した。curlで試しているのと、SPAのガワが存在していないため一旦セッションに入れたりstateの検証するのは省いた。 const { createHash } = require("crypto"); const url = require("url"); const express = require("express"); const bp = require("body-parser"); const axios = require("axios"); const jwt = require("jwt-simple"); const secret = require("./secret.json"); const app = express(); app.use(bp.json()); const salt = "hakatanosalt"; app.get("/oauth/callback", (req, res) => { console.log( JSON.stringify({ code: req.query.code, state: req.query.state }) ); res.send("ok"); }); app.get("/oauth/google/login", function(req, res) { const state = createHash("sha256") .update(`${salt}${Math.random()}${+new Date()}`) .digest("hex"); const params = new url.

Posted

RustでMarkdown to Htmlを試してみる

有給を取って、ここ最近新しい事を始められてなかったことを思い出したので前からやりたかったRustに入門をしました。 んで、まぁいつも通りブログシステムでも書いてみるかなぁとか思ってRocket触ってDBまでアクセスしてInsert流す所までは普通にできたので、とりあえず次はMarkdownをパースしてhtmlに変換するやつでも書こうかなと思ったのでやってみることに。 ライブラリを物色してみるとpulldown-cmarkというやつが人気そうなので雑にインストールして使ってみることにしました:smile: インストール Rustの環境構築は一旦省いて、以下のコマンドでパッケージを切って依存関係にpulldown-cmarkを入れていきます。 $ cargo new --bin pulldown_cmark_playground $ cd pulldown_cmark_playground $ cat 'pulldown-cmark = "0.1.2"' >> Cargo.toml $ cargo build cargo buildした時に依存関係にあるpulldown-cmarkが落ちてきてビルドされます。エコシステムがしっかりしていて完全に便利。文明の息吹を感じろ。 htmlに変換してみる というわけでライブラリを使う準備が整ったのでさっそくMarkdownをhtmlに変換してみる。 GitHubのREADME.mdにはサンプルコードらしき物が書いていないが、ドキュメントの方にはちゃんと書いてあるのでそちらを参照しよう。大体以下のコードになります。 extern crate pulldown_cmark; use pulldown_cmark::{html, Parser}; fn main() { let markdown_str = r#"# Hello 人間は愚かな生物。 [俺のブログ](https://blog.himanoa.net) "#; let parser = Parser::new(markdown_str); let mut html_buf = String::new(); html::push_html(&mut html_buf, parser); println!("{}", html_buf); } $ cargo run で実行してみると以下の結果が出力されます。 <h1>Hello</h1> <p>人間は愚かな生物。</p> <p><a href="https://blog.himanoa.net">俺のブログ</a></p> 普通にhtmlに変換されていますね。やったぜ mutableな変数の参照を引数で渡して、渡した引数に結果が代入されるっていうのがすごい気持ち悪いのですが、多分戻り値で受けるとコピーのオーバーヘッドが発生するからこうなってるのでしょう。わからない…Rust詳しい人教えてくれ…。

Posted