2015年12月16日水曜日

Titaniumで作ったサービス「たなごころ」の紹介。技術編

Appcelerator Titanium Advent Calendar 2015の16日目。今年開始したサービスの紹介。

保護者のスマホへ通知できて便利だよ。というサービス。

アプリは管理画面で承認しないとログインできないけど、スクリーンショットでだいたいのイメージは伝わると思う。

 
詳細は上記サイトを参照してもらうとして、今回は技術的な特徴を紹介。
  • 期間:約8カ月。ガラケー対応でプラス2カ月
  • 要員:私一人(画面デザインはデザイナーに依頼)
 
簡単なシステム構成図はこんな感じ。  



 
その他の特徴
  • 園ごとにWordPressを立てて、アプリをリリース
  • 園の運用に合わせてカスタマイズ(GitLab + Redmineで管理)
  • 仮想サーバー4台(プロキシ:1、管理画面:1、アプリAPI:2)借りてネットワークを構築。負荷を見ながら増やす予定
  • 現在位置を発信するアプリも作った。これは園のバスに乗る保育士さんに持ってもらってバスの現在位置を把握するため
 

Titaniumアプリ関連
  • Alloyは使ってない
  • AndroidとiOSでファイルを分けない。必要なときだけ分岐する
  • アイコンは全部ウェブフォント・・・にしたかったけど、一部ドロップシャドウがかかっているのは画像
  • Windowは起動してから1つだけ。ページっぽく見えるのはViewのvisibleで切り替えてるだけ
  • Android 2.3対応のために Titanium SDK 3.5.1.GAから上げれない


今後の技術的な課題など
  • Google Container Engineへ移行したい
  • ガラケーとAndroid2.3を切り捨てることができたらどんなに楽か
  • もっと自動化しないと私一人では耐えられない(深刻)


導入してもらった園には好評で来年度からは一気に増える。1法人で5施設契約してくれたところもある。
個人でも法人でも、技術セットが似てる方がいれば連絡ください。空いてる時間で手伝ってほしいです(切実)。


< Related Posts >




2015年12月9日水曜日

WordPress + WP-APIプラグイン + Titaniumアプリ

titanium_wordpress_wp-apiTitanium Advent Calendar 2015の9日目。WordPressとTitaniumアプリの連携。

TitaniumアプリからOAuth認証する方法を記事にしようと思ったけど、時間がなくなったので、WP-APIを使うと簡単にWordPressとやりとりできるよという話。

環境: CentOS 6.7, PHP 5.6.17, WordPress 4.3.1

 

目次

  1. WP REST API v2をインストール
  2. Titaniumアプリからデータ取得
  3. OAuth認証をしたい
  4. WordPress.org + Node.js

 

参考

 


1.WP REST API v2をインストール

ダウンロードしてきて、wp-content/pluginsに配置してアクティベートする。

管理画面のSettings → Permalinksで「Default」以外を選んでRewriteを有効にしておく。

これでREST APIが有効になったか確認。

http://dev.wordpress.com/wp-json/wp/v2/posts/

のURLにアクセスしてみるとJSON形式のデータを取得できる。

 


2.Titaniumアプリからデータ取得

Titanium Studioから新規アプリを作成してapp.jsを下記のように編集。

var win = Ti.UI.createWindow({
  backgroundColor:'#fff'
});

win.add(Ti.UI.createButton({
  title: 'Get data from WordPress'
}));
win.children[0].addEventListener('click', function() {
  var client = Ti.Network.createHTTPClient({
    onload: function(e) {
      console.log(JSON.parse(e.source.responseText));
    }
  });

  client.open('GET', 'http://dev.wordpress.com/wp-json/wp/v2/posts/');
  client.send();
});

// Open
win.open();

iPhone Simulatorで起動する。
$ ti build -p iphone -T simulator --sim-64bit --tall

ボタンを押すとWordPressから取得したデータをコンソールに出力する。

 


3.OAuth認証をしたい

ここからは覚書(というか途中で断念)。

WP-APIのドキュメントには、GitHubに公開されているプラグインを使うとOAuth認証が可能と書いてある。

しかし、アクティベートしてからトークンを取得するまでOAuthを理解していないときつい。いいサンプルが見つからなかった。

「WP OAuth Server」というプラグインを使うと簡単に実現できそう。

Titanium Mobileアプリのサンプルを公式サイトからダウンロードできる。

ライセンスキーを購入する必要があるみたいだけど、ソースコードがGPLで公開されているので改変して使えるかもしれない。

 


4.WordPress.org + Node.js

仕事ではサーバー側をNode.jsで作っている。最近WordPressがNode.jsに近づいている雰囲気なので、近い将来JavaScriptを知っていればアプリからサーバーまで完結できるかも。

 

 

< Related Posts >

2015年11月19日木曜日

静的WordPress向けNginxのfastcgi_cache設定

nginx_wordpressWordPressで開発した静的ウェブサイトを公開するためにnginxの設定を見直したときの覚書。

環境: CentOS 6.7, nginx 1.8.0, PHP 5.6.15

fastcgi_cacheはPHP-FPMなどのバックエンドの結果をキャッシュする機能。

Nginxの設定ファイルの記述はWordPressの公式サイトを参考にした。

 

設定ファイルをGistにアップしたのでこっちを見ながらの方が分かりやすいかも。

 

目次

  1. FastCGIキャッシュ機能を有効に
  2. Nginxの設定ファイルを準備(キャッシュなし)
  3. キャッシュ機能が有効な設定ファイル
  4. Gzipの設定ファイル

 


1.FastCGIキャッシュ機能を有効に

Nginx全体の設定なのでhttpディレクティブに記述する必要がある。
# cd /etc/nginx/
# less nginx.conf

http {
    # FastCGI Cache
    fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=WORDPRESS:100m inactive=1d;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache_use_stale error timeout invalid_header http_500;
}

ゾーン名: WORDPRESS
共有メモリ使用サイズ: 100M
保持期間: 1日間

 


2.Nginxの設定ファイルを準備(キャッシュなし)

各サイトごとの設定
# cd conf.d/

共通の設定ファイルを作って、各サイトでincludeさせる。

まずはアクセス制限用設定ファイルを作成
# mkdir global
# vi global/wordpress_restrictions.conf

#
# Global Restrictions for WordPress site
# Designed to be included in any server {} block.</p>
#

location = /favicon.ico {
    log_not_found off;
    access_log off;
}

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~ /\. {
    deny all;
}

# Deny access to any files with a .php extension in the uploads directory
# Works in sub-directory installs and also in multisite network
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

 

シングルサイト用WordPress設定ファイル。まずはfastcgi_cacheを使わない設定。
# vi global/wordpress_dev.conf

#
# WordPress single site rules.
# Designed to be included in any server {} block.
#

index   index.php;
charset utf-8;

# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
    try_files $uri $uri/ /index.php?$args;
}

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; log_not_found off; expires max;
}

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
    # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)

    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_intercept_errors on;

    client_max_body_size 5M;
}

 

これらのファイルをincludeしてサイトが表示できるか確認。
# vi 01_hoge.conf

server {
    listen       80;
    server_name  dev.hoge.jp;

    root    /home/httpd/project/web/wordpress;

    # WordPress Setting
    include conf.d/global/wordpress_restrictions.conf;
    include conf.d/global/wordpress_dev.conf;
}

