サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
blog.wnotes.net
gRPC、あるいはGraphQL 昨今のAPI開発にgRPC、またはGraphQLを採用するケースは増えてきていて、ドメインロジックをgRPCで実装して、フロントエンド(BFF)はGraphQL経由のHTTP一本で取得するのはベストプラクティスの一つだと思っています。 とはいえ人的リソースや管理の問題から、ProtobufとGraphQLスキーマを両方メンテナンスしていくのはとてもつらくて、 他のエントリでも結果としてどちらかに寄せました、というケースをよく目にしました。 実際自分もやってはみたものの、両方のメンテナンスをしていくのは相当辛くて、Protobufを直してgRPCのI/Fを変更、合わせてGraphQLのSchemaにも手を入れてフロントに渡して…というのは管理コストに見合わないな、ってことで諦めました(今は grpc/grpc-web 、または grpc-ecosystem/
諸々を音声通知する 集中したいけどついついSlackを見ちゃったり、スケジュールやメールを見るのにアプリを切り替えたり、Notificationに目が行ったり…というコンテキストスイッチを極力省くため、これらを全部音声で通知する仕組みを作って運用し始めてみた。 Voiceroid せっかく喋らせるんだし耳障りの良い声がいいなーってことでVoiceroidを導入した。選んだのはVoiceroid+ EX 結月ゆかり。 結月ゆかり|製品情報|AHS(AH-Software) とはいえ開発機はmacで、VoiceroidはWindowsでしか動かないので、VPSのWindows Serverを借りてそこにインストールして使っている。 もちろんWeb APIなどは用意されていないので、HTTPSのサーバを立てて、VoiceroidアプリをWin32 APIを使って操作して音声ファイルを動的に生成、
2019/07/04に kustomize の v3.0.0 がリリースされ、それまで暗黙の仕組みっぽかったプラグイン機構がオフィシャルになった。 …と言っても大きくアナウンスされているような節はなく、ドキュメントについても、 https://github.com/kubernetes-sigs/kustomize/tree/master/docs/plugins このページのみで、また他に自作する方法のエントリが見当たらなかったので書く。なおこのエントリはやや社内向けでもある。 宣言的なmanifest管理 kubernetesのmanifestを管理する機構として、代表的なものは helm か kustomize だと思う。以前はプロジェクトで helm を使っていたけど、 base に記述した設定を overlay で差分パッチを当てつつmanifestを生成する手法はいいな、という
LuaでもWebAssemblyがしたかった(した) そろそろWebAssemblyやっていくぞと思って手を付け始めたんですが、もう既に色んな言語からwasmにコンパイルできるようになってるんですね。 Goがwasm対応したと聞いたのでGoでやろうと思っていたんですが、なぜかLuaでやり始めました。 作ったのはこちら。まだPoCで全然機能はないけど、Hello Worldはできました: ysugimoto/webassembly-lua なお、既に参考実装にwasm_luaというのがあるんですが、これは入力したLua Scriptをwasm上で実行して結果を得る、というもので、これだと自分で書いたスクリプトをwasmにするのとはちょっと違うなーってことで、参考にしつつイチから作りました。 Lua -> C -> emscripten やってることはほぼ同じで、バンドル対象のLuaファイルの
Cloudflare Worker使ってみた リリースを見た時「あーすごいなーこの発想」と思って、これは使ってみなきゃということでやってみた。 Cloudflare Workerとは Cloudflare CDNのエッジで動作させるWorkerプログラムで、面白いのはService Worker、つまりJavaScriptで書けること。 そもそもService Worker自体がブラウザのリクエスト・レスポンスをフックして処理するものなので、リクエストとレスポンスが対になるならEdgeサーバで使おうぜっていう発想がすごい。 詳しくは他の人も書いてるのでそっちを参照のこと。 AWS LambdaのGatewayとして使ってみる WorkerをGatewayとして、AWSのLambda Functionをコールしてその出力をレスポンスとして返すGatewayを作ってみた。 Lambdaを使う機
手軽にServer Sideのベンチマークを可視化していく Chrome65からServer Timing APIのサポートが入ったので手軽にサーバサイドのベンチマークをDevToolから可視化できるようになった。 Server Timingの仕様は下記: Server Timing で、nodeのHTTP(HTTPS)モジュール、またはexpressから手軽に使えるnpmを作って公開している。 ysugimoto/server-timing-benchmark 詳しい使い方はREADMEに書いたけど、リクエスト単位で手軽にベンチマークを行える。下記はexpressのサンプル: const express = require('express'); const serverTimingBenchmark = require('server-timing-benchmark'); const
ついにサポートされた(嬉しい) 急にリリースされたようなので早速使ってみた。 Hello, Lambda Go ドキュメントにもあるように、公式のSDKが配布されているので、それをimportして使えばいい。 package main import ( "fmt" "context" "github.com/aws/aws-lambda-go/lambda" ) func HelloWorld(ctx context.Context) (stringundefined error) { return "Helloundefined Lambda Go!"undefined nil } func main() { lambda.Start(HelloWorld) } これだけ。後はバイナリを生成してアップロードすればinvokeしてくれるんだけど、ちょっとだけ注意点が。 ハンドラ名とバイナリ
S3のオブジェクトを毎回ブラウザでマネジメントコンソールにログインしてS3選んで…ってやるのが面倒になってきたので、ターミナルからドリルダウンで検索してダウンロードできるツール作った。 How it works 操作しているのを見てもらうのが早いと思う。 結構サクサク動いていい感じ。 termbox-go 見ての通りtermbox-goを使ってる。 一番最初はpecoを使ってたんだけど、一度選択する度にtermboxが終了して画面が切り替わるのが嫌で、termbox-goの勉強も兼ねてドリルダウンしたりFilter Queryしたりするのを自分で実装した。(補足:もちろんpecoはシンプルに選択するツールなので今回の用途に合わなかっただけです) あんまりこういうターミナルアプリケーションを作る機会がなかったのでいい経験になったし実務でも役に立っている。 ちなみに未リファクタリングなのでコー
最近ちょっと大きめのサービスをリニューアルしたんですが、リリース当初はエラーログとか張り付いて監視してました。 数台分散しているサーバに逐一ログインしてログファイルをtail -fしたりするのがもう面倒で、それを解決するためにツールを作りました。 各インスタンスからのログを集約してリアルタイムにブラウザで閲覧する 初めの着想はDockerコンテナの話でした。Docker内に吐かれるログを見るのに、インスタンスにログインして、docker execしてtailするとか、 ログファイルをホストにマウントして、それをtailするとかあると思いますが、そもそも分散している台数分確認するのが面倒で。 かつ各コンテナはネットワーク的に閉じているので、コンテナ側から送信して、それを集約して確認するツールにしました。こちらです: ysugimoto/tailor releaseにビルド済みのバイナリを置い
最近はPHPでステートレスなアプリばかり書いてたので、今更感はありますが息抜きに時間を見つけて書いてみました。参考にしたのは当たり前だけどRFC6455です。これを満たすように実装してみました。 GolangにはすでにWebSocketのパッケージがあるのでそれ使うのがいいです。が、今回は勉強ってことで、httpは使わず生のnetとcrypto/tlsパッケージを使う縛りで、handshakeから実際にコネクションを張ってメッセージフレームをやり取りしたりbroadcastするところまでやりました。 仕様的にGETっぽいリクエストしか処理しないし、計測はしてないけどそのままTCPでやった方がパフォーマンス出るんじゃないかと。あとgoroutineとchannelでの非同期周りをちゃんとやりたかった。作ったのはこちらです。 https://github.com/ysugimoto/aun 接
ffmpegを使った機能を実装していて、ようやっと完成させてほっとしたと思いきやhttp://jvn.jp/vu/JVNVU92302510/に報告が。 旧バージョンのffmpegにも脆弱性があるようで、これはマズイですね、と対策方法を見ると、 _人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人_ > 開発者が提供する情報をもとに、最新版へアップデートしてください <  ̄YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ̄ つらい。 というわけで、最新版(githubで2.8.5)をインストールする必要があるとのこと。ということは当然ソースからインストールする必要があるわけで…ご存知の通りめっちゃめんどくさいですよね。なので、 以前の記事 で書いたような、yumで入れた時と同じようなコンパイルオプションでビルドできるように頑張っ
お世話になったお礼に ここ最近ちょろちょろを小さな勉強会で話をさせて頂く機会があり、かといってスライドに時間を割けなかったので、 サクッとHTMLでスライドを作るのに @ahomu氏のTalkieを使わせてもらっていました。 ahomu / Talkie これほんと便利。さっくりいい感じにスライドが作れる。しかもVimで。 でも、PDFでSlideShareにアップしたりするのにPDF化するツールがなかったようなので(以前はあったらしい)、何か貢献できたらなーってことで思いついてから一日でさっくり作った。あとElectron使ってみたかったのもある。できたのがこちら。 ysugimoto / resumify npmでインストールして、スライドのあるディレクトリ、またはどっかにアップしてるスライドのURLを指定してコマンド実行すると、Electronが起動してパシャパシャとスクリーンショッ
EC2上でffmpegを動かす時の注意点 社内の開発で最近流行りの動画を扱う機能を実装していたんですが、EC2インスタンス内で稼働しているDocker Container内でffmpegを使うと、結構な確率でプロセスが強制終了する問題に遭遇しました。 (さらに、一度終了するとメモリリークするのかどんどん失敗頻度があがるっぽい) m4.largeのスペックでも起きるし、最初はパラメータの問題かffmpegの問題だと踏んでかなり時間をかけて調べてたんですが、的外れでした。何の事はない、OOM-KIllerにやられてたのでした。 tail -f /var/log/messages ... Memory cgroup out of memory: Kill process 11587 (ffmpeg) score 136 or sacrifice child Killed process 1158
リサイズとか減色とかも自動でやりたい人向け このご時世のフロントエンドエンジニアという肩書きを持ってる方々におかれましては、画像の減色とか最適化はタスクのうちの1つだと思いますが、 それって自身の管理下にある静的な画像リソースに限られてしまいますよね(背景画像とか、CSSスプライト用の画像とか)。 例えばユーザーの投稿した画像は管理外になってしまうし(VCS管理下に置かれない)、リサイズするスクリプト書いたりするのも面倒でした。 (そもそもユーザ画像を減色するのはどうなのってこともありますが、必要なケースもままあるかと) ということで、AWS Lambdaを使って、S3に上がった画像を自動的にリサイズ、最適化して戻してくれるスクリプト書きました。 ysugimoto/aws-lambda-image 動作としては、 S3に上げる →Lambdaでイベント検知、処理実行 →S3に戻す という
export default function selectCase(tmp) { switch ( tmp ) { case 1: return "This is one"; default: throw new Error("Unexpected value"); } } import assert from "power-assert"; import selectCase from "./lib.js"; describe("selectCase testing"undefined () => { it ("expect This is one"undefined () => { assert(selectCase("1") === "This is one"); }); it ("Throws error"undefined () => { assert.throws(() =>
とてもお世話になったし、これからも PHPで日本語メールを送信したり、ファイル添付したりするのって結構ハードルが高いし面倒なのでライブラリを使うことがほとんどだと思います。 多分日本語周りで一番良く出来ているのはqdmailじゃないかなって個人的には思っています。 以前は大変お世話になったライブラリです。 今ではSwiftMailerとか使ったり自作のやつで送信したりしてますが、ささっとメール送信を実装するのにうってつけ。ファイル置いてincludeして関数コールするだけ。 便利、なのですが。 PHPのバージョンアップへの追従 spokさんのサイトではもう更新はおそらくされていないであろう感じだったので、PHP5.5対応させてGistにあげておきました。 Gist - ysugimoto/qdmail.php よろしければどうぞ。 と、思ったんですが Githubを検索したら開発を引き継い
車輪の再発明 Golangで何か作りたいって思ってたので作りました。 実は他に作りたいものがあって、それを実現するためのツールの一つという位置付けです。 とはいえ、ここちゃんと作らないと上に載せるのが辛くなるので結構頑張った。と思います。 リポジトリはこちら: https://github.com/ysugimoto/gssp 使い方とかはREADMEを見てください。 これは何 CSSのポストプロセッサです。ポストプロセッサといえばnodeのpostcssが有名ですね。 autoPrefixerの内部で使ってるアレです。中身はほとんど一緒で、それをただGolangで再実装しただけです。 ちなみにpostcssのコードは全く見ずにノリで書いてます。が、テストケースだけ使わせてもらいました。なんなのこのいやらしいCSSのシンタックス…。 使い方とか READMEの通りなんですが、go getし
MQTT始めました リアルタイムWebという言葉をたまに聞きますが、WebSocketから始まり、WebRTCもやったし、次はMQTTやろうと思ったので、環境構築と簡単な動作メモを残します。 MQTTって何? 他のエントリで詳しく書かれているので、そちらを参照してください。↓のリンクは大体の人が見てると思います。 MQTTについてのまとめ -そこはかとなく書くよん。 以前WebRTCの発表をした時にもワードは観測していたのですが、ここ最近良く聞く用になってきたし、モバイル向けの配信基盤として有用なんじゃないかなって思います。 今回は、MQTTブローカーとしてRabbitMQ、Publish/SubscribeクライアントとしてPahoのgolangクライアントを使いました。 Rabbit MQ Paho PahoはGolang以外にもJavaScriptやPython、C++もあるので、色
gulp+TypeScript+browserify+mochaの開発環境を作る ここ最近はずっと静的型付言語ばかり触っていて、ちょっとJavaScriptを書こうと思った時にもやっぱり型システムほしいなーってことで、TypeScriptを始めたメモです。最近のフロントエンド関連のはやりはあんまりよくわかってないですはい。 インストール npmから入る。 tscコマンドが有効になる。 複数ファイル・モジュールとimport関連でハマる ちゃんと理解してないまま使ったのもいけないけど、モジュールとimport周りで相当ハマりました。 これさえやれば大丈夫! TypeScriptのImportが取っ付きにくい人向け -Qiita TypeScriptのimport指定方法 -Qiita TypeScriptでState Monadを実装する -Qiita だいたいこの辺見てました。なお、今回は
iOS用に提供する方法はCocoapodsとかがありますが、もっとニッチな機能やSDK関連はFrameworkの形で提供したいなって思って調べてたのでメモ程度に。 Xcode 6ではFrameworkが作りやすくなってた ググると分かるんですが、Xcode 5まではFrameworkを作ろうとすると、「Cocoa Touch Static Library」のプロジェクトを作り、Info.plistを作って、ビルド用のシェルを書いて…ってエントリがヒットするんですけど、Xcode 6からはその名もずばり、「Cocoa Touch Framework」というプロジェクトが作れるようになってました。 試しにSampleFrameworkという名前でプロジェクトを作成してみると、以下のようなファイル構造が出来上がります。 Info.plistもあって、Xcode 5でやってた作業がすでにできている
XMLHttpRequest Level 2 + CORSで通信する時のメモ おぼろげながら知識はあったんですが、今回ちょっと詰まってしまって、実際に自分で設定してみて上手く行ったのをメモとして残しておきます。 はじめに XMLHtteRequest Level 2(以下、XHR)では外部ドメインへのリクエストが可能なのですが、そのリソースはCORS(Cross Origin Resource Sharing)の制限を受けてしまいます(IE8とかだとXDomainRequest使いますね)。 この時、リクエストを受けるサーバ側では、CORSのリクエストを許可するヘッダと共にレスポンスを返す必要があります。 また、GETリクエスト以外、かつMimeTypeがtext/plain以外の場合はプリフライトなリクエストが送られ、先に安全な通信が可能かどうかをブラウザがチェックするようです。 このあ
はじめに このエントリはFrontrend Advent Calendar 2014の21日目のエントリです。 あまりいいネタが思いつかなかったので、こつこつ作ってたものを発表するという感じで( ˘ω˘) 情報収集と永続化を一元化したかった そもそものきっかけはFrontrend in Kanazawaに参加した時の@Layzieさんの発表なのですが、毎日大量の情報が流れてくる中で、それらをどのように収集して、蓄積していくかは自分の課題でした。 そんな中で聞いたこのセッションはとても刺さるものがあり、「あ、これ早いうちになんとかしないとマズイな」ってなった次第です。とてもおもしろいセッションなので、スライドを共有しておきますね(許可いただきました) スライドの中でははてブ、Pinboard、Feedlyなんかを使われているようで。複数サービスの合わせ技という感じですね。 同じことしてても先
またまた勉強成果の報告的なものです。 PHPでAnimated GIFをどう扱うか ご存知の通り、PHPにバンドルされるGDライブラリでは、アニメーションGIFが扱えません。 じゃあ何とかしないとなーということで、そろそろバイナリに対して拒否反応を示さないように、ここらでしっかり触れておくことにしました。「ImageMagickを使えばいいじゃん」と言ってしまえばそれまでなんですが…。 できあがったものがこちらです 以下のgithubをお試しください。ソースコード中にも仕様についていくつか書いてあるので、そっちの方が早いかもしれません。 ysugimoto/GifManipulator GIFの仕様とハマった所についても少し触れておきます。仕様書は以下のリンクにあります。 GIF89a Specification GIFのフォーマットについて GIFイメージファイルは、 開始部(Heade
触ってみた感触 とても良いです( ˘ω˘)まだ日本語のエントリあんまりないので書いてみます。 [2015/05/20追記] v1.0がリリースされてちょくちょく見てくださってる方がいるようなのですが、本エントリのRustのバージョンは0.9(だと記憶しています)です。もしかしたら言語仕様が変わってる可能性もありますのでご了承くださいませ。 あとコメント頂いた部分を修正しました。ありがとうございます。 Rust言語とは Rust は実験的な並列かつマルチパラダイムのプログラミング言語である。モジラによって開発中である[3]。純関数型プログラミング、並列アクターモデル、手続き型プログラミング、オブジェクト指向プログラミングをサポートする実用的な言語を目指し開発中である。 Rust(プログラミング言語)より ということで、Mozillaが開発している言語です。シンタックスはほぼC++な感じですが
遊びだけどそれなりに Cocos2d-xの勉強をちまちまやってて何か一つアプリ作ってみないとなーって思っていたんですが、ちょうど友人と旅行に行く機会があったので、そこで使えるお遊びアプリを作ってみようということに。 作ったもの 旅行先で飲んだビールの量をカウントし、それを経験値としてレベルアップしていく、というクズ御用達のアプリです。 アイコンとスプラッシュ画像は一緒に行く方に作ってもらいました(*´∀`*)画面はこんな感じです _人人人人人人人人人人人人_ > にじみ出る糞アプリ臭 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄ 技術選定的な ネイティブアプリ側はCocos2d-xでやるのは決めてたんですが、サーバーサイドどうしようかなーって思ってました。 いつもどおりならPHPで作ってしまうところですが、せっかくなのでこれまたちまちまやってたGoで作ろうかなと。 さらにリアルタイム
DockerのGUIが出たと聞いて DockerのGUIとかそろそろ出そうだなーって思ってたら来たので早速使ってみました。 Panamaxの公式サイトはこちらです。 Panamax: Docker Management for Humans githubにもプロジェクトありました。 Github: CenturyLinkLabs 今回は導入編ってことで、インストールと設置から、WordPressの稼働までやってみます。 環境はMax OSX 10.8です。 Panamaxとは CoreOS上で動作させて、複数のDockerコンテナのオーケストリゼーションなんかをGUI上からクリック操作でマネージメントできるツールだそうで。 最近ちまちまDockerfile作ったりしてましたけど、こういうの出ちゃうと、簡単なものはこれでいいんじゃないか感ありますね。 Panamaxでは複数のDockerコン
Dockerの勉強ついでに あんまりDB・ストレージ系の性能を気にしたことが無くて(気にしないといけないんですが)、 VoltDBがインメモリで速いらしい、ということで性能を試したくなりました。(本当はriakを試すつもりだったんですが、興味がコロコロと…) が、今回はインストールからバンドルされてるサンプルプロジェクトを動かすまでのメモです。 せっかくなのでDockerコンテナ上のUbuntuに入れて動かしてみます。どちらかというとDockerのメモがメインです。 Volt DBとは VoltDBはIngresやPostgreSQLに携わったマイケル・ストーンブレーカーにより設計されたインメモリデータベースである。 - WikiPediaより引用 ということで、Postgresの開発に関わってる人が作ってるみたいです。MemcachedやRedisの代替で使えそうだけど、 SQLはJav
久々にどっぷりはまってしまった && ほとんど情報がなくて困ったので、解決策を備忘録として残しておこうと思います。 PHPのcurlでSSLのページにリクエストを送るとどうしてもエラーになってしまう 今回ハマったのは上記です。とあるECの案件で決済モジュールへのリクエストが必要で(当然SSL通信下で)、どれだけ設定を変えてもエラー、エラー、エラー…。ググっても情報は見つからず、何が原因かも分からないまま途方に暮れていたのですが、ふとしたことから閃き、そして解決まで至りました。原因は、↓でした。 NSS/3.13.1.0というSSL Versionを使ってるのがマズイようでした。 私のローカルでは、OpenSSLを使うようになっているのに、何故か今回のサーバではNSSを使う設定に。 また、SSLに問題があるのかと思って、 みたいな設定しましたが、これでもダメでした。証明書へのパスを渡したりし
待望のDesktop Notificationですね node-webkit v0.10.1 released with desktop notification, fullscreen API: https://t.co/bVsyMeZ36z — Roger Wang (@wwr) 2014, 7月 30 ということで、待望の機能が実装されたようです。さっそく試してみました。 環境はMac OSX 10.8.5なので、google groupに貼られているリンクから最新のnode-webkitをDLしてセットアップ。 Google Groupはこれです 試しに通知してみる 最小限のコードですが、実装を確認してみます。index.htmlとpackage.jsonは以下のように。 <title>Sample node-webkit app</title> <meta charset="UT
次のページ
このページを最初にブックマークしてみませんか?
『blog.wnotes.net』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く