Node.jsのExpress4系で、特定URLにBasic認証を掛ける方法
最近Node触ってます。 JavaScriptそこまでゴリゴリ書かないから勉強になるのと、 npmでごにょごにょ使いたいライブラリ組み込んだりするのが楽しくてやってます。
さて本題です。
基本前提expressで、サーバーが動いている前提です。
npm install basic-auth-connect
express4系から、いくつかのmoduleが外部に切りだされたので(詳しくはココ )自分でrequireしなくてはいけません。
特定のURL以下に対して、Basic認証をかけたい場合
ここでは、staff/*以下のURLに対してusernameとpasswordでBasic認証をかけている。
var port = process.env.PORT || 3000, basicAuth = require('basic-auth-connect'); // ... (省略) app.all('/staff/*', basicAuth(function(user, password) { return user === 'username' && password === 'password'; })); // ... (省略) server = http.createServer(app); server.listen(port)
全てのURLに対してBasic認証をかけたい場合
// ... (省略) app.use(basicAuth('username', 'password')); // ... (省略)
個人で小さいアプリをつくろうとするとき、ユーザーからのリクエストがくるアプリと管理画面の機能を同居させるとき、気軽にやるには便利ですね。
- Special Thanks [Node.js] ExpressでBasic認証 | CodeNote.net
プレゼンスライド生成のbespoke.jsをさわってみた
プレゼンテーション生成のbespoke.jsをさわってみた
プレゼン用のスライドショーを簡単生成する nodeで動くbespoke.jsをさわってみた
- 結論
超簡単なので、これから使う。
- 必要なもの
brew install node npm install -g yo generator-bespoke
- 新規スライド作成手順
mkdir sample_slide cd sample_slide yo bespoke #yeomanでプロジェクトが生成される。色々聞かれるけど全部yesでOK grunt server #勝手にブラウザが立ち上がって、スライドショーが開始される
- スライドの編集の仕方
src/index.jadeを修正すればおk grunt serverをしとけば、スライド直せばブラウザも更新されるのがなにげに便利。
meta(charset='utf-8') meta(name='viewport', content='width=device-width, initial-scale=1, maximum-scale=1') title Sample Presentation // build:css styles/styles.css //- Check out 'src/bower_components/prism/themes/' for available themes link(rel='stylesheet', type='text/css', href='bower_components/prism/themes/prism-tomorrow.css') link(rel='stylesheet', type='text/css', href='styles/main.css') // endbuild body article section h1 はじめてのプレゼン section h2 画像とかも貼れる h3 <img src="https://pbs.twimg.com/profile_images/1650275843/__________2011-11-21_23.03.19.png"> // build:js scripts/scripts.js script(src='bower_components/bespoke.js/dist/bespoke.min.js') script(src='bower_components/bespoke-keys/dist/bespoke-keys.min.js') script(src='bower_components/bespoke-touch/dist/bespoke-touch.min.js') script(src='bower_components/bespoke-bullets/dist/bespoke-bullets.min.js') script(src='bower_components/bespoke-scale/dist/bespoke-scale.min.js') script(src='bower_components/bespoke-hash/dist/bespoke-hash.min.js') script(src='bower_components/bespoke-progress/dist/bespoke-progress.min.js') script(src='bower_components/bespoke-state/dist/bespoke-state.min.js') script(src='bower_components/bespoke-forms/dist/bespoke-forms.min.js') script(src='bower_components/prism/prism.js') script(src='scripts/main.js') // endbuild
ブラウザではこんな感じに見える
なかなかいい感じ。いろんな用途で使えそう。
github flavored markdownで書いたmdファイルを、pdfにする方法
仕事でシステム連携仕様書をmarkdownでかきました
今は、atomのmarkdown previewでやるのがナウいと言われて 仕様書をつくるだけ作りました。
しかしいざ先方にお渡しする段階で gistに貼り付けてurlをお渡しすることも考えたのですが、 やっぱりpdfでしょという話になり、その時に有料アプリ買うか・・・とかいろいろ悩んだ時のお話です。
結論からいえば、pipでgripを入れて、 htmlを吐き出して、ブラウザでpdfとして保存すればOKです。
インストール
pip install grip
以上。
使い方
grip sample.md
とするとlocalhost:5000でアクセスするとブラウザで、mdァイルが、 いい感じでhtmlで見れます。
あとはそれをchromeでpdfとして保存するだけ。
gripとてもいい感じです。
是非markdownで書類作成して、pdfでエクスポートする時は、gripでやりましょう。
apacheで、mod_deflateでレスポンスをgzipしたけどネットワークトラフィックが増えている?
iOSのネイティブアプリでの掲示板サービスの、jsonを返すバックエンドのAPIのサーバーをつくってます。 ネットワークトラフィックを減らそうと思って、apacheでgzip圧縮をすることにしました。 コンテンツの圧縮率をみたら、処理によって、圧縮できているところと、 むしろ圧縮以前より容量が増えたものがあったりして、よくわからないので備忘録的にまとめました\(^o^)/オワタ
必要なmodule
設定
httpd.confに記述するだけ。 やった環境 centOS 6.5, Apache/2.2.15 モジュールversion
- モジュールの読み込み
LoadModule deflate_module modules/mod_deflate.so LoadModule filter_module modules/mod_filter.so
- モジュールの利用
#Gzipの圧縮の設定 # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # ここからフィルター設定 FilterDeclare Compression CONTENT_SET FilterProvider Compression DEFLATE Content-Type $text/plain FilterProvider Compression DEFLATE Content-Type $text/css FilterProvider Compression DEFLATE Content-Type $application/xhtml FilterProvider Compression DEFLATE Content-Type $application/xml FilterProvider Compression DEFLATE Content-Type $application/json FilterProvider Compression DEFLATE Content-Type $application/xhtml+xml FilterProvider Compression DEFLATE Content-Type $application/rss+xml FilterProvider Compression DEFLATE Content-Type $application/atom+xml FilterProvider Compression DEFLATE Content-Type $application/x-javascript FilterProvider Compression DEFLATE Content-Type $image/svg+xml FilterProvider Compression DEFLATE Content-Type $text/html FilterProvider Compression DEFLATE Content-Type $application/javascript FilterChain Compression # ここまでフィルター設定 # Don't append Vary heder for specific files SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|lzh|exe)$ dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary Header append Vary Accept-Encoding env=!dont-vary # gzipでの圧縮率をログに吐き出す(確認用) DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate CustomLog logs/deflate_log deflate
ちなみに一番下にある、deflate_logを見ると、mod_deflateによる圧縮率を見ることができます。
"GET /example/badge HTTP/1.1" 45/37 (121%) "GET /example/list?offset=1&per_page=20&seed=26 HTTP/1.1" 1835/5221 (35%)
送信データの多いもの(掲示板の一覧表示画面)は、大幅に圧縮できているけど、 送信データ量の少ないもの(新着通知のバッチのカウントを返すもの)は、むしろ容量が増えている(?)
これはなんでだろう。
上記謎と、gzip圧縮によるCPU使用の増加率とかも、サービスイン後に調べてみようとおもいます! リリース前は、あれもやりたい!これもやりたい!ということがあって、
サービスインするまでには、インフラやアプリ・運用を見据えた仕組みでやっとけばいいことというのは本当に無数にあって、 リリース前までにやるべきこと以外で、捨てることは本当に多いなと痛感しながら日々進めております。
Laravelで、DBやEloquentクラスでsqlを実行してget()したけど、結果がstdClassになっちゃった場合
ネイティブアプリのサーバーのAPIで、Laravel使って見るかーとなったけど、 結果が、stdClassになって、危うく全部foreachしてarrayキャストするところだった。 PDOのFETCHの設定が下記ファイルに書いてた。
app/config/database.php
/* |-------------------------------------------------------------------------- | PDO Fetch Style |-------------------------------------------------------------------------- | | By default, database results will be returned as instances of the PHP | stdClass obj | array format for simplicity. Here you can tweak the fetch style. | */ 'fetch' => PDO::FETCH_CLASS,
上記をPDO::FETCH_ASSOCにすれば解決。
ここ が大変わかりやすかったです。
githubのプライベートリポジトリをLaravelのartisan経由で、Rocketeerでデプロイする時にハマったこと
Laravelのartisan経由でdeployしようとすると、デプロイコマンド実行しても結果が返ってこない・・・
どうやらdeployタスクが実行されるタイミングで、公開鍵のパスワードを入力してください・・・ のようなコマンドライン上での対話が発生してしまうと、デプロイが止まってしまってしまう模様。
rocketeerのリポジトリの設定ファイル
// SCM repository ////////////////////////////////////////////////////////////////////// // The SCM used (supported: "git", "svn") 'scm' => 'git', // The SSH/HTTPS address to your repository // Example: https://github.com/vendor/website.git 'repository' => 'git@github.com:Someone/MyApp.git', // The repository credentials : you can leave those empty // if you're using SSH or if your repository is public // In other cases you can leave this empty too, and you will // be prompted for the credentials on deploy 'username' => '', 'password' => '', // The branch to deploy 'branch' => 'master', // Whether your SCM should do a "shallow" clone of the repository // or not – this means a clone with just the latest state of your // application (no history) // If you're having problems cloning, try setting this to false 'shallow' => true, // Recursively pull in submodules. Works only with GIT. 'submodules' => true, );
一旦公開鍵をパスフレーズなしで、作成したら、うまくいった。
php版capistranoのRocketeerを使ってdeployしてみる
開発環境から気軽にdeployできる方法をphpでやってみた。 capistranoだとrailsアプリ前提だったので(もちろんRailsアプリ以外もいけるけど)
概要
やってくれることはシンプル. capistranoと同じで、deployするclientからリリース環境に対してdeployをやるという構成。 指定したユーザーでssh接続して、deployの度にreleaseディレクトリに最新のアプリケーションを持ってくる。 そしてdocument rootが設定されたcurrentに対して、symbolic linkでアプリケーションを公開を切り替えるというもの。
利用するにあたって下記の3つの前提条件だけ. * git * ssh接続設定 * deploy先にcomposerが事前にインストールされていること
基本的な使い方はcomposerと同じ感覚。
使い方
cd ${application-directory} wget http://rocketeer.autopergamene.eu/versions/rocketeer.phar
php rocketeer.phar ignite
上記コマンドで、deploy用の設定がディレクトリに書かれる
./.rocketeer
└ config.php --deploy先にssh接続するための設定
└ hooks.php --deployにhookする処理を書く
└ logs --deployのログ
└ paths.php --phpや、composer等のパスを書く
└ remote.php --deploy先の設定を書く
└ scm.php --gitやsvnの設定を書く
└ stages.php --productionやstagingの設定を書く
上記設定ファイルの勘所はわからないので、後々運用したら書いてみる
php rocketeer.phar deploy
※composer経由で、installして、/vendor/bin/rocketeerから同じことをたたいたら、エラーがでたのですが、わかりませんでした。 どなたかお詳しいかたいらっしゃいましたら教えて下さいm(__)m