Screaming Loud

日々是精進

プログラミング

Goで重い処理をtimeoutさせる ~その2~

前回はGoでtimeoutさせる処理に関して書きました。 yuutookun.hatenablog.com しかし、前述の記事で書いているのはレスポンスが返らない場合でした。 多くの場合、レスポンスが必要だと思うので、レスポンスを付与するパターンを紹介します。 functionの返り…

Rustのstructoptで作ったCLIにシェル補完をつける

引き続きCLIシリーズの紹介です cliを作ったはいいものの、やはりコマンドのシェル補完はないと厳しいですよね。 structoptで作ったCLIでも簡単に補完のスクリプトを生成できるようになっています。 structoptのベースであるclap側にその機能があり、それをs…

RustでEC2検索を簡単にするCLIを作った ~ ec2-search ~

本記事は Rust Advent Calenderの9日目の記事です。 今回はRustでCLIを作ったので、機能紹介と作る上でのポイントなどを紹介します。 書こうと思っていたネタが、7日目の 2020 年版 Command Line Tool を作ってみる in Rust - Qiita と結構被ってしまったの…

rubyのyieldでのGCを調べてみた

rubyのyieldでGCってどうなるのかちょっと気になったので調べてみました。 コード gc.rb def opener1 Array.new(3).each do |_e| a = Array.new(1_000_000) do 'hello' end yield a end end def opener2 Array.new(3).map do |_e| Array.new(1_000_000) do '…

Apache Hudiを触ってみた

最近はデータレイクに保存しているデータに対し更新、削除ができるライブラリが増えてきました。 Kudu,deltalakeやHudiなどがありますが、今回はUberが作ったHudiを触ってみました。 セットアップ データの書き込み データ読み込み データ更新 特定の時点で…

Sentryにログを送るfluent pluginを作った

fluentからsentryに送るプラグインを作りました。 github.com こちらのプラグインのメンテが止まっていた感じだったので、新しく作りました。 github.com 利用イメージ 自分が欲しかったものは、fluent自体のログをsentryに送るという機能です。 なので、ま…

PythonでCFBを使って暗号化したものがGoで復号できない

