サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
journal.lampetty.net
O'ReillyのOnline Learning(旧O'Reilly Safari Books Online)は月額$49でオライリーの本や動画などが見放題になるエンジニア向けのサブスクを提供している。以前は英語の本しか読めなかったが、いつからか日本語の本も読めるようになっていたのでメモ。 www.oreilly.com Sign Inして、左のメニューのSettingsをクリックするとLanguage Preferencesがあるので、ここでJapaneseにチェックを入れて下のUpdate Preferencesをクリックして保存する。 これでHomeに行き、例えばGraphQLで検索すると検索結果の画面でBooksのタブがあるのでこれを選択する。そうするとLanguageの選択ができるので、ここでJapaneseを選ぶと日本語の本だけに絞ることができる。(手っ取り早く検索結果を表示し
よくある「開発スピードを優先させるか技術的負債をなるべく発生させないようにするか」という議論、ケースバイケースだとは思うけど、ことプロダクトの立ち上げ段階では、悩んだら「開発スピード」を優先させるようにするべきだと自分は思ってる。 理由は 市場は待ってくれないから。どんなにいいプロダクトでもユーザーに使われなくては意味がないのと、プロダクトを取り巻く外部の環境(競合プロダクトや市場でのニーズ)は自分ではコントロールできないものなのに対して、技術的負債については適切に管理されていればコントロールしながら返済できるから。もちろんバランスも重要だとは思うので、どんな技術的負債も生み出していいかと言われるとそうではないけど。 というわけで自分は「ああこれクソコードだけど機能は満たしてるからそのままリリースしたいなぁ」というのはだいたいクソコードのままリリースしています。(こうやって免罪符を作ってい
自分がソースコードを読む時によく使っているIntelliJのショートカット集。もちろんWebStormやAndroid StudioなどIntelliJシリーズなら全部使えるはず。他にもこんなのがあるよ、というのがあればコメントとかTwitterで教えてもらえると嬉しい。ちなみにショートカットのキーバインドはMac前提で書いてます。IntelliJのバージョンは2016.2。 F1: Quick Documentation キャレット上のシンボル(変数/関数)のドキュメントをポップアップで表示。自分は「これなんだろう?」って気になったらとりあえずF1押してる。 Opt + Space: Quick Definition Quick Documentationに加えて、キャレット上のシンボルのソースコードも含めて下記のようにポップアップで表示してくれる。 Cmd + P: Parameter
MySQL 5.6での機能強化点(その1) - パフォーマンスと使い勝手を大きく向上 | Think ITに書いてあるようにMySQL 5.6からオンラインでDDLを実行してもレコードのINSERT, UPDATEはできるようになったとあるので、これが本当なのか検証してみた。MySQLにおいてレコード数の多いテーブルに対するALTER TABLE文の発行は以前から問題視されていて、pt-online-schema-changeみたいなものを駆使するのが常套手段だった。 検証環境 ConoHa VPS 2GB Ubuntu 14.04 MySQL 5.6.17-0ubuntu0.14.04.1-log my.cnf データはWikipediaのダンプデータのenwiki-20140502-redirect.sql.gz というテーブルを使用。テーブル定義はこんな感じ。 CREATE TABL
はじめに GoでHTTP Serverを作ろうとすると、標準ライブラリを使う場合以下のようなコードをよく書くと思う。 package main import ( "fmt" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/hello", http.HandlerFunc(hello)) log.Fatal(http.ListenAndServe(":8080", mux)) } func hello(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "Hello World") } このコードの登場人物としては以下になるが、それぞれなんだっけ?というのをいっつも忘れてしまうの
なんか秘伝のタレみたいになってきたので後世のために共有。 前提 Webアプリケーションを想定 TomcatなりJettyなりがListenするポートは外部からはアクセスできない ※-Xms -Xmx -Xmn あたりは搭載しているメモリ容量によって変える、-XX:MaxPermSize -XX:PermSizeは384mあれば十分だと思うけどロードするクラスの数次第なので要調整。 NOW=`date "+%Y%m%d-%H%M%S"` JAVA_OPTS="-server -Xms2g -Xmx2g -Xmn1g -XX:MaxPermSize=384m -XX:PermSize=384m \ -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=85 -XX:MaxTenuringThreshold=32 \ Javaプログラマーなら習得しておきたい J
これはGo Advent Calendar 2016の18日目の記事です。今回はGoでE2Eテストを行うためのライブラリagoutiについて書きます。 GoでE2Eテストを書く理由 WebアプリケーションのサーバーサイドをGoで書いている場合、GoでE2Eテストを書くメリットとして JavaScriptが得意ではないエンジニア(自分)でもE2Eテストがガリガリかける E2Eテスト実行時のカバレッジが取れる=サーバーのコードのどこを通ったかがわかる があると思っている。特に2番めの理由が大事で、「E2Eテストを全部回した結果、サーバーのこの部分のコードは通っている」とわかるのはけっこう大きなメリットなのではないかと。どこがテストされている・いないを把握することで、「ここはE2Eテストだと難しいからユニットテストでカバーしよう」というような戦法が取りやすいと思う。 じゃあ具体的にGoでどうやっ
JavaにはMavenっていう依存ライブラリの管理を行えるすごい便利なツールがあるんだ。RubyでいうところのRubyGems みたいなもんだよ。でもさぁ、RubyGems みたいに自分で作ったライブラリを簡単にアップロードするサーバがないんだよ。えっ、Nexus入れろって?そんなのイチイチ用意してらんないよね。えっ、WebDAV?ムリムリー。本当Javaってなんでもかんでも面倒くさいよね。 そんなあなたに朗報。GitHubリポジトリに特別なブランチを作ってMavenの設定をするだけで、GitHubリポジトリをMavenリポジトリにすることができるんだ。GitHubって本当に開発者に優しいサービスだよねー(-д☆)キラッ ※4/3追記:【最新版】Maven Central Repository へのライブラリ登録方法 #mavenに詳しくまとまっているんだけど、Maven Centralリ
最近趣味プログラムのサーバサイドをNode.jsで書いてるんだけど、JavaScriptはどうも好きになれないので逃避先としてTypeScriptを選んでみた。CoffeeScriptでもいいんだけど、文法が似てるほうがソースコピペできたりして楽かなと思ってTypeScriptを選択。 今回使うツールはMac版のIntelliJ IDEAのv13。 必要なプラグインをインストール 以下のプラグインをインストールしておく。 NodeJS File Watchers IntelliJの設定 npm install -g typescriptしておく 適当にプロジェクトを作る File -> Settingsで Node.js and NPMの設定を開き、Node interpreterの設定をしておく。自分はnodebrewを使っていて、/usr/local/nodebrew/current/
結論から言うと下記が最もスマートでモダンな書き方っぽい。 with open('/tmp/test.txt') as f: for line in f: print line 下記はファイルの中味が全部メモリに乗っちゃうから危険。 f = open('/tmp/test.txt') for line in f.readlines(): print line f.close() まとめ(イテレータ) for line in f: print line という書き方ができるのはfileが__iter__()とnext()を実装しているおかげ。詳しくはPEP-234に詳しく書いてある。 みんなのPython 第3版 作者: 柴田淳 出版社/メーカー: ソフトバンククリエイティブ 発売日: 2012/08/29 メディア: 単行本 購入: 1人 クリック: 13回 この商品を含むブログ (39件)
新年明けましておめでとうございます。2014年内に書き上げるはずの記事がずっと下書きのまま眠ってしまっていた... 2014年は細かいものを含めるといろいろ新しいものを使い始めたのでそのまとめ。 Ansible Chefがあまり好きではないのでAnsibleを今やっているプロジェクトで入れてみた。 DSLを覚えなくてはいけないのはどちらも一緒 Ansibleの方が仕組みがシンプルでPlaybookに書いた順に実行されるのでわかりやすい Dynamic Inventory便利 AnsibleはYAMLなのでロジックをゴリゴリ書くのには向いていない Chefはその点Rubyのコードなのでなんでもできる という感じでどっちもどっちだなという印象。個人的にはChefのようにコードが実行される方がフレキシブルでいいと思っているので、Fabric + Cuisineも試してみたい。 Packer Va
最近少しずつJupyter Notebookやpandas, matplotlibに慣れてきて、PythonによるData Scienceが面白くなってきたと感じてます。今日はMySQLのデータをSQLで持ってきて、Jupyter Notebook上でグラフにしてみる話。 セットアップ Python3はインストールされていることを前提。jupyterなどの必要なソフトウェアを入れる環境を作って、pip でインストールする。 python3 -m venv jupyter source jupyter/bin/activate pip install jupyter pandas matplotlib pymysql インストールが成功したら、こんな感じでJupyter Notebookを立ち上げる。 ./jupyter/bin/jupyter notebook 立ち上がったらブラウザから適
ついカッとなってnodebrewのFormulaを週末に作ってしまった。後悔はしていない。勢いで作ったので2回ほどプルリクのレビューにひっかかってしまった。ドキュメント嫁的な指摘もあったりしてションボリしつつ、でもこれで nvm 使わなくなれるのでちょっと嬉しい。 Formula作る人向けのドキュメント 公式ドキュメントが充実しているので、下記の3ページを読んでからプルリク送ると良さげ。 Formula Cookbook Acceptable Formulae Ruby · Styleguide nodebrewのFormulaを作るまでの過程 /usr/local/Library/Formula/nodebrew.rb を作る 他のを適当にコピーしても良いけど、たぶん brew create <name> のように作るのが正しい。 他のFormulaを参考にhomepage, url,
GWになったので、ずーーーっとやりたいと思っていた、ターミナル環境の見直しをしてる。oh-my-zshとか使ってなかったし、tmuxも最近は使ってなくて時代からかなり乗り遅れ気味なのがずっと気になってた。ちなみに見直す前の環境はざっくり言うと以下。 作業環境はMac + iTerm zsh使ってるがoh-my-zshは使ってない tmuxは最近は使ってなかった。iTermのタブでそんなに不自由してなかったので。 vim教信者ではない dotfileはbitbucketのプライベートリポジトリで管理していて、symlink張って有効にしている(ln -s /path/to/dotfiles/.zshrc ~/.zshrc みたいな感じ) スクリーンショットはこんな感じで、右側にgitのブランチとカレントディレクトリを表示してる prezto これはoh-my-zshの軽量版らしい。oh-my
いわゆる退職エントリーというヤツです。表題の通りで、10月をもって4年3ヶ月勤めたメルカリ/メルペイを退職します。思い返せば、退職エントリーというものをブログに書くのは初めてです。少し緊張してます。 だれ? oinume です。Goが好きなBackend engineerです。 何をやっていたのか? 2016年5月に入社してからやってきたことを書き出すと以下のような感じです。メルカリ→ソウゾウ→メルペイと、気付いたらチームごと会社を異動しており、様々なプロジェクトに携わりました。一つの会社の中でこれだけたくさんのことをやったのは初めてで、様々な経験を積ませてもらい、とても刺激的でした。 ID Platform Teamでメルカリや周辺サービスのアカウントの統合 @メルカリ この記事でID Platform Teamについて詳しく説明されている メルカリ月イチ払い(現メルペイスマート払い)の
これはなに? 入社エントリー&会社紹介です。表題の通りで、10月をもってメルカリ/メルペイを退職し、11月からドクターズプライムという会社で働いています。 なにやってるの? Backend Engineerとして、救急車のたらい回しをなくすためのプロダクトを開発しています。救急車のたらい回しが発生する理由としては以下のスライドに書いてある通りなのですが、これを解決するのがDr.'s Primeという医師の採用サービスになります。 自分も子供を持つ親なので何度か病院のお世話になったことはあるし、子供が救急車で運ばれて手術&入院したこともあるので、救急医療に関しては一当事者として良くしていきたいという思いがありました。ドクターズプライムは救急車の搬送を断らないための仕組みを採用サービスとして第三者の立場から提供していて、素直にいいソリューションだなと思っています。 入社の経緯 今年に入ってから
よく rvm や rbenv を使ってMacに複数バージョンのrubyをインストールする例を見るんですが、「それhomebrewでもできるよ」って思ったのでメモ。 とりあえず最新版を入れる場合 2012/7/27時点ではruby-1.9.3-p194がインストールされるみたいです。 $ brew install ruby $ export PATH=/usr/local/bin:$PATH $ ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) 別のバージョンのrubyをインストールする 続いて一つ前のバージョンを入れるために、利用可能なrubyのバージョン一覧を表示。 $ brew versions ruby 1.9.2-p290 git checkout 1f32fa4 /opt/local/Library/Formula/ruby.r
Go1.17beta1がダウンロードできるようになったので、Generics(Type Parameters)でStackを書いて軽く遊んだメモ。 Generics (Type Parameters)について 最新の仕様のProposalは以下を見ると良い。 実際にどんな感じのコードになるのかは、GitHubのdev.typeparams branchのコードを見ると良さそう。 Go1.17beta1のダウンロード 普段使っているgoコマンドから以下のようにGo1.17beta1をダウンロードできる。 $ go get golang.org/dl/go1.17beta1 $ go1.17beta1 download これで ~/sdk/go1.17beta1 にインストールされる。 FYI: Goは標準の機能で複数のバージョンをインストールできる。より詳しくは以下のドキュメントを読むと良い
Auroraの検討を導入していることもあり、11/10のAmazon RDS for Aurora 東京ローンチ記念セミナーに行ってきたのでそのメモ書きと感想。 Debanjan Saha, GM, Amazon Aurora Auroraチームの人。AuroraはAWS史上最速で成長しているサービスと言っていた。 エンタープライズ顧客の要望リスト 専門家部隊がいなくても運用・管理できる ライセンス管理しなくてもいい MySQL互換のリレーショナル・データベース 商用DB並のパフォーマンスと可用性 OSS DBの使いやすさとコスト効果 3箇所のデータセンターに6つの複製を保持 30秒以内でフェールオーバー 50万 Read IOPS 10万 Write IOPS 64TB Storage - DBに最適化したストレージ Aurora使っている会社 Expedia GE Oil & Gas
やりたいこと Redisをセッションデータの保存先にしたい Beakerって? 様々なデータストアにセッションデータを保存するWSGI Middleware。WSGIレイヤーなのでFlask以外のWAF(bottleとか)でも使えるはず。 必要なもの Python 2.6+ (自分はPython 3.3.4で動かしてる) Flask Beaker beaker_extensions - beakerだけだとRedisには対応してないためこれが必要 redis-py Redis サンプルコード gist9811874 動かす $ pip install beaker flask redis git+git://github.com/bbangert/beaker_extensions.git $ python beaker_sample.py http://localhost:5000/ に
hogeテーブルをhoge_20081123というテーブルにコピーする方法。 /* hogeテーブルのスキーマをコピーしてテーブル作成 */ > CREATE TABLE hoge_20081123 LIKE hoge; /* hogeテーブルのデータをINSERT */ > INSERT INTO hoge_20081123 SELECT * FROM hoge; たまにしかやらないのですが、いっつも忘れているのでメモ。 実践ハイパフォーマンスMySQL 第3版 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自(監訳),株式会社クイープ 出版社/メーカー: オライリージャパン 発売日: 2013/11/25 メディア: 大型本 この商品を含むブログ (6件) を見る
English version JVMでGCのログ出すじゃないですか。んで、その時↓みたいに -XX:+PrintGCTimeStamps っていうオプションを指定するじゃないですか。 TODAY=`date "+%Y%m%d-%H%M%S"` JAVA_OPTS="-server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=256m -XX:MaxPermSize=256m \ -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseParNewGC \ -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=32 -XX:TargetSurvivorRatio=85 \ -verbose:gc -Xloggc:/usr/local/tomcat/lo
TL;DR Apple Silicon(M1) Docker Desktop for Macでgoogle/cloud-sdkのDocker Imageを使ってコンテナ内でCloud Datastore Emulatorを立ち上げると、CPUが100%で張り付いてハングするという問題があった。 解決方法として、該当のDocker Imageをarm64v8アーキテクチャでビルドして、そのイメージでコンテナを立ち上げるようにしたら問題は起きなくなったので、その方法の紹介 問題の詳細 Apple Silicon版のDocker Desktop for MacはRosetta2を使いインテルアーキテクチャ(amd64 / x86_64)をエミュレーションして実行されている。エミュレーションが行われているため、ネイティブでarm64v8のコンテナを実行するよりCPUを使ってしまうという問題がある。
MySQLのデータベースをバックアップする際にmysqldumpを使用しますが、個人的に「これはつけたらよさそう」と思っているオプションを紹介します。 --opt --quick --add-drop-table --add-locks --extended-insert --lock-tables を指定するのと同じです。ダンプしたデータをMySQL サーバに読み込むための最速ダンプを提供します。(マニュアルそのまんま) --single-transaction ダンプする際に先頭にBEGINをつけるため、ダンプ時のデータのトランザクションの一貫性を保つことができます。ただしInnoDBなどのトランザクションが有効なストレージエンジンではないと意味がないです。 --flush-logs ダンプを開始する前に、MySQL サーバ内のログファイルをフラッシュします。バイナリログを保存するよう
はじめに みなさんこんにちは。これはGo5 Advent Calendar 2019の19日目の記事です。この記事はOpenCensusとhttptrace.ClientTraceを使ってHTTPリクエストの内部的なlatencyを可視化する話です。「内部的なlatency」というのは、HTTPリクエストの中で名前解決にどのぐらいかかったとか、コネクションを張るのにどのぐらいかかったなどです。 なお、この記事に記載しているコードは全てGitHub repositoryに上げてあります。 やりたいこと とあるアプリケーションでHTTP Clientを使ってHTTPリクエストを大量に送る処理がありました。そのサーバーはUS Regionで動いていて、そこからHTTPリクエストを日本にあるサーバーに送るというもので、この処理のlatencyが非常に気になっていました。そのため、HTTPリクエスト
社内でGo勉強会をやったのでその時に自分が発表した時の内容。オブジェクト指向的なことをGoでどう実現するのか、どの辺を諦めなくてはいけないのかをまとめてみた。 Goでのオブジェクト指向 Goでは基本的にオブジェクト指向プログラミングはできないと思ったほうが良い。できるのはstructを定義して関数を追加していくことだけである。 http://play.golang.org/p/7w9nbHDec1 package main import "fmt" type User struct { Id int Name string } // 文字列化する関数 func (u *User) String() string { return fmt.Sprintf("%d:%s", u.Id, u.Name) } func main() { var user *User = &User{1, "oin
SSDの寿命が本当に短いのか実験していないので何とも言えませんが、Ubuntu LinuxでSSDの寿命を延ばすために行なった設定を書いておきます。本当に延びるかは謎です。 swap領域をSSD内に作らない swap領域をSSDに作ってしまうと、仮想メモリを割り当てる際にSSDに書き込みをしてしまうのでこれは避けましょう。また、/etc/sysctl.conf に以下を追記してOSごと再起動します。(再起動の代わりに sysctl -p で即時に反映することもできます) vm.swappiness = 0 この設定をするとswapにページアウトしにくくなります。 OSのキャッシュの書き込みの頻度調整 Ubuntuはデフォルトでは書き込み処理はすべてメモリ上にキャッシュされ、これを5秒に1回ディスクに書き込むという仕組みになっているらしいです。なので、このキャッシュを書き込む頻度を5秒から1
すごい久々にtomahawkを更新した。(0.6.0-rc1) インストール まだ正式リリース版ではなくpypiには上げていないため、GitHubから直接インストールする感じで。 $ pip install https://github.com/oinume/tomahawk/zipball/0.6.0-rc1 新機能 -V/--verify-output リモートホストで実行したコマンドの出力が全てのホストで同じかどうかを検証するオプション。「なんか1台だけ設定が違くね?」みたいなのが簡単に検証できる。 例えば以下は host1 と host2 の ulimit -a の結果が同一であるかを検証する。 $ tomahawk -V -h host1,host2 'ulimit -a' host1とhost2のnginx.confが同一であることを検証したいのであれば、cat するか md5
以前[permalink id=499]ruby-lintでRubyのソースを静的チェック[/permalink]で紹介したように、ruby-lintを使えばRubyのソースを静的にチェックすることができるので、これを使ってRubyのソースを保存するときにflymakeするEmacsの設定を書いてみた。(前提として、ruby-lintをインストールしておく必要がある。"gem install ruby-lint"でOK) (defun flymake-ruby-init () (let* *1 (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "ruby-lint" (list local-file)))) (defconst flymake-allowed-r
次のページ
このページを最初にブックマークしてみませんか?
『oinume journal』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く