投稿日:2015年12月30日

環境

[CentOS]   5.6 (32bit版カーネル) 
[PHP]      5.4.17

問題A-1

  • 10進数の任意の値をn進数に変換する関数を作成して下さい。(nは1~16の正の整数)

  • サンプルはPHP。

サンプルA-1

  • 実行方法

    $ php changeDecimalToBaseN.php
    
  • ソース

投稿日:2015年12月06日

0.環境

[CentOS] 6.4 (64bit版カーネル)
[Apache] 2.2.15

1.セットアップ

  • 個人で借りているレンタルサーバーで、有料のSSL証明書を使っていたのですが、 有効期間切れを機にフリーのものに乗り換えてみました。

  • 最近 Public Beta に入った Let's Encrypt というサービスを利用します。

    Let's Encryptトップ

    下記ページに沿って進めます。(その他の参考ページは末尾に記載)

    Let's Encrypt 操作方法

    任意のディレクトリに Let's Encrypt クライアントをダウンロード。

    # cd /usr/local/src
    # git clone https://github.com/letsencrypt/letsencrypt
    # cd letsencrypt
    # ./letsencrypt-auto --help
    
  • おお! helpだから使い方が表示されるかと思いきや、依存関係のあるパッケージがダウンロードされた・・・

    しかも下記メッセージによると、どうやらPythonのバージョンが古くて失敗してるっぽい。

      :
    (省略)
      :
    Complete!
    WARNING: Python 2.6 support is very experimental at present...
    if you would like to work on improving it, please ensure you have backups
    and then run this script again with the --debug flag!
    
  • ググってみると同じ問題で悩んでる人がいました。

    letsencrypt-autoは Python 2.6では動かない

  • さらにググって下記ページに従ってPython2.7インストール。

    CentOS 6系は Python 2.7をインストールする必要あり

    実行コマンドは下記の通り。

    # yum install python27 python27-python-devel python27-python-setuptools python27-python-tools python27-python-virtualenv
    
  • python バージョンを調べる。

    # python --version
    Python 2.6.6
    

    (注) 2.6のままですが気にせず続行します。

    (yum管理外でPythonをソースからビルドしてインストールすると letsencrypt-auto が動かなくなりました)

  • コマンドを再実行すると、もうPythonが古い旨のメッセージは出なくなりました。

    # ./letsencrypt-auto --help
    
  • 続けてドメイン認証を試みます。

    # ./letsencrypt-auto --apache -d 【ドメイン名】
    
  • エラーメッセージが・・・(【】内は読み替え)

    Updating letsencrypt and virtual environment dependencies.......
    Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt --apache -d 【ドメイン名】
    Version: 1.1-20080819
    Version: 1.1-20080819
    The apache plugin is not working; there may be problems with your existing configuration.
    The error was: NoInstallationError()
    

    ユーザーガイドによるとApache2.2系だとapacheプラグイン(--apache)は使えないようです。

    となると、下記の通りstandaloneかwebrootのいずれかを実行しないといけません。

    If you want to use a webserver that doesn't have full plugin support yet, you can still use "standalone" or "webroot" plugins to obtain a certificate: (ユーザーガイド抜粋)

    僕の場合、1つのサーバーに複数のvirtual hostを立てているのでwebrootプラグインを使います。

    さらにwebrootプラグインだとApache無停止でいけるそうです。

  • 念のため、既に書いてあったSSL用のvirtual hostはコメントアウトしてApache再起動。

    #<VirtualHost *:443>
    #    :
    # 【省略
    #    :
    #</VirtualHost>
    
  • 下記コマンド実行。

    # ./letsencrypt-auto certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    
  • 連絡用e-mailを入力し、利用規約を確認します。

    email入力

    利用規約

  • エラーメッセージ。

    Updating letsencrypt and virtual environment dependencies.......
    Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    Version: 1.1-20080819
    Version: 1.1-20080819
    Failed authorization procedure. 【ドメイン名】 (http-01): urn:acme:error:unauthorized :: The client lacks sufficient authorization :: Invalid response from http://【ドメイン名】/.well-known/acme-challenge/【省略】 [【サーバーIP】]: 401
    
    IMPORTANT NOTES:
     - The following 'urn:acme:error:unauthorized' errors were reported by
       the server:
    
       Domains: 【ドメイン名】
       Error: The client lacks sufficient authorization
    
  • ドキュメントルートにファイルを配置して、インターネットからアクセスを試みているけど失敗してるっぽい・・・

    試しにブラウザから上記URLにアクセス。

    元々、port80(http)からport443(https)へリダイレクトする設定にしていたためエラーになっていました。

    リダイレクトを無効にし、ブラウザから上記URLにアクセスできることを確認した上で、再度サーバー上で下記を実行。

    # ./letsencrypt-auto certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    
  • 下記メッセージが表示され認証が成功!

    Updating letsencrypt and virtual environment dependencies.......
    Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly --webroot -w 【ドキュメントルート】 -d 【ドメイン名】
    Version: 1.1-20080819
    Version: 1.1-20080819
    
    IMPORTANT NOTES:
     - Congratulations! Your certificate and chain have been saved at
       /etc/letsencrypt/live/【ドメイン名】/fullchain.pem. Your cert will
       expire on 2016-03-04. To obtain a new version of the certificate in
       the future, simply run Let's Encrypt again.
     - If like Let's Encrypt, please consider supporting our work by:
    
       Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
       Donating to EFF:                    https://eff.org/donate-le
    
  • この後どうすれば・・・?

  • ユーザーガイドによると、apahceプラグインなら全自動で設定してくれるようですが、今回は使ってないので手動で証明書ファイルを設定する必要あり。

  • 上記メッセージのパスを覗いてみると、必要なファイル一式がありました。

    # ll /etc/letsencrypt/live/【ドメイン名】
    #
    lrwxrwxrwx 1 root root 38 12月  6 03:43 2015 cert.pem -> ../../archive/【ドメイン名】/cert1.pem
    lrwxrwxrwx 1 root root 39 12月  6 03:43 2015 chain.pem -> ../../archive/【ドメイン名】/chain1.pem
    lrwxrwxrwx 1 root root 43 12月  6 03:43 2015 fullchain.pem -> ../../archive/【ドメイン名】/fullchain1.pem
    lrwxrwxrwx 1 root root 41 12月  6 03:43 2015 privkey.pem -> ../../archive/【ドメイン名】/privkey1.pem
    
  • fullchainを除く3ファイルをport443のvirtual hostに設定してapache再起動。

    <VirtualHost *:443>
        ServerAdmin  【メールアドレス】
        DocumentRoot "【ドキュメントルート】"
        ServerName   【ドメイン名】
        SSLEngine on
        SSLCertificateFile      /etc/letsencrypt/live/【ドメイン名】/cert.pem
        SSLCertificateKeyFile   /etc/letsencrypt/live/【ドメイン名】/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/【ドメイン名】/chain.pem
    
        ErrorLog  logs/【ドメイン名】-error_log
        CustomLog logs/【ドメイン名】-access_log common
    </VirtualHost>
    
    # service httpd restart
    
  • httpからhttpsへのリダイレクト設定も元に戻します。

  • ブラウザでサイトにアクセスするとSSLマークが表示されました!(ドメイン名はマスク済み)

    ブラウザSSL表示

  • Let's Enctyptは有効期間が比較的短いので、SSL証明書の次回更新日をスケジュール帳に書き込んでおしまい。(自動化できないかしら)

  • 組織の実在証明はありませんが、個人で暗号化メインならこれで十分ですね。何より無料がうれしいです。