Goには標準パッケージにcipherがあり、それを用いると暗号化復号化を行うことができる 例えば暗号化、復号化は以下のように定義することで実行できます。 import ( "crypto/cipher" "crypto/des" ) func TripleDesEncrypt(data, key, iv []byte) ([]byte, er…

EC2の起動時にEBSを紐付ける設定

EC2の起動時にEBSを紐付ける設定をするのに割と手間取ったのでメモ 利用するのは、起動テンプレートのユーザーデータです。 ユーザーデータに関してはこちら。 docs.aws.amazon.com 設定 今回はECSのインスタンスに対してdockerコンテナが立ち上がる前にebs…

自分のドメイン取得してWebサイトを作った

お久しぶりです。 自分のドメインを取得してページ作りました。 tl;dr yutosuzuki.info やったこと お名前.comでドメイン取得 AWSのS3の静的ホスティングで公開 CloudFrontを噛まして、S3直では見させないように。 Reactで実際の見せるサイトを構築 OGP対応 …

goaでXMLを生成する

goaとはgoのWebフレームワークです。 goa.design goでリクエストとレスポンスを定義してあげると、APIとswagger周りを生成してくれるので、便利なライブラリです。 詳しくはこちら The goa API Design Language · goa :: Design-first API Generation 今回go…

goaのjwtにおけるscopeに関して

goaのjwtやOAuthにおけるScopeってなんなんだろうと思ったので調べてみた 結論 claimに含まれているscope or scopesで判別 前提 Jwtは.で連結されたbase64encodeの文字列となっています。 3つのパートに分かれており、順番に ヘッダー 、ペイロード、 署名 …

vue.jsのTypeScriptハマりがち。 ~ eventの型とfocus ~

vue.jsでTypeScriptのeventをHandleしてそれを親コンポーネントに渡したいというときに型を何にすればよいか困ったので、その解決策。 以下2つのhtmlとtypescriptを使うことで解決。 やりたかったこと input textに入力したら、親コンポーネントに伝搬 マウ…

vueとtypescriptでtemplateを作ってみた

vue.jsでWebアプリ作ってみようと思い、テンプレートを作ってみました。 vue-loaderが15.x系だと書き方が変わっていたので、それに追従してみました。 やったこと vue-cliで構築 $vue init webpack-simple hello-simple vue-loaderを15系にバージョンアップ …

lambdaでSNSからS3イベントを取得する

最近Goを書き始め、LambdaをGoで動かすものを書き始めたので、メモ。 やること S3にオブジェクトが置かれたときに、SNSを経由してlambdaをキックする。 SNSTopic S3からオブジェクトが登録されたときのイベントを受け取るには、最低でもPutとCompleteMultiPa…

Androidのlibraryを作成していて発生するInnerClass annotations are missingの対処

問題 AndroidのLibraryを作っていると必ずといっていいほど、proguardをかけると思います。 ただライブラリを作ったときにinner classを作っているファイルをproguardのkeep対象にいれてjarを作成すると、 そのライブラリ使用時に下記のようなWarn文言が発生…

ScalikeJDBCのInsertで予約語を使う

今更ペルソナ5を始めました。 背景 MySQLのカラムに予約語を使う場合、バッククオートで以下のように囲むことが一般的です。 create table log(id int auto_increment, user_id int, from datetime, to datetime); insert into log(`user_id`, `from`, `to`)…

play2.4向けにi18n(国際化)をアップデートした話

概要 以前GlobalSettingの撲滅に関してブログを書きましたが、言語対応に関して書いていなかったので、続編ということでブログにまとめました。 yuutookun.hatenablog.com 概要 前提 根本対応 1.コントローラーをInjectionの形に移行 2.DefaultMessageAp…

技術力を高めるだけがエンジニアの生存戦略なのか?

以前からエンジニアの生存戦略というのはホウボウで語られている。*1 それぞれ色んなエンジニアとして生き方があるが、共通して皆が言っているのはどのポイントで尖るかということだ。 しかし、自分は「信頼」だと思っている。 エンジニアとして生き残る →職…

SprayからAkkaHTTPへ ~ライブラリのマイグレーション~

みなさんいかがお過ごしでしょうか? 最近NierAutomataクリアしました。 今回はSprayからAkkaHTTPへの移行に関して紹介します。 SprayとAkkaHTTPとは? SprayとはシンプルなScalaのHTTPフレームワーク(というよりモジュール)。すでに開発がストップしてお…

Scala用のコレクション操作の拡張ライブラリsansyo(山椒)を作りました

タイトルの通り、Scala用のコレクション操作の拡張ライブラリを作りました。 名前はsansyoです。 意味としては、 「山椒は小粒でもぴりりと辛い」 から来ていて、コレクションの拡張ライブラリのため、小さいですが便利になるものとして作りました。 ライブ…

Play2.4で非推奨のGlobalSettingをなくす

Play2.4で非推奨、かつPlay2.5ではなくなっているGlobalSettingの消し方を紹介します。 なかなか大変なので、ブログにまとめておきました。 Global.scalaで書いていたコード Play2.3で書いていたGlobal.scalaのコードを記載します。 object Global extends W…

fileを開いて指定行数分取得する

fileを開いて、指定行数の分だけ取得するというロジックを作成していたのですが、 そもそもinputが指定行数以上あるかどうかを知りたかったので、そこもうまく取得できるような実装にする必要がありました。BufferedReaderで最後の値が、nullになるので、nul…

Scalaの値クラスのバグ?

値クラスを使っていて不可解な挙動があったので、まとめたのとその対処法をメモしておきます。 値クラスとは 値クラスとはIntやStringが継承しているAnyValを継承させたクラスです。 一つの値しか持ちませんが拡張メソッドを実装できるため、DDDなどを実現す…

ServerlessConf Tokyoに参加してきました。

serverlessconfに参加してきました。 serverlessに関しての知見があまりなかったので、すごい有意義な勉強会となりました。 そもそもserverlessとは serverlessによって実現できること serverlessの思想 現状 そもそもserverlessとは パネルディスカッション…

spray-canで何故か同時に接続できずconnection reset by peerが発生する

sprayフレームワークを使っていると、HTTPリクエストの部分はspray-canを利用すると思います。しばらく、spray-canを使っていたのですが、いくつか重い処理を走らせるとCPUを使い切っていないのに、sprayがリクエストを受け付けなくなってしまい、502 BadGat…

最短でsbtのコマンドを追加する方法

sbtと打つとREPLが起動し、runしたりtestが走らせられたり色んな挙動をさせられる。しかし、自分でコマンドを作ろうと調べてみると、案外出てこない。ということで最短でコマンド作成を紹介します。 最短でHelloという文字を出力させる Helloという文字列を…

scalaNLPに含まれているライブラリを調べてみる

Scalaにもnumpy, scipyのような数値計算ライブラリがあります。ScalaNLPというレポジトリで登録されています。 github.comでは、どんなものがあるか調べてみます。 breeze Breezeは、数値計算ライブラリです。 numpyのようなもので、行列計算などを操作する…

scalaからProcessを使って違うディレクトリでshを叩く

scalaでは他の言語でもできるように、コマンドを叩くことができます。実際に色んな方が、Processの仕方を紹介をしています。 scala.sys.process | Scalaの標準ライブラリを使ってみる | mwSoft Scala 2.9.0のscala.sys.processパッケージが便利過ぎる件につ…

The server quit without updating PID fileが発生して起動できない。

YosemiteからEICapitanにアップデートしたんですが、 その際にMySQLが起動できなくなったので、その解決法を共有します。【環境】 MacOSX 10.11.2 $ mysql --version mysql Ver 14.14 Distrib 5.6.26, for osx10.10 (x86_64) using EditLine wrapper (brew…

新しいfirefoxのweb extensionsがChromeExtentionとの互換性そのままだった

今回、firefox dev conferenceに参加してきました。www.mozilla.jp そこで聞いてきた、webextensionsに関して試してみたので、ログっておきます。firefoxはアドオンの機能に関して、Chromeの拡張機能と同じ仕様を搭載することを発表しています。dev.mozilla.…