設定ファイルを再読み込みしてブラウザで確認
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload

 


3.キャッシュ機能が有効な設定ファイル

今度はfastcgi_cacheを有効にした設定。

前のをコピーして使う
# cp global/wordpress_dev.conf global/wordpress_live.conf

キャッシュに関わる設定を追記
# less global/wordpress_live.conf

#
# WordPress single site rules.
# Designed to be included in any server {} block.
#

index   index.php;
charset utf-8;


#
# fastcgi_cache start
# https://codex.wordpress.org/Nginx#Nginx_fastcgi_cache
set $no_cache 0;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
    set $no_cache 1;
}
if ($query_string != "") {
    set $no_cache 1;
}

# Don't cache uris containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
    set $no_cache 1;
}

# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $no_cache 1;
}


# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
    try_files $uri $uri/ /index.php?$args;
}

# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# Directives to send expires headers and turn off 404 error logging.
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; log_not_found off; expires max;
}

# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ [^/]\.php(/|$) {
    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) {
        return 404;
    }
    # This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)

    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_intercept_errors on;

    client_max_body_size 5M;

    # Enable FastCGI cache
    fastcgi_cache_bypass $no_cache;
    fastcgi_no_cache $no_cache;

    fastcgi_cache WORDPRESS;
    fastcgi_cache_valid 200 60m;
}

 

これをincludeしてブラウザで確認
# less 01_hoge.conf

server {
    listen       80;
    server_name  dev.hoge.jp;

    root    /home/httpd/project/web/wordpress;

    # WordPress Setting
    include conf.d/global/wordpress_restrictions.conf;
    #include conf.d/global/wordpress_dev.conf;
    include conf.d/global/wordpress_live.conf;
}

 

nginx再読み込み
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload

2回目以降の読み込みが速くなっているはず。

 

キャッシュをクリアする仕組みを用意しておく
# vi global/fastcgi_cache_purge.conf

#
# FastCGI Cache Purge
#
location ~ /purge(/.*) {
    # Uncomment the following two lines to allow purge only from the webserver
    #allow 127.0.0.1;
    #deny all;

    fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}

。。。と思ったけど、yumでインストールするとfastcgi_cache_purgeモジュールが有効になっていないらしい。

コマンドで削除する
# rm -rf /var/cache/nginx/fastcgi/*

 


4.Gzipの設定ファイル

おまけでgzip用の設定も。
# vi global/gzip.conf

gzip         on;
gzip_vary    on;
gzip_proxied any;
gzip_types   text/plain
             text/xml
             text/css
             application/xml
             application/xhtml+xml
             application/rss+xml
             application/atom_xml
             application/javascript
             application/x-javascript
             application/x-httpd-php;
gzip_disable "MSIE [1-6]\.";
gzip_buffers 16 8k;

これをincludeしてブラウザで確認
# less 01_hoge.conf

server {
    listen       80;
    server_name  dev.hoge.jp;

    root    /home/httpd/project/web/wordpress;

    # Gzip
    include conf.d/global/gzip.conf;

    # WordPress Setting
    include conf.d/global/wordpress_restrictions.conf;
    #include conf.d/global/wordpress_dev.conf;
    include conf.d/global/wordpress_live.conf;
}

nginx再読み込み
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload

 

関係ないけどRedisを利用したオブジェクトキャッシュを有効にしたら、パフォーマンスが悪くなった。

 

< Related Posts >

2015年11月17日火曜日

TCP/IPとUNIX Socketの接続でどれくらい違うか

tcp-ip_unix-socket_connectionNginxからPHP-FPMの接続とPHP-FPMからMariaDBの接続をTCP/IPとSocketで比較してみた。

環境: CentOS 6.7, nginx 1.8.0, PHP 5.6.15, MariaDB 10.0.22

基本的な概念は下記記事が分かりやすい。

 

リクエストはWindows上のab.exe(Apache Bench)からMac上のVMware Fusionの仮想マシン(CentOS)にあるWordPressに対して行う。

まずはPHP-FPMもMariaDBもTCP/IP接続で計測

C:> .\ab.exe -n 50 -c 5 http://dev.hoge.or.jp/