参考ページ

投稿日:2015年11月27日

Googleスプレッドシート 設定方法

  • あるセルに値を入れることで、行全体の色を変える場合の設定です。

  • 下記のようなリストを例に、完了日を入れるだけで項目を自動的にグレーアウトします。

    リスト

  • メニューで「条件付き書式」を選択。

    条件付き書式

  • 右端に枠が表示されます。

    条件付き書式設定ルール

  • まず範囲を選択します。今回はヘッダーを除いたデータ部分を指定。(A4:C6)

  • 次に書式設定の条件を指定します。

    例では「C列の4行目以降に値がある」場合にtrueを返すようにします。

    (C列を固定するため絶対参照の$マークをつけ、4行目からは相対参照にしたいため下記のように指定)

    =IF($C4 <> "", true, false)
    
  • 最後に書式設定で上記がtrueの場合に適用される書式を設定します。

  • 以上で「完了日」に文字列を入れると行全体をグレーにする設定ができました。

    条件付き書式設定完了

投稿日:2015年10月06日

0.環境

[OS]             Windows7 (32bit 版)
[AndroidStudio]  1.1.0

1.問題

  • Androidアプリをバージョンアップするため、Google Play Developer Console でapkファイルをアップしても下記のエラーが出ました。

    アップロードできませんでした

    マニフェストファイルに下記のように追記してもダメ。

    (app\【アプリ名】\mobile\src\main\AndroidManifest.xml)

    <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="【パッケージ名】" android:versionCode="2" android:versionName="2.0.1">
    

2.対策

  • しばらくして、AndroidManifest.xml にエラーメッセージが出てるのに気付きました。

    build.gradle を修正しなきゃいけない・・・

    (app\【アプリ名】\mobile\build.gradle)

    下記のようにバージョンを上げて再コンパイルしたらアップロードできました。

    android {
            :
        (省略)
            :
            defaultConfig {
                applicationId "【省略】"
                minSdkVersion 16
                targetSdkVersion 21
                versionCode 2
                versionName "2.0.1"
            }
        :
        (省略)
        :
    }
    

投稿日:2015年06月22日

0.環境

[CentOS]  6.5
[node.js] 0.12.4
[npm]     2.10.1
[tsd]     0.6.0
[tsc]     1.5.0-beta

1.インストール

  • GoogleのQuickStartページに沿って進めます。(以降、JavaScriptはJSと記述)

    Angular2はJSでも動かせますが、JSのスーパーセットTypeScriptに対応しているので、Googleのページ同様、後者について記述します。

  • 最終的に下記の構成になります。

    tscを使ってhello.tsをhello.jsへ変換します。

    システム構成

  • まずnode.jsとnpmの依存管理を楽にするため、nvmをインストールします。

    ※CentOS 5系だとnode.jsを動かすのに苦労するので、こちらの記事を参考にCentOS6.x 環境構築を推奨します。

    # git clone git://github.com/creationix/nvm.git ~/.nvm
    # source ~/.nvm/nvm.sh
    
  • node.jsをバージョン指定でインストール。

    # nvm install 0.12.4
    
  • nvmでnode.jsのデフォルトバージョンを設定。

    # nvm alias default v0.12.4
    # vi ~/.bash_profile
    
  • .bash_profile の末尾に下記を追記。

    if [[ -s ~/.nvm/nvm.sh ]];
        then source ~/.nvm/nvm.sh
    fi
    
  • tsd (TypeScript用 型定義ファイル管理ツール) をインストール。

    ※npmのバージョンが低いとtsdのインストールが止まってしまうので注意。

    # npm install tsd@0.6.0 -g
    

    下記の警告が出たが5分ほどしてインストールが成功。

    npm WARN engine joi-assert@0.0.3: wanted: {"node":">= 0.10.0 <= 0.11.0"} (current: {"node":"0.12.4","npm":"2.10.1"})
    npm WARN peerDependencies The peer dependency minichain@~0.0.1 included from minitable will no
    npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
    npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
    /root/.nvm/versions/node/v0.12.4/bin/tsd -> /root/.nvm/versions/node/v0.12.4/lib/node_modules/tsd/build/cli.js
    

    続けてAngular2用の型定義をインストール。

    # tsd query angular2 --action install
    

    ※rootユーザー以外だと下記エラーが出る可能性があります。

    >> install error!
    EACCES, mkdir '/etc/rc.d/init.d/typings'
    Error: EACCES, mkdir '/etc/rc.d/init.d/typings'
    at Error (native)
    
  • tsc (TypeScript→JS変換ツール) をインストール。

    # npm install -g typescript@^1.5.0-beta
    

2.サンプル実行

  • 任意のディレクトリで下記サンプルファイルを作成。

    # cd /app/angular2_quickstart/ # 任意のディレクトリ
    # touch hello.html hello.ts
    
    • ① hello.html

    • ② hello.ts

  • 上記ディレクトリにて、tscを監視モードで実行。

    # cd /app/angular2_quickstart/
    # 
    # tsc --watch -m commonjs -t es5 --emitDecoratorMetadata *.ts
    
  • 簡易HTTPサーバーをインストール後、上記ディレクトリで起動します。

    # npm install http-server -g
    #
    # cd /app/angular2_quickstart/
    #
    # http-server
    
  • ブラウザ確認

    • 下記URLで"Hello World !"が表示されれば成功です。(ホスト名(IP)は自分の環境に読み替え)
    • http://192.168.33.10:8080/hello.html

※参考ページ

【免責事項】

本ブログのご利用につき、何らかのトラブルや損失・損害等につきましては一切責任を問わないものとします。