ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

研究

今日やった事

研究

諸事情によりあまりちゃんと時間を取れなかったので、進捗も少なめでした。悲しい。

Mongoに蓄積されたWebサーバーのログをJSからこねくり回しているが、思ったようにデータを操作できなくてJS力の低さを感じる。

研究の論文締め切りが発表されたので意味のわからんページを作った

paper-countdown

スマホだとレイアウト結構崩れる)

これを全画面で研究室のスクリーンに出してたらなんか心を病みそうになった。

明日の予定 / やること

  • 研究
  • 都内某所にいく

雑談

研究関係ないけど、CSSってまともに書けないなと思った。

ずーっと昔に、初心者向けの本で学んだきり、キャッチアップ出来ていないので、改めてどこかで時間を作って勉強したい。フロントエンドやるなら多分出来て困ることはないはず。

今日やった事

研究

今日はアルゴリズム考えたりとかであまり作業をすることはできなかった。

Mongoを触ってるコードがただのJavaScriptだったので、TypeScriptを導入したりしていた。

規模としては大きくないので別にJSで書けないこともないのだが、やはりエディターの補完が効く安心感や作業スピードの向上は型を当てていく手間を考えても大きいと思った。

明日の予定 / やること

  • 研究

雑談

毎日研究しかやれてなくて心が苦しいなーと思った。

なんとか年内には研究にケリをつけて他の勉強をやっていきたい…。

Mongo with Node.js

今日やった事

Mongo with Node.js

研究のコードを書いていました。

Node.jsからMongoを触るにはmongodbというパッケージを入れればよくて(そのまま)こんな感じで使える。

const MongoClient = require('mongodb').MongoClient;
const _ = require('lodash');

const url = process.env.MONGO_URL || 'mongodb://localhost:27017';
const dbName = process.env.MONGO_DB_NAME || 'fluentd';

// Create a new MongoClient
const client = new MongoClient(url, {useNewUrlParser: true});

client.connect()
  .then(async client => {
    const db = client.db(dbName);
    const query = {
      status: { $regex: /^[123]/ }, // StatusCodeが1xx/2xx/3xxのログを抽出
      request: { $regex: /^GET/ } // GETリクエストを集計対象にする
    };

    const logsGropudByRemoteAddr = {};
    await db.collection('web').find(query).forEach(record => {
      if (logsGropudByRemoteAddr[record.remote]) {
        logsGropudByRemoteAddr[record.remote].push(record);
      } else {
        logsGropudByRemoteAddr[record.remote] = [record];
      }
    });
    client.close();

    return Object.values(logsGropudByRemoteAddr);
  })
  .then(logs => console.log(logs))
  .catch(err => console.log(err));

ちょっとどうでもいい部分が多いが、こんな感じ。

queryという変数には、検索条件が入っている。MongoはNoSQLなのでこんな感じで検索条件を指定していくらしい。

他にも$から始まるオペレータがいろいろとあるので、ドキュメントをみながら探すのがよさそう。(もしくはnot mongoとか、SQLの用語と組み合わせてググるといい感じにヒットする)

明日の予定 / やること

  • SA
  • 研究

雑談

研究に一筋の光が見えたか?

という感じ。とりあえずちゃんとアルゴリズム考えて実装してみないことには始まらなさそうだなと思った。

Vue.jsに入門してみた

今日やった事

Vue.jsに入門してみた

研究をしないといけないのですが、あんまり時間がなかったのと、かねてからやってみたかったのでVue.jsに入門してみました。

github.com

カレンダーみたいなのをライブラリ使わずに実装してみた。

f:id:uutarou:20181117234805g:plain

Vueの算出プロパティやメソッド、ディレクティブなどの基本的な操作を一通り試すことができたので、いいお題だったかなと思った。

ただ、JavaScriptのDateに対する理解が足りなかったので、いろいろと詰まってはMDNを眺めるみたいな形になってしまったのはちょっと残念。カレンダーの配列を作っているところ、こんな感じでいいのか無限に悩みながら実装したので、誰か綺麗な実装があったら見せてほしいと思った。

(全然関係ないけど)チェキ会に行った

結局研究やばいとか言いつつもオタ活してきたので、ログとして残しておく。

こんな感じ。元気がチャージされたので、明日からはちゃんと頑張って研究します。

明日の予定 / やること

  • 研究

雑談

楽しい1日でした。

103 Early Hintsを試したり

今日やった事

研究

午前しか時間がなかったので大した進捗はなく……。

github.com

こんな奴を作ってちょろっと試したりしてた。

103というHTTPのステータスコードがあって、レスポンスヘッダだけを先に送ることができる。

こいつとH2Oというwebサーバーを組み合わせることで、HTTP/1.1を喋るサーバーを使っていてもHTTP/2の機能であるサーバープッシュという機能が使える。

実際に動くか試したらちゃんと動いた。

あとは、前日書いたfluentdが動くDocker composeに少し手を加えた。Mongoに対する理解が足りなくて変な感じになってたところが修正された。

明日の予定 / やること

  • タイヤ交換
    • 自宅の車のタイヤ交換に持っていく(どうでも良い)
  • 研究
  • チェキ会
    • 行ってる場合じゃねえので行かないかも

雑談

もっと前からちゃんと方向性定めて研究しておくんだったなあwとか今更言っても遅い

研究手伝い

今日やった事

研究手伝い

研究のお手伝いをいろいろとやった。

DockerでRails動かしたりして喜んでた。いつのまにか、(Rails5.2かららしい)configの下にmaster.keyとかいうファイルが追加されていて、そのキーを用いて暗号化されるファイルに各種Credentialを入れる仕様に変更になっていた。

qiita.com

ここでちょろっとはまってしまった。

SA

今日のSAはC言語でファイルの読み書き。

思ってたよりも全然余裕だった。

明日の予定 / やること

  • SA代理
    • なんか頼まれた
  • 研究
    • 代理SAが3コマあるのでいけるのか?という感じ

雑談

思ったように研究進まなくてつらいねー

今日やった事

研究

いろいろあった予定がなくなったので、今日は1日家で作業をしていました。

研究の検証にServiceWorkerがもしかしたら使えるかもしれないと思って、初めて自分でSW書いてみたりしていました。

話には聞いていたものの、本当にリクエストを横取りしていろいろできるのだと知りました。違うURL叩いてレスポンス返したり、setTimeout仕込んで遅延させたりいろいろとやって遊んでしまいました。

動的なコンテンツを扱うサイトでServiceWorkerを使って先読みみたいな事できないかなぁ。

明日の予定 / やること

  • 研究
    • つらい

雑談

そういえば昨日はうっかりブログ更新し忘れていました。悲しい。