1回目:14.03 [#/sec]
2回目:14.00 [#/sec]
3回目:19.92 [#/sec]
平均: 15.98 [#/sec]

PHP-FPMへの接続をUNIX Socketに変えてみる。
PHP-FPMの設定
# less /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm/www.sock

Nginxの設定
# less /etc/nginx/conf.d/hoge.conf

#fastcgi_pass  127.0.0.1:9000;
fastcgi_pass   unix:/var/run/php-fpm/www.sock;

サービス再起動
# /etc/rc.d/init.d/php-fpm restart
# /etc/rc.d/init.d/nginx restart

sockファイルをnginxから読み取れるように権限を変更しないと「502 Bad Gateway」になる
# chown nginx.www /var/run/php-fpm/www.sock

計測実行

1回目:18.35 [#/sec]
2回目:17.64 [#/sec]
3回目:14.01 [#/sec]
平均: 16.66 [#/sec]

ちょっとだけ速くなった。

 

次はMariaDBへの接続をUNIX Socketに変えてみる。

YUM経由でインストールした場合は/var/lib/mysql/mysql.sockがデフォルトらしい。

wp-config.phpを変更

//define('DB_HOST', 'localhost');
define('DB_HOST', 'localhost:/var/lib/mysql/mysql.sock');

計測実行

1回目:18.23 [#/sec]
2回目:14.70 [#/sec]
3回目:18.44 [#/sec]
平均: 17.12 [#/sec]

 

もっと大量のデータを取れば違いが出るかもしれないが、体感速度は何も変わらない。

Web案件ではTCP/IPで統一することにした。proxy_cacheやfastcgi_cacheで体感速度を上げる。

アプリ案件の場合は、Node.jsからDBに接続するときにUNIX Socketを使った方がよさそう。

 

< Related Posts >

2015年11月16日月曜日

アプリを別のアカウントへ移行(譲渡)

app_transferAndroidアプリ、iPhoneアプリを別アカウントへ移行させたときの覚書。

 

目次

  1. Androidアプリを移行
  2. iOSアプリを譲渡

 


1.Androidアプリを移行

公式ヘルプを参考に

「デベロッパー コンソールの登録に使用した取引 ID」が少し分かりにくい。Googleペイメントでデベロッパー登録したときの取引ID。

google-payment

別料金もかからずすぐに反映された。

 


2.iOSアプリを譲渡

下記サイトが参考になる。

。。。一週間経っても移行先のアカウントにアプリが表示されないため、サポートに問い合わせてみた。

その後2回ぐらいサポートに督促のメールを送って、申請から約1ヵ月後に移行先アカウントにアプリが表示された。

メンバーセンターのApp IDsも移行される。

「Provisioning Profiles」は新規作成する。

別料金はかからなかった。

 

< Related Posts >

2015年11月10日火曜日

titaniumでビルドしたAPKファイルを解凍して中身をチェック

android_unziptitaniumでビルドしたAPKの中身がどうなっているか調査したときの覚書。

環境: Titanium SDK 3.5.1.GA

参考サイト

apkファイルはzip形式でアーカイブされているだけなので、unzipで解凍できる。
$ mkdir temp
$ cd temp
$ cp ../project/build/android/bin/hoge.apk ./
$ unzip hoge.apk

assetsディレクトリに画像やフォントファイルがそのまま出力されている。

ソースコードはclasses.dexに入っているらしい。

これを変換するツールをダウンロードする。

ダウンロードしたdex2jarを解凍。実行可能に
$ unzip dex2jar-2.0.zip
$ chmod +x dex2jar-2.0/*.sh

実行
$ ./dex2jar-2.0/d2j-dex2jar.sh classes.dex

エラー

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/googlecode/dex2jar/tools/Jar2Dex : Unsupported major.minor version 51.0

JDK 1.7でないとダメみたい。

前の記事などを参考にJDK 1.7にして再実行。
$ ./dex2jar-2.0/d2j-dex2jar.sh classes.dex

dex2jar classes.dex -> ./classes-dex2jar.jar

jarを展開
$ jar -x < classes-dex2jar.jar

ダウンロードしたjadを解凍して実行可能に
$ unzip jad158g.mac.intel.zip
$ chmod +x jad

変換実行
$ ./jad -d output -r -s java **/*.class

outputディレクトリに読めるソースコードが展開される。

titaniumで作成したjsファイルは/com/hoge/AssetCryptImpl.javaに難読化されて格納されている。

ファイル名とエンコードされたハッシュ値の範囲が書いてあるので、復元できなくもない。

難読化されているとはいえパスワードとか重要な値はソースコードに書かない方がいいみたい。

 

< Related Posts >

2015年11月9日月曜日

【Titanium】JDK 1.7だとエラーになるのでJDK 1.6をインストール

jdk17_16Titaniumの開発でAndroidデバイスにインストールして動作確認しようとしたらエラーになったときの覚書。

環境:Mac OS X El Capitan 10.11.1, Titanium SDK 5.0.2.GA

エラーメッセージ
$ appc ti build -p android -T device

[ERROR] Titanium requires JDK 1.6 when building on Mac OS X.
[ERROR] You can download it from http://appcelerator.com/jdk-osx
[ERROR] If you still see this message, then you may need to set the JAVA_HOME to help Titanium locate the JDK.
[ERROR] To see which JDKs Titanium finds, run "appc ti info --types jdk --output json".

参考になったフォーラムの投稿記事

結局JDKをインストールするしかないみたい。

公式サイトからダウンロードする

インストールされた場所を確認
$ ls /Library/Java/JavaVirtualMachines/

1.6.0.jdk       jdk1.7.0_80.jdk

1.7と切り替えたいので下記記事が参考になった。

java6に切り替えてみる。
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.6`

確認
$ echo $JAVA_HOME

/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

titaniumコマンドを使って確認
$ ti info --types jdk

デフォルトで1.6を使うように設定しておく
$ less ~/.bash_profile

# Use JDK 1.6
export JAVA_HOME=`/usr/libexec/java_home -v 1.6`

 

< Related Posts >

2015年11月6日金曜日

TV SlideViewの代替アプリ「sMedia TV Suite」を試す

movie_transfer_mobileTV SlideViewのプラグインZenFone 2 Laserに未対応で「お出かけ転送」出来ないので、代わりのDTCP-IP対応アプリを探したときの覚書。

自宅の環境

まずは昔使っていたTwonky Beamを試してみた(700円)。

転送途中でなぜかWifiが切断される。
→ あとでルーターの設定とかいじってたら直った。

他にもDTCP-IP対応アプリがあったので購入してみた。

3つとも使ってみて、簡単な比較表を作ってみた。

  TV SlideView Twonky Beam sMedio TV Suite
値段 500円 700円 900円
動画操作 CMスキップ
(たまに失敗する)
30秒スキップ
10秒戻し
30秒スキップ
10秒戻し
スキップが安定しない
お出かけ転送 レコーダーがSony製ということもあり転送が安定してる
転送はバックグラウンドで行うので他の作業ができる
BDZ-EW510から転送した動画の音飛びがひどい
nasneとの連携は問題なし
転送中はアプリを切り替えてはダメ
BDZ-EW510との接続がうまくいかないことが多い
nasneとの連携は問題なし
転送中はアプリを切り替えてはダメ
SDカード保存 × ×
使い勝手 使いやすい シンプルで分かりやすい 無駄なページが多くて使いにくい
感想 録画番組を削除する目的で使用中 悪くはない 「SDカード保存」が決めてでこれを使っている

sMedio TV SuiteのUI改善を期待

 

< Related Posts >

2015年11月3日火曜日

PhpStorm10.0でTitanium開発用コード補完設定

phpstorm_titaniumPhpStorm 10.0にアップグレードしてTitanium用コード補完を設定したときの覚書。

 

環境(WindowsからMac上のソースコードにアクセス)

Windows: PhpStorm 10.0, Node.js 4.2.1
Mac: Node.js 0.10.37

 

目次

  1. 設定からダウンロードできない
  2. tsdtypingsをインストール
  3. PhpStorm側で設定
  4. Globalを個別に設定

 


1.設定からダウンロードできない

PhpStormのSettings → Languages & Frameworks → JavaScript → Librariesから「Download...」しようとしてもtitaniumがなくなっている。。。

最近はTSDというTypeScirptで書かれた書式設定用パッケージマネージャーを使うらしい。

 


2.tsdtypingsをインストール

Macのコンソール上でtsdをインストール
$ sudo npm install tsd -g

titanium用書式設定を検索
$ tsd query titanium

インストール
$ tsd install titanium --save

tsd.jsonとtypingsディレクトリが作成された。package.jsonとnode_modulesディレクトリの関係と同じ。


<2016/03/22 追記>
tsdがdeprecatedになったのでtypingsに変更
$ sudo npm remove tsd --global
$ sudo npm install typings --global

検索
$ typings search --name titanium

既存のtsdからアップグレード
$ rm -rf typings
$ typings init --upgrade
$ typings install
$ rm tsd.json

 


3.PhpStorm側で設定

Librariesの設定画面で「Add...」からtypingsディレクトリを選択する。

エディタ内でTiとか打ってコード補完されるか確認

 


4.Globalを個別に設定

ただL()がUndefinedだと怒られる。

前は設定で直った気がするけど、今回はダメなので直に指定する。

typings/tsd.d.tsに下記のように追記する。

/// <reference path="titanium/titanium.d.ts" />
var L = Global.L;

他にもあるようならtypings/titanium/titanium.d.tsの"declare module Global"を参照しながら設定する。

そのうちGlobalをグローバルとして読み込むようになっているかもしれない。

 

< Related Posts >

2015年10月23日金曜日

ASUS ZenFone 2 Laserを購入

zenfone2-lazerNexus5が壊れたので、代替機はどれがいいものかと調査したときの覚書。

Nexus5は約19ヵ月で壊れたので、月々2,094円の計算。

Nexus5Xも気になるけど高い!!(¥59,300~)

考えた結果、格安スマホを買うことにした

  • 開発でゴリゴリ使うから寿命が短くなりがち
  • 1年半ぐらいで買い替えた方がよさそう
  • AndroidもOSとして落ち着いてきたので、最新を追わなくても大丈夫そう
  • 欲しいと思う端末がない
  • 格安スマホの実力を試してみたい

 

購入候補にあがった端末

 

ZenFone 2 Laserにした理由

  • ASUSが一番信頼できそう

端末自体はそんなに違いはないみたい。

 

使ってみた感想

  • 使うアプリはNexus5と変わらないし、サクサク感を含めて使い勝手は変わらない
  • 電源ボタンが端末の上部、音量ボタンが背面にあるのは間違えて押さなくていいかも
  • 電源ボタンを押さなくてもダブルタップでスリープ解除できるのが便利
  • 録画した番組をスマホ転送して見ていたけど、TV SlideViewのプラグインがZenFone2に対応してなくて「お出かけ転送」できない。これが一番痛い誤算

 

あとでDTCP-IP対応のアプリ探す。

 

ちなみに通話用のガラケー(F-01C)は5年ぐらい使っているけど、まだ現役でこれからも使う予定。


< 2016/03/03 Modified >

F-01CのSIMをマイクロSIMに変えて、ZenFone 2 Laserの2番目SIMとして装着してみた。

通常は使えないが、「設定」→「モバイルネットワーク」→ 「優先ネットワークタイプ」を「2G」にすると使えるようになる。

そうすると格安SIM(IIJmio)が使えなくなる。

通常は「2G」に設定しておいて、Wifi環境がないところでネットワークを使いたい場合は「2G/3G/4G」に変更する使い方で運用中。

Docomo側で制御しているらしい。そのうち使えなくなるかもしれない。

2年縛りの期限が来たらIIJmioの音声SIMに変更する予定。


 

< Related Posts >

2015年10月22日木曜日

Nexus 5が故障 → 電池交換 → ダメ

break_smartphone1年半前に買ったNexus5が突然電源が切れて、起動しなくなったので、電池交換してみたときの覚書。

現象

  • 電源ボタン長押ししても起動しない
  • 電源ケーブルを指すと一瞬「Google」の文字が表示された後、すぐ再起動がかかる。これがずっとループする
  • 電源ケーブルを指してループしているときに、音量ボタンの下を長押ししているとセーフモードに入りそうな画面になるがすぐ再起動がかかってループ

ちなみに数日前にAndroid 6にアップデートした。

 

Googleストアサポートに電話してみた。

最初の番号を押してカテゴリー分けされる所で戸惑う。確か
1.購入に関する問い合わせ → 3.端末の故障に関する問い合わせ
という順番で押した気がする。

状況を説明すると、付属の充電ケーブルを使ってほしいとか言われる。

こちらはバッテリーが原因だと思うので交換出来ないかと聞いてみると

  • Google ストア サポートでバッテリー交換はできない
  • LGのサポートに電話して、修理もしくはバッテリーの交換になる
  • サポート期間の1年を過ぎているので有償になる

という回答だった。予想はしていたので「そうですよね」で電話は終了。

 

自分でバッテリー交換してみることにした。

参考サイト

 

Amazonで購入したものたち

バッテリーを購入してから到着まで4日かかった。店舗の住所を確認すればよかった。

 

すでに持ってたもの

 

裏カバーを外すのに失敗して、一箇所ツメをグリグリして切断してしまった。。。

あとは参考サイトに従って交換は無事完了。

。。。が、電源を押してみても起動せず。

電源ケーブルを挿してみても最初の症状と同じ。原因はバッテリーではないみたい。この届いたバッテリーが壊れていない保証はないけど。

諦めて、新しいスマホを買うことにした。

 

バッテリーの到着が遅れて焦ったけど、Google ChromeにLINEの拡張機能を入れといて助かった。

 

< Related Posts >

2015年10月13日火曜日

一眼レフカメラデビュー。「ニコン D5500」を買った

nikon-d5500仕事の撮影は他の人にお願いしていたけど、カメラのスキルも覚えようと一眼レフカメラを買った。

買ったのは「ニコン D5500

これに決めた理由

  • 自撮りも出来るバリアングルタッチパネル
  • 手頃な価格(コストパフォーマンス)
  • 軽量

キャノンかニコンかで迷ったときは下記記事が参考になる。

 

 

価格.comでみると本体のみよりレンズキットの方が安かった。71,622円で購入。

付属のレンズと購入した単焦点レンズ

 

その他購入した関連グッズ

本体も含め合計金額は132,997円。

 


< 2016/02/25 Modified >
その後追加購入した関連グッズ。

さらに動画を撮りたくなってNDフィルターを購入

追加分141,665円。

前のと足すと274,662円。


 

ちなみに2年前に買ったSony製デジカメ。

 

 

さっそくうちのニャンズをパシャリ。やっぱりデジカメとは一味違う。

DSC_0023DSC_0017

 

その他、触ってみた感想

  • レンズキット付属のレンズはデジカメとあまり変わらない
  • レンズを変えたら色とボケ具合が素晴らしい写真になったので、デジカメと一眼レフの違いを何となく体感できた気がする
  • 専用アプリ「WirelessMobileUtility」を使うと通知エリアに表示し続けるのを直してほしい

 

< Related Posts >

2015年10月2日金曜日

グループウェア「Aipo」を別サーバーに移行

aipo移行作業をしたときの覚書。ちなみにAipoのインストール・導入は初めて。

環境

移行元: CentOS 5.10, Aipo 7.0.2.0
移行先: CentOS 6.7, Aipo 7.0.2.0

 

参考

 

目次

  1. 移行先に必要なライブラリをインストール
  2. 同じバージョンのAipoを移行先にインストール
  3. 移行元からデータを移行
  4. 移行先サーバーでリストア
  5. nginxにリバースプロキシの設定

 


1.移行先に必要なライブラリをインストール

移行先のサーバーで必要なライブラリをインストールする。
# yum install gcc nmap lsof unzip readline-devel zlib-devel sudo

 


2.同じバージョンのAipoを移行先にインストール

公式サイトのダウンロードから移行元と同じバージョンをダウンロードしてくる。

解凍して/usr/localに配置
# tar -xzvf aipo7020aja_linux64.tar.gz
# cd aipo7020aja_linux
# tar -xzvf aipo7020.tar.gz
# mv aipo /usr/local/

インストール実行
# cd /usr/local/aipo
# sh ./bin/installer.sh

ファイヤーウォール設定
# system-config-firewall-tui

ポート番号: 81
プロトコル: tcp

スタートしてみる
# ./bin/startup.sh

found temp directory
Using CATALINA_BASE:   /usr/local/aipo/tomcat
Using CATALINA_HOME:   /usr/local/aipo/tomcat
Using CATALINA_TMPDIR: /usr/local/aipo/tomcat/temp
Using JRE_HOME:        /usr/local/aipo/./jre
Using CLASSPATH:       /usr/local/aipo/tomcat/bin/bootstrap.jar
Starting Aipo Version 7.0.2.0
Aipo URL: http://192.168.1.86:81/aipo/

http://192.168.1.86:81/aipo/にアクセスすると、ログイン画面が表示された。

 


3.移行元からデータを移行

移行元でバックアップ処理
# cd /usr/local/aipo
# ./bin/backup_handler.sh

確認
# ls backup

バックアップファイルを移行先に移動させる
# cd backup/
# tar -czvf aipo_data.tgz 2015092919360/
# mv aipo_data.tgz ~/

 


4.移行先サーバーでリストア

バックアップデータを移行先へ置いて解凍。
# mv aipo_data.tgz /usr/local/aipo/backup/
# cd /usr/local/aipo/backup/
# tar -xzvf aipo_data.tgz
# rm aipo_data.tgz

リストア実行
# cd /usr/local/aipo/bin/
# ./restore_handler.sh

pg_restore: [archiver (db)] could not execute query: ERROR:  role "aipo_postgres0" does not exist
    Command was: GRANT ALL ON SCHEMA public TO aipo_postgres0;

PostgreSQLに接続して確認する

パスワードの確認
# cd /usr/local/aipo/
# less tomcat/webapps/aipo/WEB-INF/datasource/dbcp-org001.properties

データベース名も「org001」というのが判明。

接続
# ./postgres/bin/psql --username=aipo_postgres org001

Role(ユーザー)の確認
org001=# \du

              List of roles
   Role name   | Attributes  | Member of
---------------+-------------+-----------
aipo_postgres | Superuser   | {}
               : Create role
               : Create DB

「aipo_postgres0」というRoleは確かにいない。

作ることにした。
org001=# CREATE ROLE aipo_postgres0 WITH SUPERUSER PASSWORD 'hogehoge';

確認
org001=# \du
org001=# \q

Aipoの設定ファイルを編集。「aipo_postgres0」にする。
# less tomcat/webapps/aipo/WEB-INF/datasource/dbcp-org001.properties
# less tomcat/webapps/ROOT/WEB-INF/datasource/dbcp-org001.properties

Aipoを再起動してリストアを実行
# ./bin/shutdown.sh
# ./bin/startup.sh
# ./bin/restore_handler.sh

ブラウザでアクセスしてみるとエラー

セッションがタイムアウトしました。

ブラウザが切り替わらない場合は、再読み込みをお願いいたします。
timeout

ログを確認する
# less tomcat/logs/aipo.log

2015-09-30 12:29:15,090 <ERROR> (http-81-1) [JetspeedLogger.java:157]- [org001] Failed to retrieve user 'anon'
org.apache.cayenne.CayenneRuntimeException: [v.2.0.4 October 12 2007] Error detecting database type

権限周りが怪しい感じ。さっきは「aipo_postgres0」を作っただけなので、権限を設定してみる。
# ./postgres/bin/psql --username=aipo_postgres org001

org001=# ALTER ROLE aipo_postgres0 WITH CREATEROLE CREATEDB LOGIN;
org001=# \du
org001-# \q

Aipoを再起動
# ./bin/shutdown.sh
# ./bin/startup.sh

ブラウザでアクセスすると無事ログイン画面が表示された。

 


5.nginxにリバースプロキシの設定

URLにポート番号が付いているのはカッコ悪いのでリバースプロキシの設定をする。

# cd /etc/nginx/conf.d/
# vi aipo.conf

#
# Aipo
#
server {
    listen       80;
    server_name  gw.hoge.co.jp;

    access_log /var/log/nginx/aipo.access.log;
    error_log /var/log/nginx/aipo.error.log;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:81;
        client_max_body_size    20M;
    }
}

nginx設定読み込み
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload

 

< Related Posts >

2015年9月29日火曜日

CentOS7にDockerをインストール

docker_install_to_centosDockerを理解しつつインストールして試したときの覚書。

環境: CentOS 7.1, docker 1.7.1-108

 

目次

  1. やりたいこと
  2. Dockerとは
  3. CentOS7上にDockerをインストール
  4. コンテナを起動

 


1.やりたいこと

  • Dockerで開発環境を構築
  • Google Container Engine(GKE)にDockerをアップロード
  • 本番環境のバージョンアップはDockerを切り替えるだけで、サーバーメンテナンス不要に
  • GitLab, Jenkins(Drone), Redmineとうまいこと連携して幸せに

 


2.Dockerとは

まずはDockerを理解するところから。私が読んだ本はこちら。

 


3.CentOS7にDockerをインストール

Dockerエンジン(DockerサーバーとDockerクライアント)をインストール
# yum install docker

確認
# docker version

Client version: 1.7.1
Client API version: 1.19
Package Version (client): docker-1.7.1-108.el7.centos.x86_64
Go version (client): go1.4.2
Git commit (client): 3043001/1.7.1
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Package Version (server): docker-1.7.1-108.el7.centos.x86_64
Go version (server): go1.4.2
Git commit (server): 3043001/1.7.1
OS/Arch (server): linux/amd64

サービスの起動と有効化
# systemctl start docker
# systemctl enable docker

確認
# systemctl -t service

「docker-storage-setup.service」がfailedになっているので実行してみる。
# docker-storage-setup

Rounding up size to full physical extent 84.00 MiB
Volume group "centos" has insufficient free space (16 extents): 21 required.

Volume Groupを確認
# vgs

VG     #PV #LV #SN Attr   VSize  VFree
centos   1   3   0 wz--n- 79.51g 64.00m

よく分からないので後回し

 


4.コンテナを起動

Docker HubにあるCentOSのDockerイメージをダウンロード。
# docker pull centos

ダウンロードしたイメージの一覧
# docker images

その他のイメージを検索
# docker search centos

検索するときはDocker Hubの方がわかりやすい。

 

こちらのチュートリアルに従って「Hello world」を表示してみる

# docker run centos:latest /bin/echo 'Hello world'

Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
Hello world

コンテナ上のコンソールでコマンドを実行してみる(インタラクティブ コンテナ)
# docker run -t -i centos:latest /bin/bash
[root@b12bbdf7b12a /]# more /etc/redhat-release

CentOS Linux release 7.1.1503 (Core)

[root@b12bbdf7b12a /]# exit

コンテナの一覧(停止中も含む)
# docker ps -a

停止中のコンテナを全部削除
# docker rm `docker ps -a -q`

 

次回は開発環境用のコンテナを作成する。

 

< Related Posts >

2015年9月9日水曜日

【Titanium】ModuleのGUIDを変えてビルド

titanium_guidTitaniumの開発でGitHubにあるモジュールをcloneしてzipファイルをそのままコピーしてビルドしたら下記エラーになった時の覚書。

環境: Titanium SDK 3.5.1.GA

エラーメッセージ

Unlicensed module(s) detected. You must be a subscriber to use one or more of the modules included with this project.

サポートBBSに回答があった。

モジュールのguidを変更してビルドするといいらしいのでやってみた。

 

まずはgit cloneするところから。
$ cd Documents/Titanium_Studio_Workspace/
$ git clone https://github.com/iamyellow/TiKeyboardListener.git

モジュールのguidを変更する
$ cd TiKeyboardListener/

UUIDを生成
$ uuidgen

D9D4FF49-EEBD-4485-A973-91F013DF2401

それを貼り付け
$ vi manifest

#guid: 48556ddf-0d85-4e4e-afc0-c430bd449826
guid: D9D4FF49-EEBD-4485-A973-91F013DF2401

SDKのバージョンも修正
$ vi titanium.xcconfig

TITANIUM_SDK_VERSION = 3.5.1.GA

Titanium Studioを開いてFile → Import... → 「Existing Folder as New Project」からモジュールとしてインポート。

プロジェクトを右クリック → Publish → Package - iOS Moduleから使用するプロジェクトを選択(Mobile App Project)して「Finish」

 

< Related Posts >

2015年9月8日火曜日

さくらのメールボックスのメールをGmailで送受信

sakura-mailbox自前メールサーバーから「さくらのメールボックス」へ移行したときの覚書。

「hoge.sakura.ne.jp」がさくらのメールボックス上のドメイン名だとする。

 

目次

  1. MXレコードの設定
  2. さくらのメールボックス管理画面でアカウント作成
  3. GmailからSMTP設定して送信できるようにする

 


1.MXレコードの設定

ドメインの管理はValue-Domain(バリュードメイン)で管理しているのでDNSの設定からMXレコードを追加する

mx hoge.sakura.ne.jp. 10
txt @ v=spf1 include:_spf.google.com a:www1234.sakura.ne.jp ~all

spfは管理画面の「サーバー情報の表示」にあるホスト名を登録する。

「mail.hoge.co.jp」を「hoge.sakura.ne.jp」の別名にする場合

cname mail hoge.sakura.co.jp.

最後のドットが必要

 


2.さくらのメールボックス管理画面でアカウント作成

「メールアドレスの管理」からアカウントを作成。

この時に「メール転送」項目に転送先Gmailを追加して、「転送専用にする」にチェック。

転送されるかメールを送って確認。

ウェブメールにログインして個別に設定することも可能。

https://secure.sakura.ad.jp/rscontrol/?webmail=1

 


3.GmailからSMTP設定して送信できるようにする

Gmailの設定 → アカウントとインポート → メールアドレスの追加

image

「エイリアスとして扱います」のチェックを外す。

image

確認のメールが送信される。

 

< Related Posts >

2015年8月27日木曜日

【CentOS6】YUM(Remi)経由でPHP5.4からPHP5.6に移行

php-54to56PHP5.4のサポートが切れるのでPHP5.6にアップグレードしたときの覚書。

環境: CentOS 6.7, PHP 5.4.44

 

目次

  1. 現状の確認とバックアップ
  2. PHP 5.6にアップグレード
  3. 日本語形態素解析「MeCab」を再インストール

 


1.現状の確認とバックアップ

PHP 5.5と5.6の変更点を確認

インストールされているパッケージを一覧表示
# yum list installed | grep php

php.x86_64                5.4.44-1.el6.remi      @remi
php-cli.x86_64            5.4.44-1.el6.remi      @remi
php-common.x86_64         5.4.44-1.el6.remi      @remi
php-devel.x86_64          5.4.44-1.el6.remi      @remi
php-fpm.x86_64            5.4.44-1.el6.remi      @remi
php-gd.x86_64             5.4.44-1.el6.remi      @remi
php-mbstring.x86_64       5.4.44-1.el6.remi      @remi
php-mcrypt.x86_64         5.4.44-1.el6.remi      @remi
php-mysqlnd.x86_64        5.4.44-1.el6.remi      @remi
php-pdo.x86_64            5.4.44-1.el6.remi      @remi
php-pear.noarch           1:1.9.5-13.el6.remi    @remi
php-pecl-igbinary.x86_64  1.2.1-1.el6.remi.5.4   @remi
php-pecl-memcache.x86_64  3.0.8-2.el6.remi.5.4   @remi
php-pecl-mongo.x86_64     1.6.11-1.el6.remi.5.4  @remi
php-pecl-msgpack.x86_64   0.5.6-1.el6.remi.5.4   @remi
php-pecl-redis.x86_64     2.2.7-1.el6.remi.5.4   @remi
php-pecl-xdebug.x86_64    2.3.3-1.el6.remi.5.4   @remi
php-process.x86_64        5.4.44-1.el6.remi      @remi
php-xml.x86_64            5.4.44-1.el6.remi      @remi

 

開発環境はVMware上で動いているので、スナップショットをとっておく。

 


2.PHP 5.6にアップグレード

yumの設定ファイルを編集して「remi-php56」を有効にする
# vi /etc/yum.repos.d/remi.repo

[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

アップグレード
# yum update

Warningがたくさん出るので心配になる。

確認
# php --version

PHP Warning:  PHP Startup: apc: Unable to initialize module
Module compiled with module API=20100525
PHP    compiled with module API=20131226
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: mecab: Unable to initialize module
Module compiled with module API=20100525
PHP    compiled with module API=20131226
These options need to match
in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/phalcon.so' - /usr/lib64/php/modules/phalcon.so: undefined symbol: zend_unmangle_property_name in Unknown on line 0
PHP 5.6.12 (cli) (built: Aug  6 2015 17:14:56)

APC、Mecab、Phalconのエクステンションがうまく動かないらしい。

とりあえずそれぞれ読み込まないように削除
# cd /etc/php.d/
# rm -f apc.ini mecab.ini phalcon.ini

確認
# php --version

PHP 5.6.12 (cli) (built: Aug  6 2015 17:14:56)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans

再起動
# /etc/rc.d/init.d/nginx restart
# /etc/rc.d/init.d/php-fpm restart

実行ユーザーを変更しているので、sessionの書き込みディレクトリの権限を変更
# chown nginx.www -R /var/lib/php/

ブラウザで動くか確認。

思ったより表示速度が速くなっている気がする。

 


3.日本語形態素解析「MeCab」を再インストール

APCはredisに置き換えるとして、mecabは使用中のプロジェクトがあるので再インストールする。

一旦削除する必要があった
# pear uninstall opendogs/mecab-0.5.0
# pear install opendogs/mecab-0.5.0

specify pathname to mecab-config [no] : /usr/local/bin/mecab-config

# echo "extension=mecab.so" > /etc/php.d/mecab.ini

再起動
# /etc/rc.d/init.d/php-fpm restart

確認
# php --ri mecab

mecab

MeCab Support => enabled
Module Version => 0.5.0

Version Info => Compiled => Linked
MeCab Library => 0.996 => 0.996

Directive => Local Value => Master Value
mecab.default_rcfile => no value => no value
mecab.default_dicdir => no value => no value
mecab.default_userdic => no value => no value

ブラウザでphpinfoを表示してその他の設定も確認しといた方がいい。

 

< Related Posts >

2015年8月19日水曜日

【Node.js】非同期処理をasyncからPromise(bluebird)に乗り換えるか

parallelES6から非同期処理の仕組みが強化されたので調査したときの覚書。

今まではasync.jsを使っていた。全く問題なかったけど、速度的には遅い方らしい。

 

目次

  1. Promise
  2. Generator
  3. 今後どう書いていくか

 

まずはES6で標準入りしたPromiseとGeneratorを理解するところから。

 


1.Promise

下記サイトが分かりやすい。

Promiseは非同期処理を抽象化したオブジェクトとそれを操作する仕組みの事をいいます。

今までコールバックしていたのをPromiseを通して操作すると一貫した書き方が出来るようになる。

Promiseをラッピングして使いやすくしているライブラリがbluebird

よく使うasync.parallel()はPromise.all()で置き換えることが出来る。

 


2.Generator

処理を任意の時点で止めて再開できるフロー制御の仕組み。

「function*」でGeneratorであることを宣言。「yield」キーワードで止める箇所を指定。

非同期関数をyieldで宣言して、順次実行するのに便利。

Generatorを利用したフロー制御のライブラリがco

サンプルプログラムとかは下記記事を参考に。

 


3.今後どう書いていくか

個人的にGeneratorの「function*」「yield」という見慣れないキーワードを書くのに抵抗があるので、Promise中心でいく予定。

既に試してみた方の記事もあるので参考に。

 

< 2015/08/21 Modified >
Promiseで並列処理するときにタスクごとPromiseオブジェクトを返さないといけない。

これが今までの設計思想に多大なインパクトを与えるので、もうちょいasync.jsを使い続けることにした。

テヘペロ

 

< Related Posts >

2015年7月21日火曜日

Titaniumでlodashを使う

titanium_lodashTitaniumで開発するときは外部ライブラリを使わずネイティブなJavaScriptの書き方をしていたけど、Alloyはunderscore.js使っているし、新規開発はlodashを使おうと設定したときの覚書。

ちなみにAlloyを使わずにレガシーな書き方をしてる。

環境: OS X 10.10.4, Titanium SDK 4.1.0.GA

 

参考

 


1.lodashをダウンロード、インストール

今後のバージョンアップを簡単にするためにlodashコマンドをインストール
$ cd /path/to/project/
$ sudo npm install -g lodash-cli

コマンド確認
$ lodash --help

「modularize」にしようか迷ったけど、とりあえず一つのファイルの方が管理しやすいので「modern」でインストール。
$ lodash modern --production --output Resources/lib/lodash.js

var _ = require('lib/lodash');

 

 


2.PhpStrom用設定

なぜかPhpStormでunresolvedのWarningが出るので、npmとしても追加する。
$ npm install lodash --save-dev

node_modulesを「library home」に設定。

Settings -> Languages & Frameworks -> JavaScript -> Libraiesで「lodash-DefinitelyTyped」を追加しても「unresolved」は消えなかった。

 

複雑な処理はAPI(サーバー)側でやっているので、そんなにlodashの出番がない。。。

 

< Related Posts >

2015年7月13日月曜日

CentOS6にfontcustomをInstallしてWebフォントを作成

icon_font_centosIE8のサポートが2016/01/12に終了するし、受注したホームページ案件にWeb(アイコン)フォントを使用したときの覚書。

WebフォントはIE9以上でないと表示できない。

簡単に流用出来てしまうし、手間と効果を考えるとホームページ程度なら画像で十分な気もする。

環境: CentOS 6.6, fontforge-20090622, fontcustom-1.3.8

 

目次

  • fontcustomをインストール
  • SVGをフォントに変換
  • Twitter Bootstrapと併用する

 


1.fontcustomをインストール

gemを実行するのでRubyが必要。前の記事を参考に。

あとはGitHub上のREADME通りに。

フォント作成プログラムfontforgeをインストール
# cd /opt/software/
# yum install fontforge

woffに変換用プログラムをインストール
# wget http://people.mozilla.com/~jkew/woff/woff-code-latest.zip
# unzip woff-code-latest.zip -d sfnt2woff && cd sfnt2woff && make && sudo mv sfnt2woff /usr/local/bin/

gem経由でfontcustomをインストール
# gem install fontcustom

確認
# fontcustom --version

fontcustom-1.3.8


 


2.SVGをフォントに変換

デザイナーが作成したイラストレーターファイルからSVGとして書き出す。出力時のオプション。

image

変換コマンド実行
# /path/to/project/fonts/
# fontcustom compile svg/ --name=icons --output=icons

CSSも出力してくれるので使いやすい。

 


3.Twitter Bootstrapと併用する

BootstrapのLESSを読み込んでいるので、glyphiconを拡張する書き方にした。

参考

main.less

@font-face {
font-family: "icons";
src: url("../fonts/icons.eot");
src: url("../fonts/icons.eot?#iefix") format("embedded-opentype"),
url("../fonts/icons.woff") format("woff"),
url("../fonts/icons.ttf") format("truetype"),
url("../fonts/icons.svg#icons") format("svg");
font-weight: normal;
font-style: normal;
}
.icons:extend(.glyphicon) {
font-family: 'icons';
}
.icons-balloon:before {
content: "\f100";
}
.icons-corner:before {
content: "\f101";
}
 
test.html
<span class="icons icons-corner" aria-hidden="true"></span>

 

 

< Related Posts >

2015年7月10日金曜日

子育て支援ウェブサービス

teniteoたなごころを開発しているので、気になったサービスの覚書。WBSなどテレビで紹介されてた。

 

参考

 

 

タスカジ(https://taskaji.jp/

image

働いているママと働きたいママを結ぶ「家事シェア」サービス。

1時間1,500円の安さ。

フィリピンの人が多いらしい。

アプリ:なし
※ウェブがスマホ対応


 

おかん(http://okan.jp/

image

毎月真空パックされたおかずを郵送してくれる。

アプリ:なし

個人的に利用しているけど、メニューが変わり映えしないし、味付けも濃いので飽きてきた。


 

 

エニタイムズ(https://anytimes.co.jp/

image

「困った」と「できる」を繋ぐお仕事仲介サービス。

値段は自由に設定可能。

アプリ:あり


 

 

ベアーズ(http://www.happy-bears.com/

image

家事代行サービスの大手。

しっかりと教育された専任スタッフが家事代行してくれる。

アプリ:なし


 

 

cookpadベビー(http://www.happy-mama.com/

image

育児系情報サイト。

2015年5月からクックパッドに移管されて、レシピとの連携が大幅強化。

「はっぴーママ」は育児タウン誌

アプリ:なし


 

 

アズママ(http://asmama.jp/

image

登録した近所の人と子育てを助けあう。

謝金は500円~700円。利用者感で直接やり取り。仲介手数料なし。

アプリ:なし


 

 

 

< Related Posts >

2015年7月9日木曜日

npm install --globalを毎回実行するのが面倒くさい

npm-update-globalnvmでiojsを追っていると頻繁にnpm install --globalを実行するのが面倒くさい。

設定ファイルから簡単にインストール出来ないかと調査したときの覚書。

環境: nvm 0.25.4

下記サイトで議論されている。

 

package.jsonに書くのは推奨されてないみたいなので自分用のシェルスクリプトを書くことにした。

# su - node
$ vi npm-global.sh

#! /bin/sh

# Install Node Packages
npm install -g grunt-cli node-dev pm2 npmlist

# Show Installed List
echo
echo 'Completed!!'
echo
npm -g list --depth=0

$ chmod +x npm-global.sh
$ ./npm-global.sh

必要なものが増えたら書き足していく。

 

issueで「nvm reinstall-packages」を使えばいいという議論があるので、そのうち出来るようになっていると思う。

 

< Related Posts >

2015年7月8日水曜日

WP-CLIをInstallしてWordPressのVersion管理

wordpress_cliWordPressのインストール、アップデートを自動化したくて調査したときの覚書。

環境: CentOS 6.6, PHP 5.4.42, WordPress 4.2.2

WordPressをコマンドラインで管理する方法はいくつかある。

ライブラリ 説明
WP-CLI PHP Archive(PHAR)という形式で配布されている。
YeoPress yeomanというウェブアプリ向けのツール管理ソフトのWordPressジェネレーター。npmっぽく管理できる
Git GitHubにWordPressのリポジトリがあるので、ブランチをチェックアウトして運用する。

プラグインの単体テストもやる予定なので、WP-CLIをインストールしてみた。

参考

 

目次

  1. WP-CLIをインストール
  2. WordPressをインストール、アップデート
  3. プラグインの一覧とアンインストール
  4. テーマの一覧と削除
  5. 初期インストール時のwpコマンドまとめ

 


1.WP-CLIをインストール

公式サイトを参考に。

# curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# chmod +x wp-cli.phar
# mv wp-cli.phar /usr/local/bin/wp

rootでwp --infoを打つとエラーになるので、ユーザーを変更して確認
# su - node
$ cd /path/to/wordpress/
$ wp --info

PHP binary:     /usr/bin/php
PHP version:    5.4.42
php.ini used:   /etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 0.19.2

 


2.WordPressをインストール、アップデート

公式サイトもしくはwp helpでコマンドを確認。wp helpが分かりやすい
$ wp help

試しにWordPress 4.2.1をインストール
$ wp core download --version=4.2.1 --path=wordpress

確認
$ wp core version --path=wordpress

設定
$ wp core config --dbname=wordpress --dbuser=user --dbpass=pass --path=wordpress/

最新にアップデート
$ wp core update --path=wordpress/

 


3.プラグインの一覧とアンインストール

wp pluginコマンドを使う
$ cd wordpress/
$ wp plugin list

+---------+----------+-----------+---------+
| name    | status   | update    | version |
+---------+----------+-----------+---------+
| akismet | inactive | available | 3.1.1   |
| hello   | inactive | none      | 1.6     |
+---------+----------+-----------+---------+

アンインストール
$ wp plugin uninstall akismet hello

 


4.テーマの一覧と削除

wp themeコマンドを使う
$ wp theme list

削除
$ wp theme delete twentythirteen twentyfourteen

 


5.初期インストール時のwpコマンドまとめ

新しくサイトを構築するときのコマンドまとめ
$ cd /path/to/project
$ wp core download --path=wordpress
$ cd wordpress/
$ wp plugin uninstall akismet hello
$ wp theme delete twentythirteen twentyfourteen

あとはサイトに直接アクセスしてインストール実行。

設定ファイル書いてnpm installで終わり。。。という感じにするためにはYeoPressを利用する必要がありそう。

 

< Related Posts >

2015年7月6日月曜日

CoreOS入門。VMware FusionでCoreOSを起動してみる

coreos_on_vmware-fusiondockerを調査するためにCoreOSをインストールしてみたときの覚書。

環境: VMware Fusion 7.1.2

CoreOSはLinux Kernel 4.0なのでVMware Fusionでは対応してないと思ったら、公式にVMwareに対応した仮想マシンを配布しているのでダウンロードするだけで試せる。

 

目次

  1. CoreOSとは
  2. 仮想マシンをダウンロード
  3. 起動してSSH経由でアクセス

 


1.CoreOSとは

CoreOSはLinuxディストリビューションの一つ。

詳しくは下記参照

 

特徴

  • パッケージ管理(yum, apt)の代わりにdockerで全てのユーザーサービス(パッケージ)を管理
  • 複数台でのクラスタ構成をOSがサポート(CoreOS clusterと呼ぶ)。fleetを通して管理
  • CoreOS cluster上のサービスはホストのetcdを通して繋がる。データベースの接続先などetcdに問い合わせるとクラスタ内のどこかにあるアドレスを返す。
  • 自動アップデートが出来る。反映させるために再起動は必要。クラスタ構成しているならサービスの切り替えなどは自動でやってくれる

 


2.仮想マシンをダウンロード

公式ページからダウンロード

Stable → Browse Images → coreos_production_vmware_insecure.zip

 


3.起動してSSH経由でアクセス

解凍して、vmxファイルをダブルクリックするだけで起動する。

起動後のコンソール画面にIPアドレスが表示されているので、SSHでアクセスする。

image

SSHの秘密鍵は同封されている「insecure_ssh_key」を指定する。

今日のところはここまで。

 

いろいろな単語が出てくるけど、それぞれの違いと役割がまだわかっていない。

docker, etcd, fleed, fannel, Kubernetes

参考サイト

 

< 2015/09/14 Modified >
CoreOSはDockerに最適化されているけど、開発環境では慣れているCentOS上でDockerをインストールした方がやりやすい。

その場合はKernelの問題でCentOS7を推奨

 

< Related Posts >

2015年7月2日木曜日

Titanium + Socket.IO(WebSocket)について調査

titanium_socketioTitaniumでWebSocketを活用したリアルタイムアプリを作りたくて調査している時の覚書。

TiWSというTitaniumモジュールは管理する人が変わりながらメンテナンスはされているみたい。

Socket.io 1.0には対応していないみたい。

 

Socket.IOにはiOS, Android用のクライアントライブラリが公開されているので、これらをTitaniumモジュールとしてラッピングしたい

 

TitaniumモジュールでSwiftはまだ使えない?Titanium 4.0からはSwiftでも大丈夫になった感がある。

 

この前Google NextでFirebaseの話を聞いたので、こちらも気になったりしてる。

 

< Related Posts >

2015年7月1日水曜日

git(GitLab)ユーザーのrubyプロセスが100%に近くなる

gitlab_questionある日突然git fetchが失敗するので調べたときの覚書。

環境: CentOS 6.6, GitLab 7.11.4 → 7.12.0

 

Mac上でgitコマンドを打つと下記エラー
$ git fetch origin

remote: Counting objects: 48, done.
remote: fatal: unable to create thread: Resource temporarily unavailable
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

あれ?と思ってもう一度実行
$ git fetch origin

[FATAL] failed to allocate memory
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

SSH接続で既に失敗する。

サーバー側でSSHデーモンを再起動しようとすると「fork: メモリを確保できません」とエラーになった。

topコマンドを打つとgitユーザーがrubyコマンドを一生懸命実行していてcpu使用率が100%になっている。

試しにGitLabサービスを止めてみるとCPU100%状態が収まったので、GitLabが原因だと判明。
# gitlab-ctl stop

もう一度GtiLabを実行しながらログを確認。
# gitlab-ctl start
# tail -f /var/log/gitlab/unicorn/unicorn_stderr.log

/opt/gitlab/embedded/service/gitlab-rails/config/initializers/gitlab_shell_secret_token.rb:13:in `write': Permission denied @ rb_sysopen - /opt/gitlab/embedded/service/gitlab-rails/.gitlab_shell_secret (Errno::EACCES)

なんかエラーを吐き続けてる。

書き込みに失敗している様子。

プログラムを確認
# more /opt/gitlab/embedded/service/gitlab-rails/config/initializers/gitlab_shell_secret_token.rb

「Gitlab.config.gitlab_shell.secret_file」を設定すれば良さそう。

 

ここでGitLabをYUM経由で7.12.0にアップデートしたけど、reconfigureしてないと気づいてやってみる。
# gitlab-ctl reconfigure
# gitlab-ctl restart

。。。直ったっぽい。

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives