2014年12月31日水曜日

今年最もアクセスの多かった記事ベスト3

今年最もアクセスの多かった記事ベスト3です。

どの記事も、どんぐりの背比べで、残念ながら、アクセス数は低調に終わりました(笑)。ランキングする程でもないのですが、年末の締めとして集計です。

No.1 ubuntu 12.04 から 13.10 へのアップグレード

No.2 JavaScriptで、配列の重複要素を削除する

No.3 Chromeブラウザ上で、文字列置換ができる拡張機能


ちょっとでも、当サイトのブログに目を通していただいた読者の方々、ありがとうございました。

来年も、懲りずに頑張るつもりです。

どうぞ、良いお年を!

2014年12月30日火曜日

Fat-Free Frameworkで、sqlite3のデータベースに接続

Fat-Free Frameworkで、sqlite3のデータベースに接続です。良い感じだ(笑)!

index.php
$db = new \DB\SQL('sqlite:/path/to/cms.db');

$f3->route('GET /db',
  function($f3) use ($db) {
    $results = $db->exec('SELECT * FROM pages') ;
    $f3->set('results', $results);
    $f3->set('content','db.htm');
    echo Template::instance()->render('layout.htm');
  }
);

実際に設定してみたのが、こちら

参考サイト
Databases(Fat-Free Framework for PHP)

2014年12月29日月曜日

Ubuntu Server 12.04に、sqlite3をインストール

Ubuntu Server 12.04に、sqlite3をインストールしてみました。とりあえず、ターミナルが起動できるようになったので、OKでしょう。

# sqlite3のインストール
$ sudo apt-get install sqlite3 libsqlite3-dev

# sqlite3のターミナル起動
$ sqlite3
SQLite version 3.7.9 2011-11-01 00:52:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"

# ヘルプ表示
sqlite> .help

# 終了
sqlite> .quit

参考サイト
How to Install SQLite 3.8.2 on Ubuntu 14.04 and commands for creating database and tables(Iqbal Nouyedさん)

2014年12月28日日曜日

プログラミングスキルを競って賞金を稼げる「Topcoder」

プログラミングスキルを競って賞金を稼げる「Topcoder」 課題を見てみましたが、難しくて何だかよくわかりません(笑)。Google, NASA, スターバックス、ヴァージン・アメリカ航空と提携していると書かれています。実力を証明すれば、米国の大企業で働くことも夢ではないでしょう。





参考サイト
Topcoder(ウィキペディア)

2014年12月27日土曜日

Fat-Free Frameworkで、メール送信

Fat-Free Frameworkで、メール送信です。Gmailを利用した例です。

index.php
$f3->route('GET /mail',
  function($f3) {
    $smtp = new SMTP ( 'smtp.gmail.com', 465, 'SSL', 'sampleusser@gmail.com', 'samplepassword' );
    $smtp->set('From', 'samplefrom@gmail.com');
    $smtp->set('To', 'sampleto@gmail.com');
    $smtp->set('Subject', 'メールテスト');  
    $message = 'メールテストです。'; 
    $sent = $smtp->send($message, TRUE);
    $f3->set('sent',$sent);
    $f3->set('content','mail.htm');
    echo Template::instance()->render('layout.htm');
  }
);
/ui/mail.htm
<check if="{{ @sent }}">
    <true>
        <div>送信されました。</div>
    </true>
    <false>
        <div>送信できませんでした。</div>
    </false>
</check>

実際に設定してみたのが、こちら

参考サイト
SMTP : SMTP plug-in(Fat-Free Framework for PHP)
Send email using Fat Free Framework and SMTP(Stack Overflow)

2014年12月26日金曜日

Fat-Free Frameworkで、プラグインの「Web」で外部サイトへアクセス

Fat-Free Frameworkで、プラグインの「Web」で外部サイトへアクセスです。テンプレートを利用した場合、twigと同じように、「raw」でエスケープせずに表示されます。

index.php
$f3->route('GET /web',
  function($f3) {
    $web = new Web;
    $request = $web->request('http://fatfreeframework.com/home');
    $f3->set('request',$request);
    $f3->set('content','web.htm');
    echo Template::instance()->render('layout.htm');
  }
);
/ui/web.htm
{{ @request['body']|raw }}

実際に設定してみたのが、こちら

参考サイト
Plug-ins(Fat-Free Framework for PHP)

2014年12月25日木曜日

Fat-Free Frameworkで、画像プラグインの「Captcha」

Fat-Free Frameworkで、画像プラグインの「Captcha」です。あらかじめ画像処理用のImageクラスが用意されていて便利。リサイズやクロップ、回転など、基本的な画像処理なら、これで十分でしょう。

index.php(CAPTCHAの例)
$f3->route('GET /captcha',
  function($f3) {
    $img = new Image();
    $img->captcha('fonts/ipag.ttf',24,10,'SESSION.captcha_code');
    $img->render();
  }
);

実際に設定してみたのが、こちら

参考サイト
Plug-ins(Fat-Free Framework for PHP)
Image(Fat-Free Framework for PHP)

2014年12月24日水曜日

Fat-Free Frameworkで、データベース接続

Fat-Free Frameworkで、データベース接続です。「function($f3) use ($db)」と、use を利用するのがミソです。

index.php
$db=new DB\SQL(
  'mysql:host=localhost;port=3306;dbname=dbsample',
  'usersample',
  'passwordsample'
);

$f3->route('GET /db',
  function($f3) use ($db) {
    $results = $db->exec('SELECT name FROM users') ;
    $f3->set('results', $results);
    $f3->set('content','db.htm');
    echo Template::instance()->render('layout.htm');
  }
);

実際に設定してみたのが、こちら

参考サイト
Databases(Fat-Free Framework for PHP)
Fat free framework: DB query - non-object(Stack Overflow)

2014年12月23日火曜日

Fat-Free Frameworkのテンプレートで、配列の表示

Fat-Free Frameworkテンプレートで、配列の表示です。慣れれば、何とかなりそうです。

index.php
$f3->route('GET /',
  function($f3) {
    $f3->set('hash',array('x'=>1,'y'=>2,'z'=>3));
    $f3->set('items',array(7,8,9));
    $f3->set('content','index.htm');
    echo Template::instance()->render('layout.htm');
  }
);
/ui/layout.htm
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>実験サイト「再訪」{{ @name }}</title>
</head>
<body>
{{ @this->render(Base::instance()->get('content')); }}
</body>
</html>
/ui/index.htm
<repeat group="{{ @hash }}" key="{{ @ikey }}" value="{{ @item }}" counter="{{ @ctr }}">
  <p class="{{ @ctr%2?'odd':'even' }}">{{ @ikey }}:{{ trim(@item) }}</p>
</repeat>

<repeat group="{{ @items }}" key="{{ @ikey }}" value="{{ @item }}" counter="{{ @ctr }}">
  <p class="{{ @ctr%2?'odd':'even' }}">{{ @ikey }}:{{ trim(@item) }}</p>
</repeat>

実際に設定してみたのが、こちら

参考サイト
Views and Templates(Fat-Free Framework for PHP)

2014年12月22日月曜日

Fat-Free Frameworkで、ビューとテンプレート

Fat-Free Frameworkで、ビューとテンプレートです。Viewを利用すると、PHPを利用したテンプレートエンジンになるらしい。「{{ @name }}」みたいなタグを利用したい場合は、Templateを利用する模様。

index.php
$f3->route('GET /',
  function($f3) {
    $f3->set('name',"世界");
    $f3->set('content','index.htm');
    echo View::instance()->render('layout.htm');
  }
);
/ui/layout.htm
<!DOCTYPE html>
<html>
<head>
  <title>タイトル <?php echo $name ?> </title>
</head>
<body>

<a href="/about/aaa">aaa</a><br />
<a href="/about/bbb">bbb</a><br />

<?php echo $this->render(Base::instance()->get('content')); ?>

</body>
</html>
/ui/index.htm
こんにちは、<?php echo $name ?>

