サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
blog.kazu69.net
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 // typescript compile option const CJS_CONFIG: ts.CompilerOptions = { experimentalDecorators: true, jsx: ts.JsxEmit.React, module: ts.ModuleKind.ESNext, moduleResolution: ts.ModuleReso
Golangでツールやアプリケーションを作ったりしてるが、 メモリ管理がどのようになっているのか気になったので眺めてみた。 メモリ領域ざっくり復習のためメモリ領域についてまとめる。 メモリ領域は メモリ領域 内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 npm audit # Run npm install --dev [email protected] to resolve 11 vulnerabilities ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ Low │ Prototype Pollut
Gopherなら既にご存知なのだろうけど。 Golangでインスタンスを作成する際に可変長引数を受け付けつつ、拡張を考慮した設計をしたかった。 デフォルト引数を使えればいいけど、Golangにデフォルト引数はないので、色々と探してFunctional Option Patternということを 知ったのでメモ。 簡単な例を示してみてみようと思う。 package client type Configs struct { Port int Tiemout time.Duration UserAgent string } type Client interface { Do(req *http.Request) (res *http.Response, err error) }
Proxyオブジェクトがサポートされたことで、 JavaScriptにでもオブジェクト操作が柔軟に拡張できるようになった。 これにより処理を動的に拡張するメタプログラミングできる。 ということで、参考になりそうな事例があったので試してみた。 caniuseでProxyのサポートを見るとモダンブラウザでは実装済である。 まず、Proxyオブジェクトをおさらいする。 Proxyオブジェクト基本構文は次の通り // target const target = {}; // handler const handler = { // trap get(target, property) { return Reflect.get(target, property); } } const proxy = new Proxy(target, handler); targetはProxyで拡張するオブジェク
Webブラウザで異なるWebサイトのリソースを取り扱う際には、HTTPリクエストはCross-Origin Resource Sharing (CORS)が適用される。 ということは知っている話ですが、詳細まで追えてなかったので改めて眺めてみた。 CORS(同一生成元)CORSは異なるドメインへのアクセス方法を規定しており、これによりドメイン間の通信の安全性が保障される。 一般的なWebブラウザではXMLHttpRequestやFeatch APIなどHTTPリクエストでCORSが適用され、リソースの取得は許可されない。 CORSは以下のブラウザでサポートされている。 Chrome 3+ Firefox 3.5+ Internet Explorer 11+ Opera 12+ Safari 4+ ちなみにCORSは日本語で同一生成元などと言われる。 プロトコル、ドメイン、ポートの3つが同じ
今回はウェブアプリケーションを利用するため react-router-dom を使ってみた。 このpackageには BrowserRouter と HashRouter 、 Link 、NavLink コンポーネントがある。 アプリケーションに動的なURIが含まれる場合は BrowserRouterを利用する。こちらはbrowserのHistory APIをサポートしている。 HashRouter はwindow.location.hashを使ってルーティングと同期している。 MemoryRouter (URLは変更しないで履歴をメモリ管理するルーター) などcore packageでザポートされているrouterも利用は可能っぽい。 routerコンポーネント作成BrowserRouter を使う場合
Express width HTTP2 Server Push を試したので、 今回はPushされたリソースをCache APIでブラウにキャッシュして、 二度目以降のアクセスはキャッシュを使いHTTPリクエストしないでレスポンスをさらに向上できることを試してみた。 復習でHTTP2 Server Pushを試してみる。 HTTP2 Server Pushサンプルで作ったアプリケーションではStreamにリソースファイルをPushしてレスポンスを返すことで、Server Pushを実現している。 もしアプリケーションの前にNginxなどのProxyサーバーがある場合は、HTTPヘッダーにLinkヘッダーを追加してレスポンスを返すようにしたら良い。 Promise.all( pushFiles.map(file => { const option = Object.assign(stremO
strace -f -p 1 strace: attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted エラー内容から調べてみると、どうやらセキュリティ的にコンテナ内のシステムコールへのアクセスが制限されていると思われる。 dockerのリポジトリのdocumentを見るとSeccomp security profiles for Dockerという項目がある。 どうやらこのPR(#17989)で追加されてるようだ。 seccompを設定しているprofileがあるようで、これを変更することでシステムコールを制御できるようす。 seccompそもそもseccomp(secure computing mode)はプロセスのexit, sigreturn, read, writeを行うシステムコールを制御する。 また、seccomp
Oauth2やOpenID Connectなどすでに導入されているJWT(JSON Web Token)。 今後IoTとかを考えると認証手法としては結構有効な認証方法だということで、改めて眺めてみた。 JSON Web TokenJSON Web Token(JWT) jot(ジョット)と発音する。 JSONを電子署名したurl-safe(URLで使用できない文字が含まれる)なclaimのことを指す。rfc7519 また同じような言葉もあるので一旦整理する。 JWS は署名したもの JWE はEncryptしたもの 一般的にJWTというとJWSのことをいう。 電子署名(公開鍵+秘密鍵方式)をしているため、データの読み出し、書き込みができる。 しかし、その内容の改竄はチェックできる。 JSONの内容を秘匿化するわけではないので、内容は誰でも見ることはできるという点は注意が必要。 jwt.io
About rel=noopenerの記事を見て、フィッシング詐欺の手法Tabnabbing(タブナビング)について、 以前にそれっぽい記事読んだけど、すっかり忘れていた。 改めて見直してみて、その内容と対策がまとまっていたのでおさらい。 Tabnabbing(タブナビング)の仕組みTabnabbing の仕組みは以下となる。 まず、新規のタブを開くようなアンカータグ
Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly. バイナリログフォーマットがSTATEMENTだと安全でないのでよろしくないらしい。 STATEMENTだと安全でないということはどういうことか。少し試してみた。 バイナリログについてRDBMSでいうところのトランザクションログをMySQLではバイナリログという。 バイナリログにはMyS
開発やCIでやDockerイメージをbuildする際にnpm installすると、cacheがないため時間がかかる。 これはpackageの数が多くなると結構辛いことになるので、なんとかできないかと試してみた。 以下のような適当なpackageを使って試してみる。 { "name": "example-project", "version": "0.0.1", "description": "example", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "kazu69", "license": "MIT", "dependencies": { "express": "^4.13.4", "react": "^15.0.1" }, "
サーバーレスでアプリケーションを構築するためのNode.jsのフレームワークServerlessを使って、 AWS LambdaとAmazon API GatewayをつかってSlack Botを試してみたときのメモ。 SlackのメッセージをAPI GatewayにPOSTして、AWS Lambdaで処理をして、webhookを使ってslackに投稿する。 AWS CLIを端末(Mac)にインストールするなにはともあれ、AWSのコマンドラインインターフェイスを使うので端末にインストールする。 curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" sudo python get-pip.py The directory '/Users/YOU/Library/Caches/pip/http' or its parent di
運用年数の長いウェブサービスでcssやhtmlのリファクタリングをするにあたって、ビジュアルのRegression test(回帰テスト)が必要となってきたので、導入するにあたりいくつかのツールを眺めてみた。 今回、ビジュアルのRegression testとしてcsscritic、BackstopJS、Succss、PhantomCSSを軽く触ってみた。 csscritic A lightweight tool for regression testing of Cascading Style Sheets とある通り、csscriticはシンプルな設定でテストを実施することが可能。
しばらく時間が空くと忘れてしまうので備忘録。 dockerでmysqlサーバーを立てた時にありがちなパターンをまとめた。 今回はmysqlの公式イメージを使う前提。 起動時に初期データとユーザー追加起動時にテーブルを作成したり、データを追加したい時、ユーザーを追加しておきたい時。 例えば、以下のようなユーザー追加と初期データ追加用のsqlファイルを任意のディレクトリ(今回はinit.dにしておく)に置いておき、 #! /bin/bash CREATE_USER='mysql' CREATE_PASSWORD='secret' GRANT="GRANT ALL ON ${MYSQL_DATABASE}.* TO ${CREATE_USER}@'%' IDENTIFIED BY ${CREATE_PASSWORD}; FLUSH PRIVILEGES" echo $GRANT | mysql
Resource HintsとPreloadを使うことでリソースの取得を最適化できるようなので試してみた。 もともとはHTTP2にしてServer Pushを使うことで、予めリソースをサーバー側から送ることができるが、 ブラウザのキャッシュのメリットを活用できないんじゃないかということが気になっていた。 また、単純にHTTP2対応してもウェブページにはcrossoriginなリソースを多く利用しているので、 そのパフォーマンスの問題は解決しないのではないかという疑問があった。 それらを解決する手段としてResource Hintsなどを使ったPrebrowsingの技術が活用できそう。 preloadに関してはPreload: What Is It Good For?がまとまっているので参考にした。 Resource Hints についてResource Hints はlink要素に dn
しばらくReact周りの情報を追うのが疎かになっていた感があったので、 ReactアプリをES2015 classでリファクタリングして、ついでにReduxにのせてみた際に学んだことの個人的なまとめ。 すでに自明のことばかりであるけど。 ES2015 classを使うclass例えばES5でコンポーネントクラスを作成するcreateClassを使用している。
最近、時間のあるときにすこしだけHaskellを触ったりもしていて、 Monadなるものに触れた。 そこで、それっぽいものをJavaScriptで試してみた。 確実に俄か感じではあるので、漠然としている理解であるけど。 Monad LawsMonadと名乗るにはMonad則を満たさないといけない。 Monad則とは return x >>= f == f x m >>= return == m (m >>= f) >>= g == m >>= (\x -> f x >>= g) mはMonadを指す。 (>>=) でMonadから値を取り出す。 return はMonadに値を渡す。 という認識でこの法則を読み取っている。 ということで、これを満たすことのできるclassを作成した。 create(returnと同じ感じ)でMonadをインスタンス化して、 bind(>>==と同じ感じ)で
なかなか試せなかったログ収集・解析周りのツールを周回遅れで軽く試してみた。 Docker 1.8 からFluentdもlog driverに追加されているので、これを使って簡単なサンプルを構築した。 構成適当なnodeJSアプリケーションのフロントにnginxを立たせて、 収集したログをtd-agentで、Fluentdのログ収集コンテナに24224ポートで転送する。 あとはElasticsearch、Kibanaで解析・表示する。 アプリケーションからのログ転送はDockerのlog-driverオプションを使うので、td-agentの導入を省けた。 Fluentd、Elasticsearch、Kibanaはそれぞれオフィシャルのイメージがあるので、そちらを活用した。 Elasticsearchは9200ポート、kibanaは5601ポートを使った。 ログ収集・解析基盤のセットアップFl
stackprof を使えばrspecのプロファイリングが出来る戸言うことを知ったので、 早速テストでためしてみた。 Gemfileに追加して そしてbundle install。 around hookでテストの開始前後での時間を計測します。 stackprofの設定は環境変数で渡します。 ということで、いかのようにspec_helper.rbに追加。 そして実行 指定したディレクトリにプロフファイリング結果がdumpされる プロファイル結果を分析 この場合 ActiveSupport::Callbacks#run_callbacks が重そう。 こんな感じで重い箇所を洗い出して改善していける。 参考にしたページ Profiling RSpec examples with Stackprof railsアプリでstackprofを使ってボトルネックを探す + JSON::Schema(2
Grunt、 gulpなどを使うのではなく、npmをビルドタスクを使うためにちょっとおさらいした。 npmのpathnpmでインストールすると、 モジュールは ./node_modules/にインストールされ、 node_modules/.bin配下に各パッケージのbinへのシンボリックリンクが作成される。 これは実際にnpm binを実行するとパスがわかる。 たとえば、node_modules/jshint/bin/jshint は$(npm bin)/jshintで実行できる。 実際にはnpm経由で実行すると、$(npm bin)はPATHは追加されている。 package.jsonに以下を追加して でパスが通っていることが確認できる。 つまり、npm run TASKではモジュールのパスに$(npm bin)は必要無い。 pre、postフックnpmコマンドにpre、postというp
Subresource Integrity という記事をみて、 ちょっと興味深かったのでSubresource Integrityについて、軽く見てみた。 Subresource Integrityはどういうものかおそらく、以下のようなもの。 ウェブアプリケーションでCDNをつかって、サブリソースを参照することは当たり前になっている。 しかし参照先のサブリソースが安全であるという保証はない。 もし、CDN経由で参照しているサブリソースが攻撃者により改変された場合、XSSの危険性が生じる。 これは、サブリソースの整合性をチェックする仕組みを導入することで、危険を回避できる。 Subresource Integrityとは、サブリースをSHA256, SHA512などでハッシュ化して、linkタグやscriptタグにintegrity属性として付与することで、整合性を確認できるようにしたもの。
gulpfileをES6に置き換える必要があり、何気にgulpの情報追っていると、 そろそろv4.0がリリースされそうなのでざっくりと眺めてみた。 gulpfileをES6で書くまず、本来の目的だったこの件、v3.9ですでに対応されていた。 以下の条件であれば利用可能のようだった。 gulp v3.9以上 gulpfile.jsをgulpfile.babel.jsとする babel-core をインストールすること 内部的にはbabelで変換しているようだ。 続いて、v4.0のCAHNGELOGも眺めてみた。 gulp4.0をインストール cliの変更点--tasks-json と --verify オプションが追加されてる。 –task-json はタスクをjson形式で出力する。 –verify はpluginsがpackage.jsonを参照しているかチェックする。 APIの変更点大
フロントエンド周りを触ることがあり、Sassのコンパイル速度改善をするために、 libsassについて軽く調べてみた。 libsassとはC/C++で書かれたSass Compiler。これ自体は単なるライブラリで、実際にこれを走らせるには SassCやruby-libsassなどを使う。 コンパイラにGCC4.6+またはClang/LLVMが必要だとか。 libsass のインストールlibsassとSassCは共にbrewインストール可能だが、 マニュアルに沿ってインストールする場合は、 libsassとRuby Sassとの互換性現状ではRuby Sassとの違いもあり、完全に互換性があるわけではない。 実際、Ruby Sassよりも実装が遅れているため、Ruby Sass3.4の機能は多くが利用できない状況らしい。 SassSpec/libsass-todo-issuesを みると
jQueryをCDNから取得し、jQuery pluginが活躍している場合のbrowserify導入の備忘録 CDNのjQueryをrequireするCDNを使うことで、browserifyでbundleするファイルサイズは小さくなり、ファイル生成までの時間も短くなるという恩恵がある。 まず、CDNのjQueryを利用するのにbrowserify-shimを使う。 globalのjQueryを「jquery」というモジュール名でrequireできるようにする。 requireでincludeするjqueryはglobal(window)空間に存在しているので、 実際にはrequireなどせずとも使えるといえば使える。 require をするには以下の理由があるらしい。 require(‘jquery’)に統一することでwindow.jQueryというグローバルな名前空間へのアクセスを避け
HTTP/2 serverであるh2oで初めてのサーバプッシュを試してみた。 今回はh2o_mrubyも触ってみたかったということで、h2oをmrubyとともにビルドして少し触ってみた。 前回試してみたnginx_mrubyと同じくh2o_mrunyもサーバーをrubyで動的に制御することができる。 サーバプッシュとはHTTP/1の場合、サーバーはクライアントからのリクエストに応じて、レスポンスを返すものでした。 しかし、HTTP/2の場合はクライアントからのリクエストがなくても、サーバーからレスポンスを返すことができる。 今回はresouce hintsにあるように、リクエストヘッダーにlink:<style.css>; rel=preload; as=stylesheet のようなLinkヘッダーを追加してレスポンスを返すようにした。 こうすることで、h2oサーバーは予めクライアントが
Railsアプリケーションにおいて、マルチスレッド処理でレコード取得処理を行う処理を書くときに、Rspecの設定周りでいろいろと知ることができたのでメモ。 テスト環境は Rspec + FactoryGirl + DatabaseCleaner という感じ。 まず、テストの流れとして、 FactoryGirlなどからデータベースにデータが挿入される。これは一般的にTransactionで行われる。 そして、テストが終了するとTransactionはロールバックされてデータベースは元の状態に戻る。 しかし、マルチスレッドでレコード取得を行っていると、 テスト開始時にTransaction内でデータは挿入されるが、それぞれ別のスレッドからはTransaction内のデータを参照できないため、レコードの取得ができずに、テストは落ちることになる。 そこでrspecの設定でTransactionでの
次のページ
このページを最初にブックマークしてみませんか?
『blog.kazu69.net』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く