Subscribed unsubscribe Subscribe Subscribe

SpiderMonkey試してみた


JavaScriptの勉強し始めたのですが、基本的な構文試すのにconsole.logに出力して確認するのが面倒だったのでSpiderMonkey使ってみました。
ターミナルの中だけで完結できると楽ですよね。

お使いのパッケージマネージャーに多分入っていると思うので、各自サーチアンドインストールしてみてください。

//perfume.js
var perfume = ["かしゆか", "のっち", "あーちゃん"];
var value;

for (var i = 0; i < 3; i++) {
    value = perfume[i];
    print (value + "です");
}

print (perfume.length + "人合わせてPerfumeです!" );

js -f perfume.js

こんな感じでオプションを追加するとファイルに記載されたJavaScriptを実行することが可能です。

printだと改行してくれて、putstrだと改行なしです。

詳しくはマニュアルのBuilt-in functionsを参照してみてください。
https://developer.mozilla.org/en-US/docs/SpiderMonkey/Introduction_to_the_JavaScript_shell

パスワード生成メモ

ちょっとしたランダムなパスワードを生成して機会ってあると思うのですが、そんな時に便利なコマンドまとめ。

CentOS

expectパッケージに含まれているmkpasswdコマンドを利用。
シェルスクリプトなので詳しいオプションは直接ソース見ればわかる。

Debina(Ubuntu)系

makepasswdかlibstring-mkpasswd-perlパッケージを利用。
どちらもPerlスクリプト

汎用

openssl rand -base64 6

OpenSSHを利用。
とりあえず8文字のパスワードを生成したいときなどに。

Sinatraの始め方

Ruby初心者がSinatraを使い始めてみたのでお勧めの本などを紹介します。

公式サイト
http://www.sinatrarb.com/

とりあえず公式サイトを見ながら、Hello World!をやってみて「おお、なんか簡単そう!」と感じたものの、なにか処理するには最低限Ruby書けないとやっぱりダメだなあと思い、一旦Sinatraから離れてRubyの初心者本を読み始めました。

作りながら学ぶRuby入門』、本当にオススメです!
蔵書管理プログラムを作るために適宜それに必要な知識を順を追って少しずつ紹介してくれてくれるので挫折しにくいかと。

この本は言語関係なくプログラム初心者にもおすすめしたいです。
なんせプログラミング苦手な自分にでも理解しやすかったもので(;´Д`)

それとドットインストールのRuby入門とSinatra入門も必見ですね。
http://dotinstall.com/

Webでちまちま情報集めるのダルかったので以下の2冊を購入。

個人的にはPackt PublishingのInstant Sinatra Starterの方がハンズオン形式で環境構築からHerokuへのデプロイまでシンプルに書かれていてわかりやすかったです。なのでこちらの本を先に読んだほうがいいと思います。

Oreilly.comでPackt Publishingの電子書籍も扱い始めて半額セールやっていたので、ついでにCloning Internet Applications with Rubyも購入してみました。
こちらはSinatraを利用して、TinyURL/Twitter/Flickr/Facebookのクローンサービスを作ってみようという内容です。
まだ読み始めたところですが、こちらもハンズオン形式なのでわかりやすいです。

Sinatraとはちょっと話しズレますがHeroku便利ですねぇ。
ちなみにDigitalOceanと言うVPSでArchLinux使っているのですが、アップデートしたらPassengerが動かなくなって、しょうがなく自分でコンパイルしようとしたら512MBのメモリーじゃ足りないよってエラーが出てマジ勘弁して〜(;´Д`)ってなりました。

書籍代はかかりましたが、これらの知識で作ったサイトのアサマシで一ヶ月もせずに回収できたのでいい投資だったと思います。クソサイトなのでここでは紹介はしません・・。

Remove all ads

OpenShift OnlineでMojolicious::Liteを動かしてみたい!

OpenShift Online
http://www.openshift.com/

OpenShift Onlineは、RedHatが提供するPaaSで、Java,PHP,Python,Ruby,Perl,Node.jsなどのプログラミング言語MySQL,PostgreSQL,MongoDBのデータベースを利用できます。

https://www.openshift.com/products/pricing
Gearと言う名称がインスタンスの単位で、Free Planを選択すると3 Small Gearsまで無料で使えます。
もちろんFree Planはノーサポートですが、無料で使えるのですしマジリスペクトですよね!

ちなみに、1 Small Gearの中身はMemory 512MB、Storage 1GBになっています。

Gearの構築

今回はPerlで環境構築してみたいと思いまーす。

会員登録して、Create Applicationをクリック。
上記に記載したプログラミング環境などのミドルウェアはCartridgeと言う名前で提供されています。
Perl 5.10を選択します。

あとはPublic URLを入力すれば環境が完成です。簡単!
URLはこんな感じになります。
http://ApplicationName–YourID.rhcloud.com