実際に設定してみたのが、こちら

参考サイト
Views and Templates(Fat-Free Framework for PHP)

2014年12月21日日曜日

携帯電話やタブレットなどの電子機器を充電できるジャケット「Tommy Hilfiger ソーラージャケット」

携帯電話やタブレットなどの電子機器を充電できるジャケット「Tommy Hilfiger ソーラージャケット」 ソーラーパネルの付いたジャケットで、裏地からケーブルが伸び、給電できるとのこと。USBポートが2つ付いていて、同時に2つの端末を充電できます。充電しない間は、エネルギーを蓄えておくことも可能。デザインも、これはこれで、成立しているのではないでしょうか。

2014年12月20日土曜日

PostgreSQL 9.4リリース

PostgreSQL 9.4がリリースされています。NoSQLのデータベースとしても利用できるとありますね。あれこれ頭を痛めずに済みそうですので、開発者にとっては、朗報でしょう。
PostgreSQL 9.4では新しいJSONBデータタイプが導入された。これはPostgreSQLの用途を、いわゆるNoSQLと分類されるタイプのデータベースまで広げることを意味しており、PostgreSQL 9.4の目玉機能の1つとされている。


参考サイト
PostgreSQL 9.4が登場(マイナビニュース)
「PostgreSQL 9.4」リリース、バイナリJSONデータ型をサポート(SourceForge.JP Magazine)

2014年12月19日金曜日

UMLシーケンス図にテキストを追加できるJavaScriptライブラリ「js-sequence-diagrams」

UMLシーケンス図にテキストを追加できるJavaScriptライブラリ「js-sequence-diagrams」 jQueryを利用して、高度な解説図を非常に簡単に描画できます。こういうものがあるということを知っていないと、絶対に画像で表現してしまうでしょう。

<div class="diagram">A->B: Message</div>
<script>
$(".diagram").sequenceDiagram({theme: 'hand'});
</script>


参考サイト
UML入門シーケンス図(Sequence Diagram)(IT専科さん)

2014年12月18日木曜日

フローチャートが描けるJavaScriptライブラリ「jsPlumb」

フローチャートが描けるJavaScriptライブラリ「jsPlumb」 フローチャートや階層チャートなど、要素をつなぎあわせて、その関係を視覚的に表現することが可能です。描画後も、自由に要素を動かせるところが良いです。使い方はこちら。jQueryライクに利用することが可能。jQueryと合わせて利用することもできるようです。

2014年12月17日水曜日

オープンソースのメッセージキューイング「RabbitMQ」

オープンソースのメッセージキューイング「RabbitMQ」 非同期処理を行うもので、今すぐ使う当てはないのですが、とりあえずメモ。サンプルソースを眺めてみると、それほど難しくはないのかなという印象を持ちました。チュートリアルがこちら

メッセージングキューイングとは、簡単に言うとアプリケーション間のデータをメッセージとして、そのやり取りをキューと呼ばれる領域を利用して行うものです。 メッセージキューイングでは送信側はメッセージの送信後、処理結果を待たずに次の処理を行うため、非同期に処理を行うことが可能となります。 このように、メッセージキューイングを利用することでシステム間を疎結合にするだけでなく、部分的なスケールアウトを容易に行えるなどのメリットがあります。



参考サイト
RabbitMQの導入と、Spring AMQPを利用したメッセージ送受信(CodeZine)
How to use RabbitMQ with PHP(SitePoint)

2014年12月16日火曜日

Chomeブラウザの表示が空白のブランクになる不具合?

Chomeブラウザの表示が空白のブランクになる不具合? 今までも表示がブランクになってしまうケースがあったのですが、ブラウザを再起動すると直ったりしていたので、スルーしていました。今日は、ブロガーで同様のことが起こり、絶対におかしいと思い調べてみた結果、それらしき情報を見つけました。

ヘッダーの「Content-Length」が、実際のコンテンツよりも大きいと、ページが真っ白になると報告されています。報告にある通り、Chomeブラウザ以外では、このような事は起きません。Chomeは厳格で良いですが、これぐらいの「遊び」は残しておいてほしいものです。

Stephen MorleyさんのページにPHPの場合の修正例が記載されています。
Bloggerでは、どうしようもないけど(笑)。



参考サイト
Google Chrome’s blank/white page bug(Stephen Morleyさん)

2014年12月15日月曜日

ホームページ作成サービスの「BiNDクラウド」

ホームページ作成サービスの「BiNDクラウド」を試してみました。最初の1年は、無料で利用できます。とにかく、良く出来ています。操作性が特に秀逸。私のPCでは、ちょっと重いけど(笑)。デザインテンプレートが多数用意されているので、コンテンツ製作に専念できます。ネットショップやWordPressのサイトも作成可能。


2014年12月14日日曜日

Fedora 21がリリース

Fedora 21がリリースしています。なんか、新しくなっていますね。
  • Fedora Workstation
  • Fedora Server
  • Fedora Cloud
と3つのエディションが提供されています。中でも目を引くのが、Fedora Cloudでしょう。
Fedora Cloud は、パブリック、プライベートどちらのクラウド環境にも適した最小の Fedora イメージを提供します。必要最小限のものだけを含んでおり、クラウドアプリケーションを稼動させるには十分です。余分なものはありません。
と説明されています。

2014年12月13日土曜日

GIF、JPEG、PNG、どのフォーマットで画像用意すべきか

GIF、JPEG、PNG、どのフォーマットで画像用意すべきか。今更ながらですが、何もわかっていなかったので、自分に対する戒め用にメモです。特に、PNGについて。

GIF

GIFは最大8ビット(256色)までの色を扱うことのできる圧縮画像形式です。
256色以上必要ないロゴ、リンクボタン、アイコン、アニメ調のイラストなど、 特に単色ベタ面を多く含む平坦な画像に向いています。
逆に写真やスケッチなどの多くの色数を必要とする画像には不向きです。

JPEG

JPEGは圧縮画像形式ですが、24ビット(1670万色)まで扱うことができます。
このため、多くの色数を必要とする写真などの表現に向いています。
また、グラデーションのように色調が連続して変化する画像にはJPEGが適しています。
反対にアイコンやアニメ調の平坦なイラストなどをJPEGで保存するとにじんだように汚くなります。

PNG

PNGは「ピング」と読みます。
PNGは、特許使用の解釈に不安のあったGIFに替わるライセンス・フリーの画像形式として開発されました。
PNGには、

  • フルカラーにも8bitカラーにもすることができる
  • 圧縮率が高く同じ内容のGIF画像より10%~30%程度ファイルサイズが小さくなる
  • 圧縮によってデータが捨てられてしまうことがない可逆圧縮形式を採用している
  • 複数の透過色を指定できる
  • ライセンス問題の不安がない

等の長所があります。

参考サイト
WEB画像について-GIF・JPEG・PNGの特徴(HTMLクイックリファレンス)

2014年12月12日金曜日

PHP7.0が、2015年11月にリリース

PHP7.0が、2015年11月にリリースするそうです。PHP6への開発の際、すったもんだあったので、6は飛ばして、7にしてしまおうということなんだろうと思います。この変化の激しい時代に、いつまでもPHP5でとどまっているのもどうかと思いますので、捨て去るべきものは捨て去り、新しいものに移行していくというのは、良い流れだと思います。

2014年12月11日木曜日

コンテナー型仮想化の「Docker」

コンテナー型仮想化の「Docker」 最初は何だかわからずにスルーしていたのですが、知人の手がけたサービスで利用しているのを見せてもらって、ようやくその意味が理解出来ました。これ素晴らしいです。VMwareみたいなものですが、それ以上に強力です。詳しくはこちら

  • 開発環境が簡単に用意でき、かつ本番環境と共通化できる
  • アプリ実行環境を高速にデプロイできる
  • アプリケーションのポータビリティ(移植性)やインターオペラビリティ(相互運用性)を高める手段として活用できる





参考サイト
アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識(@IT)

2014年12月10日水曜日

Idiorm & Parisで、SQLクエリのログ

Idiorm & Parisで、SQLクエリのログの取得です。

1ページの処理ステップを全て取得したい場合(Query logging
$sqls = ORM::get_query_log() ;

↓↓↓

// 取得例
Array
(
  [0] => SELECT COUNT(*) AS `count` FROM `table1` 
  [1] => SELECT COUNT(*) AS `count` FROM `table2` 
  [2] => SELECT COUNT(*) AS `count` FROM `table3` 
  [3] => SELECT COUNT(*) AS `count` FROM `table4` 
  [4] => SELECT COUNT(*) AS `count` FROM `table5` 
)
システム全体で取得したい場合(Query logger
ORM::configure('logging', true);
ORM::configure('logger', function($log_string, $query_time) {
  // $log_string にSQLクエリが、$query_timeに処理時間が入ります。
  echo "<p>" . $log_string . ' in ' . $query_time . "</p>\n";
});

↓↓↓

// 取得例
SELECT COUNT(*) AS `count` FROM `table1` in 8.5115432739258E-5
SELECT COUNT(*) AS `count` FROM `table2` in 7.2956085205078E-5
SELECT COUNT(*) AS `count` FROM `table3` in 0.00012397766113281
SELECT COUNT(*) AS `count` FROM `table4` in 7.2956085205078E-5
SELECT COUNT(*) AS `count` FROM `table5` in 6.9141387939453E-5
どちらの場合も「ORM::configure('logging', true);」として、ログ利用を有効な設定にして使う必要があるようです。

参考サイト
Query logging(Configuration Idiorm documentation)
Query logger(Configuration Idiorm documentation)

2014年12月9日火曜日

jQuery UIのdialogで、右上の「×」ボタンを表示させない

jQuery UIのdialogで、右上の「×」ボタンを表示させない方法です。これで、なにかしら指定のイベント処理を選択しないと、画面が閉じられないようになります。

$("#sample").dialog({
  closeOnEscape: false,
  open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); }
});

参考サイト
How to remove close button on the jQuery UI dialog?(Stack Overflow)

2014年12月8日月曜日

HOMEディレクトリ内に複数のバージョンのPHPをインストールできる「Phpbrew」

HOMEディレクトリ内に複数のバージョンのPHPをインストールできる「Phpbrew」 試していないのですが、面白そうだなと思ったのでメモ。以下のような特徴が挙げられています。

・PDO、MySQL、SQLiteなどのモジュールとともにビルドできる。
・ApacheのPHPモジュールをコンパイルし、異なるバージョンで区切ることができる。
・ビルドしてホームディレクトリにPHP(複数可)をインストールするので、root権限は必要ない。
・バージョンを切り替えて、bashやzshのシェルに統合できる。
・現在の環境にPHPエクステンションとしてインストールできる(?)。
・システム全体に複数のPHPをインストールできる。



PHPのバージョン管理はphpbrewが使いやすいです(Rubellum fly lighさん)
複数のPHPバージョンを管理するphpbrew(旅するえんじにあ - Engineers to travel -さん)

2014年12月7日日曜日

Linux Mint 17.1がリリース

Linux Mint 17.1がリリースされました。長期サポート版のLTSです。GNOME 2をベースとした「MATE」デスクトップ環境と、GNOME 3をベースとした「Cinnamon」の2種類が利用できます。
Linux Mint 17.1 は長期サポートリリースで、2019 年までサポートされます。 このバージョンでは快適に使用していただけるために、多くの更新や改善を受けることができます。


参考サイト
「Linux Mint 17.1」が登場、MATEではCompizをサポート(SourceForge.JP Magazine)

2014年12月6日土曜日

ベストレンタルサーバーに選出された「A Small Orange」

ベストレンタルサーバーに選出された「A Small Orange」 こちらの「2013年、ベルトなレンタルサーバー(The Best Web Hosts of 2013)」という記事に紹介されていたのでメモです。昨年の統計ではあるのですが。それはさておき、記事中の「Digital Ocean」は、よく耳にします。最近、国内のレンタルサーバーも安くなってきていますので、無理して海外のサーバーを借りるメリットは無いようにも思いますが、とりあえず。

