werckerとpm2でconohaVPSにデプロイする話

デプロイサーバの役割 デプロイとは、主にネットワークを通じて提供されるWebアプリケーションなどのシステム開発工程において、システムを利用可能な状態にすることである。 こちらより引用 よくあるのがこんな構成で踏み台サーバにシェルスクリプトやCapistranoが仕掛けられていて、 各サーバA,B,Cにログインしてgit pull origin masterとかするやつです。 最近だとansibleとかも使う会社もあるみたいです。 他にも見かけるのが上記の踏み台サーバがjenkinsおじさんとかdrone.ioだったりする構成です。 またクラウドでは、Githubと連携できるCircleCIやTravisCIなんてのもあります。 そこで今回紹介するのはCircleCIやTravisCIの競合の**wercker**です。 ここではHello-worldをConoha VPSに展開できるようにしてみます。 つまりこんなイメージです。 ちなみにwerckerの料金は個人で使う分には基本的に無料と言っていいレベルだと思います。 http://www.wercker.com/pricing 環境 開発 Mac Node.

Node.jsでAWS Cognito User Pools のアクセストークンを検証する

AWS のページから引用 ユーザープールの JSON Web トークン (JWT) セットをダウンロードして保存します。それら をhttps://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json で検索で きます。 JWT 形式からトークン文字列をデコードします。 iss クレームを確認します。これは、ユーザープールと一致する必要があります。たとえ ば、us-east-1 リージョンで作成されたユーザープールの iss 値が https:

redux-sagaからredux-observableに書き換えてみる