ローカル環境の構築

gem install rhc

管理ツールをgemからインストールします。

rhc setup

インストールが完了したら、続いてセットアップです。

OpenShift Client Tools (RHC) Setup Wizard

This wizard will help you upload your SSH keys, set your application namespace, and check that other programs like Git are properly installed.

Login to openshift.redhat.com:
Password: ********

OpenShift can create and store a token on disk which allows to you to access the server without using your password. The key is stored in your home directory and should
be kept secret. You can delete the key at any time by running 'rhc logout'.
Generate a token now? (yes|no) yes
Generating an authorization token for this client ... lasts about 22 hours

Saving configuration to /Users/otaku/.openshift/express.conf ... done

Your public SSH key must be uploaded to the OpenShift server to access code. Upload now? (yes|no) yes

Since you do not have any keys associated with your OpenShift account, your new key will be uploaded as the 'default' key.

Uploading key 'default' ... done

Checking for git ... found git

Checking common problems .. done

Checking your namespace ... sample

Checking for applications ... found 1

first http://momoclo-sample.rhcloud.com/

You are using 1 of 3 total gears
The following gear sizes are available to you: small

Your client tools are now configured.

ウィザードの指示する通りにログインして、トークンを生成して、公開鍵をアップします。
gitや公開鍵などは先に自分で用意しておいてくださいませ。

これでローカルの環境構築は完了です。

rhc

Getting started:
  setup              Connects to OpenShift and sets up your keys and domain
  create-app         Create an application
  apps               List all your applications
  cartridges         List available cartridges
  add-cartridge      Add a cartridge to your application
  server             Display information about the status of the OpenShift service.
  logout             End the current session

Working with apps:
  tail               Tail the logs of an application
  port-forward       Forward remote ports to the workstation
  threaddump         Trigger a thread dump for JBoss and Ruby apps
  snapshot           Save the current state of your application locally
  git-clone          Clone and configure an application's repository locally

Management commands:
  account            Display details about your OpenShift account
  alias              Add or remove a custom domain name for an app
  app                Commands for creating and managing applications
  authorization      Show the authorization tokens for your account
  cartridge          Manage your application cartridges
  domain             Add or rename the container for your apps
  sshkey             Add and remove keys for Git and SSH

rhcの管理ツール、とても便利ですね。

git clone ssh://foobar@momoclo-sample.rhcloud.com/~/git/momoclo.git/
cd momoclo/

gitでひな形を取得します。

perl/ For not-externally exposed perl code
libs/ Additional libraries
misc/ For not-externally exposed perl code
.openshift/ Location for OpenShift specific files
action_hooks/ See the Action Hooks documentation [1]
markers/ See the Markers section [2]

ディレクトリ構造はこんな感じです。

perl/index.pl

このファイルをいじればいいみたいです。

#!/usr/bin/env perl
use strict;
use warnings;
use Mojolicious::Lite;

# Route with placeholder
get '/' => sub {
  my $self = shift;
  $self->render(text => "Yes! Yes! We are the ももいろクローバー れに かなこ しおり あやか ももか");
};

# Start the Mojolicious command system
app->start;

Mojolicious::Liteのサンプルまんまを動かしてみます。
ローカル環境で表示できることを確認したら、OpenShift Onlineにデプロイしてみましょう。

git add .
git commit -m 'Initial Commit'
git push

Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 570 bytes, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Waiting for stop to finish
remote: --> Working on Mojolicious::Lite
remote: Fetching http://mirror1.ops.rhcloud.com/mirror/perl/CPAN/authors/id/S/SR/SRI/Mojolicious-4.16.tar.gz ... OK
remote: Configuring Mojolicious-4.16 ... OK
remote: Building Mojolicious-4.16 ... OK
remote: Successfully installed Mojolicious-4.16
remote: 1 distribution installed
remote: skipping R/RJ/RJBS/perl-5.18.0.tar.gz
remote: skipping R/RJ/RJBS/perl-5.18.0.tar.gz
master -> master

これで動くはずだったんだけど、Internal Server Error〜(;´Д`)

rhc tail momoclo

管理ツールからログを確認してみると、[error] Can't locate Time/HiRes.pm in @INCと表示されていました。
モジュールが入ってないよってことなんだろうけど、どこからインストールするのが正しいのかよくわからなかったけど、

use Time::HiRes;

単純にソースにモジュールの記述追加して、デプロイしたらモジュールをインストールしてくれるみたいです。

サーバー設定する手間考えたらすごいお手軽だし、ちょっとしたデモプログラムをネット経由で人に見せるためとかに最適ですね!
Herokuでも頑張って設定すればPerl動くみたいですけど、デフォルトで対応してくれているOpenShift Online、なかなかいいのではないでしょうか。まぁ、Herokuのように色んなアドオン使えるようにならないとしんどいですが。

Mac上でのPerl環境

殴り書きメモっす。

Perlbrewを利用。

curl -kL http://install.perlbrew.pl | bash

インストールする。

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed

## Download the latest perlbrew

## Installing perlbrew
perlbrew is installed: ~/perl5/perlbrew/bin/perlbrew

perlbrew root (~/perl5/perlbrew) is initialized.

Append the following piece of code to the end of your ~/.zshenv and start a
new shell, perlbrew should be up and fully functional from there:

source ~/perl5/perlbrew/etc/bashrc

Simply run `perlbrew` for usage details.

Happy brewing!

## Installing patchperl

インストール完了。
使っているシェルにパスを追加しておく。

perlbrew available
perl-5.19.0
perl-5.18.0
perl-5.16.3
perl-5.14.4
perl-5.12.5
perl-5.10.1
perl-5.8.9
perl-5.6.2
perl5.005_04
perl5.004_05
perl5.003_07

利用可能なバージョンを表示。

perlbrew install perl-5.19.0

好きなバージョンのPerlをインストールする。
必要なコンパイルオプションあったら、その都度調べれば十分。

perlbrew switch perl-5.19.0

インストールしたバージョンに切り替える。

perlbrew install-cpanm

cpanmもインストールしておく。

find `perl -e 'print "@INC"'` -name '*.pm' -print

モジュールの位置を確認。

/perl5/perlbrew/perls/perl-5.19.0/lib/site_perl/5.19.0/

基本、Perlbrewのcpanm、この下にモジュールを追加するっぽい。

perlbrew lib create momoclo

みたいな感じで、モジュール環境分離できるみたい。

/.perlbrew/libs/perl-5.19.0@momoclo/lib/perl5/

モジュールがインストールされるパスはこんな感じ。

Google App Engine for PHP試してみたぉヽ(゚∀゚)ノ

Installing the PHP SDK on Mac OS X

今回は手元にあったマックで試してみます。

Installing Python 2.7

何もいじってなければそのままで問題ないかと。

PHP

MacPortsを使えとのことですが、メインで使っているのがHomebrewなのでこっちで動かします。

brew tap homebrew/dupes
brew tap josegonzalez/homebrew-php
brew install php54 --with-cgi --with-debug --with-homebrew-openssl
brew install php54-apc php54-intl php54-oauth

チュートリアルに載っているけどHomebrewで見つからないパッケージに関しては今回無視します。
PHPMac上での環境構築、よくわかってないんです・・(;´Д`)

export PATH="$(brew --prefix josegonzalez/php/php54)/bin:$PATH"

インストールができたら上記のコマンドを叩くか、お使いのシェルにパスを追加します。

%which php
/usr/local/opt/php54/bin/php

こんな感じになればOKです。

SDK

%curl -O http://commondatastorage.googleapis.com/appengine-php/appengine-php-sdk-1.8.0.zip
%unzip appengine-php-sdk-1.8.0.zip

単純にダウンロードして展開するだけです。

Hello, World!

https://developers.google.com/appengine/docs/php/gettingstarted/helloworld

%tree helloworld/
helloworld/
├── app.yaml
└── helloworld.php

上記のような感じでファイルを配置します。

helloworld.php

<?php
  echo 'Hello, World!';

app.yaml

application: helloworld
version: 1
runtime: php
api_version: 1

handlers:
- url: /.*
  script: helloworld.php

コピペします。

google_appengine/dev_appserver.py --php_executable_path=/usr/local/opt/php54/bin/php helloworld/

早速、動かしてみるぞ!

あれ・・、画面が真っ白・・(´;ω;`)

google_appengine/dev_appserver.py --php_executable_path=/usr/local/opt/php54/bin/php-cgi helloworld/

よく見たら、と書かれていました。
おっちょこちょい!

うん、これで動きますね。

https://gaeforphp.appspot.com/

実際にデプロイしてみたかったのですが、現状人数制限しているそうなので、適当なアプリケーション名で新規作成して、上記のURLからとりあえず申請してみました。

しばし待ちましょうぞ。

Debian上でのiptablesの設定方法の続き

検索エンジン経由で以前書いた記事を読んでくれる方が結構多いようなのですが、この手の情報にありがちな時間の流れによって情報が古くなってたと言う状態だったので補足として書いておきます(;´Д`)

以前は

/etc/iptables.test.rules

と言うファイル一つで管理されていたのですが

/etc/iptables/rules.v4
/etc/iptables/rules.v6

現在は上記のようにIPv4用とIPv6用ごとに2つの設定ファイルを使うような仕組みになっています。
ですので、今後は上記のファイルに設定を保存することになります。

機能も微妙に追加されているので、詳しくは/etc/init.d/iptables-persistentを読んでみてください。