2014年12月5日金曜日

jQueryで、後から追加した要素に対してイベントハンドラを追加する「.on()」

jQueryで、後から追加した要素に対してイベントハンドラを追加する「.on()」 要素を動的に書き換えて、アクセス出来ない場合は、試してみるといいかもしれません。最高に便利です。救われました。

下記の例で言うと、「class="row"」は、「id="birthYear"」よりも上位のクラスです。 上位のクラスにイベントハンドラを追加することで、問題なく動くようになります。
$('.row').on('click', '#birthYear', function() {
  alert($('#birthYear').val());
});

selectYear = '<select id="birthYear" name="birthYear">\n
<option value="2005">2005</option>\n
<option value="2004">2004</option>\n
<option value="2003">2003</option>\n
<option value="2002">2002</option>\n
<option value="2001">2001</option>\n
</select>\n' ;

$('#birthYear').replaceWith(selectYear);

参考サイト
jQuery#onを便利に使う(Qiita)
jQuery .on('change', function() {} not triggering for dynamically created inputs(Stack Overflow)

2014年12月4日木曜日

jQueryのDatepickerで、changeイベントを拾うには、onSelect

jQueryのDatepickerで、changeイベントを拾うには、onSelectを利用すると、良いようです。ハマったのでメモ。

$(".date").datepicker({
  onSelect: function(dateText) {
    alert(dateText);
  }
});

参考サイト
JQuery Datepicker onchange event help!(Stack Overflow)

2014年12月3日水曜日

JavaScriptで、日付の妥当性チェック

JavaScriptで、日付の妥当性チェックです。うるう年もチェックしてくれているので、良いかなと。

OKの場合は、true、エラーは、false。
function isDate(inputDate)
{
  var data = inputDate;
  if(data == '') {
    return true;
  }
  var rxDatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/;
  var dtArray = data.match(rxDatePattern);
  if (dtArray == null) {
    return true;
  }
  dtYear = dtArray[1];
  dtMonth = dtArray[3];
  dtDay = dtArray[5];
  if (dtMonth < 1 || dtMonth > 12) {
    return false;
  } else if (dtDay < 1 || dtDay> 31) {
    return false;
  } else if ((dtMonth==4 || dtMonth==6 || dtMonth==9 || dtMonth==11) && dtDay ==31) {
    return false;
  } else if (dtMonth == 2) {
    var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
    if (dtDay> 29 || (dtDay ==29 && !isleap)) {
      return false;
    }
  }
  return true;
}

参考サイト
Validate Date using jQuery(jQuery By Exampleさん)
Validate Date format using jQuery - jQuery By Example(jQuery By Exampleさん)

2014年12月2日火曜日

IIJのクラウドPaaS「MOGOK」が、PHPとnode.jsをサポート

IIJのクラウドPaaS「MOGOK」が、PHPとnode.jsをサポートというニュースを聞きつけ、試してみましたが、無料のアカウントでは、WEBインスタンスが1つしか立ち上げられないため、断念! というわけで、失意のブログとなりました。

しかーし、IIJさんには、感謝しております。こちらを利用させていただいています

ちなみに、PHPの利用方法は、こちらNode.jsは、こちら



参考サイト
IIJ、Webアプリ開発支援PaaSでPHPとnode.jsをサポート(クラウド Watch)

2014年12月1日月曜日

JavaScriptで、nullのチェック

JavaScriptで、nullのチェックです。ハマったので、メモ。今見返すと、なんでこんなところでハマったのだろう? 謎です。

<script type="text/javascript">
var data = null;

if(data){
  alert('not null') ;
}else{
  alert('null') ;
}

if(data !== null && data !== undefined){
  alert('not null') ;
}else{
  alert('null') ;
}
</script>

参考サイト
javascript-オブジェクトのNull判定(むちのち。さん)
JavaScript null check(Stack Overflow)