redux-sagaからredux-observableへ書き換え 仕事でredux-observableを使うことになったので、書き換えてみた備忘録。 ちなみにまだredux-observable触って2日目の初心者なので多目にみてもらえると :bow: Before よくあるredux-sagaの処理。 reducerとstoreの設定周りとか、詳細は省きます。 import {createAction} from 'redux-actions'; export const findUser = createAction('findUser'); function * findUserHandler(payload) { try { yield put(showLoading()); const { data } = yield call(api.user.find, payload)

Elixir/Phoenix で yak shaving

yak shaving とは 1つの問題を解決しようとしたら、次から次へと問題が発生していくさま。 Ectoでモデルづくり テーブル設計も終わったし、Ectoとかいうのでモデル作っていくぞー(´ω`)ノ mix phoenix.gen.model で自動生成されるidはbigint、 でも、モデル作成時にbigintを渡すことが出来ないらしい。 mix phoenix.gen.model User users test:bigint ** (Mix) Unknown type `bigint` given to generator なので、

docker-composeしか知らない私がKubernetesを触ってみたメモ

Kubernetes クバネテスまたはクゥーバネィテスと読む(作者の読み方) k8s という省略語もある。 Kubernates とは Dockerコンテナ群を管理するソフトウェア。 また、Dockerコンテナ群をクラスタ管理すること出来る。 競合としてAmazon ECS / Docker Swarm がある。 Kubernetes 用語の紹介 Docker クラスタ Docker コンテナを実行する複数のホスト(マシン)をグループとして扱うこと。 Pod Replica Set の1単位。 Dockerコンテナをまとめたもの。Docker-compose.ymlのようなもの? LAMP(Linux/Apache/

Cloud9 が AWSに買収!!

いやーかれこれ4年くらいローカルの開発環境ではCloud9を使っていますが、ときにはプラグインを作ろうとしたこともあった私の大好きなIDEがAWSに買収されたようです! 周りにもCloud9の普及活動して、実際利用してくれてた方もいたりして(´ω`)♪ そんなこんなで記念に投稿しちゃうくらいテンションが上がりました! おそらく今後はLamdaとかの開発環境になるのかなと予想してます。 Lamdaの開発は未だに少々やりにくいですし、zip上げたりとか・・・(´ω`;) 以下てきとうな意訳 Great News! 私たちは皆様方にこのことを公表できることに興奮しています! 我々がAWSに買収されたことを知るのは皆様方が初めてでしょう! 今後私たちはAWSファミリーに加わることになり、また将来、素晴らしいお客さんのために働けることを楽しみにしています! 一方で、皆様方は引き続きCloud9に依存しているものを安価で利用することができます。その部分のビジネスに変更はありません。 私たちは引き続きAceオープンソースプロジェクトや世界の人々に革新的なサービスを提供していきます。また、時間がたつにつれ我々はAWSで働くことになるでしょう。 Cloud9のこの節目のときに、少々時間をいただいて、皆様方がCloud9を長年に渡り信頼してくれたことに感謝を表現したいです。 AWS傘下で皆様方にますます多くの価値をもたらすことが出来ることに私達がどれだけ興奮しているか伝えたいです! 皆様方のビジネスに感謝し、また新たなサービスを楽しみにしていてください! https://c9.

ImageViewをDragShadowBuilderでドラッグする! (Android)

ドラッグとは ドラッグとはタッチされたものを画面上でタッチに追従移動させることを言います。 つまりタッチされたものとは別に、もう一つ複製を作る必要があります。 ではどうするか Androidでドラッグアンドドロップするには2つの方法があります。 ひとつはDragShadowBuilder、もうひとつは自力で描画する方法です。 ※API Level11以上でDragShadowBuilderを利用することが出来ます。 View.DragShadowBuilder を利用 ここではまずその内の1つ、DragShadowBuilderを利用してImageViewをドラッグさせます。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView

フリーランスプログラマになるまで

プログラマになるまで 一羽は大学を中退後、アルバイトやとび職をやっていまして、、、 高校時代は情報系でCOBOLというマニアックな言語を勉強していました。 どんなものを授業でやっていたのかもまったく覚えてないです(´ω`;) 現在COBOLの仕事自体がないので、まあ全く役にたってないです。。。 ふと今はさすがにCOBOLなんて教えてないでしょ、 と思って調べてみたらまだ教えてるみたいです。。。 どうする気なんでしょう、あの高校は…。 現実的にCOBOLの仕事なんてホントに無いんだけども…。 あるにしてもCOBOLしか出来ない40代、50代のコボラーが少ない仕事を奪い合ってるこの状況…。 話をもどして 元々、一羽は本を読むのが好きで、とび職をやりながら現場で昼休みに本読んでたりしてました。 その中で**「プログラマのしくみ―これがプログラマの生態と実態だ!!」**という本を読み、 謎めいた世界で働いてみたいと感じたのです。 読んだのはこの本です。 プログラマのしくみ―これがプログラマの生態と実態だ!!中古価格¥1から(2015/4/2

LINE,Twitterに投稿する機能をつける(Android)

iosとAndroid ios の場合 iosだとSocial.frameworkを使って簡単にLINE,Twitterやfacebookへの共有ができる。 またfacebook SDKを利用しなくてもURL以外の情報も設定可能。 ずるいよ(´ω`) Android の場合 Androidの場合intentなどで連携が出来る。 ここでは簡単な方法としてLineやtwitter、facebookとの連携は暗黙的intentを使って行う。 facebookの場合はfacebookSDKを利用しないとURL以外の情報は投稿不可能。 そのため実用性が低いので、ここではfacebookは説明しません。 では本題のAndroidでLINEやTwitterへの投稿機能を暗黙的intentで呼び出すコードです。 LINEへの投稿 String uri = "line://msg/text/投稿したい内容"; Intent intent = null; try { intent

mongodbから日本語で全文検索するためにElasticSearchをインストールする

mongodb での全文検索 mongodbで日本語で全文検索したい!と思ってもこれが残念ながら未だ非対応です。 参考URL そこでElasticSearch プラグイン(MongoDB River + Kuromoji Analysis)を利用します。 ElasticSearchからプラグインを色々使ってmongodbから全文検索する感じです。 そのためにいろいろとハマったのでメモ的に書いていきます。 必要なものは以下です。 mongodb JDK (Java Development Kit) ElasticSearch MongoDB River Plugin (プラグイン)(mongodbの接続用) Kuromoji Analysis Plugin (プラグイン)(日本語形態素解析) 環境はCentOS 6.

Puppetを使ってシステム管理をする

Puppetとは Pueppetとは自動システム構成管理ツールです。 サーバとクライアントがあり、サーバから各クライアントにマニフェストファイルで命令することで 各ソフトのインストールなどを実行して環境を構築します。 それではインストールしていきましょう。 環境 環境は Cent OS 6.3 で行います。 今回、Puppetサーバ と Puppetクライアントは別マシンで実行させます。 Puppet サーバーマシンのホスト名を設定する sudo vi /etc/hosts 以下を追加する 127.0.0.1 puppetserver localhost sudo vi /etc/

Drawableのコピーを作成する(Android)

Android で Drawableを使っているとシャローコピーではなく、 ディープコピーが欲しくなることがあります。 wikiから引用します。 シャローコピーとは 浅いコピーを指します。 変数が値を指す場合は値がコピーされます。 もしも変数がアドレスを指すならば、シャローコピーされた変数はアドレスを持ちます。 ※アドレスを指すとはAndroid JAVAで言うとオブジェクトを継承したもの全てを指します。 ディープコピーとは 深いコピーを指します。 実はディープコピーではデータはアドレスと共にもう一度コピーされます。 AからBへディープコピーした場合、お互いに影響を与えることがありません。 しかし、コピー速度はシャローコピーより遅いです。 実際のコードでは以下のようになります。 例としてここではDrawableにGrayScaleをかけています。 DrawableをシャローコピーしてGrayScale Drawable a = Drawable.createFromStream(context.getAssets().open("path/to/img&

楽天API用Androidクライアントを作ってみた

表題の通り楽天API用のAndroidクライアントを作成してみました。 楽天API 実装はメソッドチェーン風です。 → 初めてのAndroidライブラリの作成と公開だったのでいろいろ大変でしたが、 なんとかJCenterに公開出来てよかったです(´ω`)b しかしJCenterの承認?許可?に24時間くらいかかったわけですが・・・(汗) 以下はREADMEに書いてありますが、一応。 使い方 dependencies { compile 'biz.devalon.stella:rakutenapiclient:0.0.7' } Github 未対応APIについて OAuth認証が必要なものは省いています。 いつか対応できたらいいな・・・。 なぜIONを選んだか このライブラリのHTTP接続部分はIONを利用しています。 本当はRxAndroid+Retrofitでかっこよく作りたかったのですが、 以下の理由によりやめました。

Visual Studio C++ で std::bad_alloc対策

std::bad_allocとは std::bad_allocが出た場合、ヒープ領域が足りていないことを意味しています。 ではヒープ領域とはなにかというとnewやallocでメモリを動的に確保する際に使用されます。 例えばマルチスレッドで大きい画像を解析しようとしたりすると発生することがあります。 Visual Studio ではデフォルトで1MBが割り当てられています。 回避策 これを設定変更するにはソリューションプロパティでヒープ領域を設定することができます。 また、プリプロセッサを追加することでも回避出来ます。 以下のコードは例としてHEAPとSTACKに5MBを割り当ててみます。 #pragma comment(linker, "/HEAP:5242880") #pragma comment(linker, "/STACK:5242880") しかし、マルチスレッド上ではヒープを多く使うことは競合が発生し、

Puppet Manifest の書き方

Puppetの簡単な説明 PuppetとはRubyで作られているシステム自動管理ツールです。 競合としてChefなどがあります。 例えばひとつのサーバでサービスを稼働して、 容量が足らないのでもう一つ増やすとなった場合簡単にコピーを作成することができます。 しかしコマンド実行のマニフェストが独特な構文のため、実際に利用することを断念することが多いため、 構文について説明します。 パッケージのインストールする yum install git Puppet Manifest package { 'git': ensure => 'installed', # provider => 'yum', # 使用するプロバイダ yum, gem ... } ユーザを作成する useradd puppetuser Puppet Manifest user { 'puppetuser': home

TextViewからDrawableを作成する(Android)

ImageViewからDrawable取得 ImageViewであればGetDrawableで取得可能。 TextView TextViewだとGetDrawableは存在しない。 今回説明するのはこちら。 ではどうするか とりあえずTextViewを作成。 TextView textView = new TextView(context); textView.setText("test"); 上記のtestと書かれたDrawableがほしいとする。 たとえば たとえばこのDrawableとアプリのassets配下の画像を重ねたいとします。 ちなみにtestと書かれたTextViewは動的に変更されるとし、 先にレイヤーリストを作成しておくことが出来ない状況とします。 まずはassets配下の画像を読み込み、Drawable(BitmapDrawable)を作成します。 backgroundDrawable = Drawable.createFromStream(context.getAssets().open("

Androidでios風Dialogを表示する

iosのダイアログは格好いいですが、Androidのはいかんともしがたいところがあります。 さらにTimePickerDialogについては問題があったりといろいろありますね。 カスタムダイアログでiosぽくする ということで完成表示はこんな感じです。 Activityクラス とりあえずボタンで表示するとしてイベントを登録します。 Dialogクラスはインスタンス生成したらshowで表示するだけのインターフェースです。 final Activity self = this; ((Button)findViewById(R.id.button)) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogLikeIos dlg = new DialogLikeIos(self); dlg.

Webviewの読み込みページ最後尾を判定する(Android)

WebViewで読み込まれたページの最後尾までスクロールした時の判定方法です。 まずはWebviewを継承した独自Webviewを作成します。 public class WebViewEx extends WebView{ public WebViewEx(final Context context) { super(context); } public WebViewEx(final Context context, final AttributeSet attrs) { super(context, attrs); } public WebViewEx( final Context context, final AttributeSet attrs,

Googleの日本語フォントを自サーバに置いて読み込む

グーグルの日本語フォントですが、WEBフォントのため表示に若干の遅延が起こることがあります。 そこで自分のサーバにフォントを置いて読みこむようにしました。 /* * Noto Sans Japanese (japanese) http://www.google.com/fonts/earlyaccess */ @font-face { font-family: 'Noto Sans Japanese'; font-style: normal; font-weight: 100; src: url('./../fonts/Thin.woff'),url('./../fonts/Thin.eot')

Android Linuxのプロセスメモリ管理 その2

今、私たちはメモリ領域や、空き領域を知っています。 実機があれば adb shell ps と打ってみましょう。 VSSとRSSの列が見えるはずです。   VSS(henceforth VSS)はプロセスが必要とするメモリの量です。   RSS(Resident Set Size)は物理メモリに位置する本当に存在するメモリの量です。   (メモリ確保の要求がされたもの)。 上記のようにVSSとRSSの違いの主な理由はデマンドページングです。 では、全てのRSSサイズを足してみましょう。 面白いことにmeminfoの総メモリ・サイズよりも大きいはずです。 例えば、Androidでリンク前のオブジェクトがあったとします。 オブジェクトはプロセスで共有されています。 そしてRSSサイズはそのオブジェクトのサイズもまた含みます。 そういうわけでRSSの総サイズはメモリ・サイズより大きいのです。 より深くRSSについて知るために、以下の例を見てみましょう。 空のプログラムを作り、

REST APIにRxAndroid とretrofitで並列アクセス

c88でエンジニア系の本を買って興味を持ったのでRxAndroidを試してみました!! RxAndroidとは RxAndroidはRxJavaのAndroid用の拡張モジュールです。 RxJavaは主に非同期処理を行うことが出来るライブラリです。 またObserverパターンに踏襲しているため、 サードパーティーのライブラリとの連携も可能です。 ECMA6からJavascriptに標準搭載される予定のPromiseみたいなものです。 ここではPromise.whenみたいなことをやろうとしてます。 jQueryを使うとこんな感じです。javascriptは簡単ですね♪ $.when( $.getJSON(baseUrl+"Tokyo"), $.getJSON(baseUrl+"Kyoto"), $.getJSON(baseUrl+"Osaka"), $.getJSON(baseUrl+"Okinawa"), $.getJSON(

gulp plugin 作成とKii Cloud

なぜ なぜプラグインを作ったかと言うと、 Kii CloudのカスタムAPIを作ろうと考えていたのですが、 Kii の仕様上、コードファイルとフックファイル1つずつしかデプロイ出来ず、 だからといってひとつのファイルに書いていくのも現実的ではないため、 gulpでデプロイすることにしました。 Kii Cloudへのデプロイ (イメージ) 以下のような流れでデプロイすることになると思います。 コードファイル(js)をひとつにまとめる フックファイル(json)をひとつにまとめる 完成したファイルをデプロイする 1についてはjavascriptをまとめるプラグインがあるからいいのですが、 2のjson形式のファイルを作成するプラグインが良さそうなのがなかったため、 今回作ることにしました。 ソース gulp-unite-json "use strict"; var _ = require('underscore')