2014年1月30日木曜日

Androidアプリで、XMLデータの文字化け修正

Androidアプリで、XMLデータの文字化け修正です。取得したXMLデータを、EntityUtils.toStringで、文字コードをUTF-8に指定すれば良いらしい。

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity, "UTF-8");


参考サイト
Apache Http Components clientでの文字化け対処(n-streamからのお知らせさん)
10分くらいでWebAPIを叩く(regtan’s TechNoteさん)

2014年1月29日水曜日

AndroidアプリのYouTubeチュートリアル「thenewboston」(英語)

AndroidアプリのYouTubeチュートリアル「thenewboston」(英語) 一話が5分程度のチュートリアルですが、200本分用意されています。かなりのボリューム。英語の意味は理解できずとも、映像があると、わかった気分になれます(笑)。まずは動画で、徐々に体を慣らすしか無いのかなと。

2014年1月28日火曜日

HTMLとCSSで横型のツリー表示を実現「CSS3 Family Tree」

HTMLとCSSで横型のツリー表示を実現「CSS3 Family Tree」 <UL>タグのみで実現していて、動作が軽く、尚且つ、美しい仕上がりになります。それまで、テーブルタグで表現しようと長時間格闘してみましたが、実現できず。CSS3 Family Treeならば、単純なHTMLで、素早く実現できます。もっと早く出会いたかった(笑)。

2014年1月27日月曜日

「PHP Object Injection」とは、何?

PHP Object Injection」とは、何? ということで調べてみました。SQLインジェクションのようなもので、unserialize() 関数を利用する際に、データを適切にチェックしておかないと、悪用される可能性があるというもののようです。Open Web Application Security Project (OWASP) のページのサンプルコードを見てみると、なんとなくイメージ出来ました。

unserialize() 関数は便利に利用できますが、危険でもあるという認識を持っておかないといけないですね。

2014年1月26日日曜日

無料で30GBのファイルを共有できる「Filemail」

無料で30GBのファイルを共有できる「Filemail」 魅力は何と言ってもその容量でしょう。これだけあれば、映像ファイルはもちろんですが、VMwareやVirtualBoxの仮想マシンごと送信できてしまいます。相手がファイルをダウンロードすると、通知が来る仕組みになっていて、これがメンバー登録なしで利用できるわけですから、スゴイ時代です。ありがたく活用させていただきます(笑)。



2014年1月25日土曜日

Ubuntu12.04 Serverで、Apache2 rewriteが動作せずにハマる

Ubuntu12.04 Serverで、Apache2 rewriteが動作せずにハマりました。ディフォルトの設定だと、rewriteモジュールが有効になっていないため、a2enmod コマンドで有効にする必要がありました。忘れるので、備忘録です。

sudo a2enmod rewrite
sudo service apache2 restart
/etc/apache2/sites-enabled/000-default.conf を編集
<Directory /var/www/>
  ptions Indexes FollowSymLinks MultiViews
  AllowOverride All
  rder allow,deny
  allow from all
</Directory>

参考サイト
How to enable mod_rewrite in Apache?(Ask Ubuntu)

2014年1月24日金曜日

Androidアプリのチュートリアル「AndroidHive」(英語)

Androidアプリのチュートリアル「AndroidHive」 このサイト最高です。その素晴らしさに、また雄叫びを上げたい気分です(笑)。サンプルコードが一式ダウンロードできるようになっていて、私のような初心者には、本当にありがたい限り。しかも、わかりにくい部分には、YouTubeの動画解説が付いています。出来る人のコードを真似する(コピーする)のが、やはりベスト。

PHP + MySQLサーバーと連携した、Androidアプリのユーザー登録とログイン
Android Login and Registration with PHP, MySQL and SQLite

PHP + MySQLサーバーと連携した、AndroidアプリでのデータのCRUD機能
How to connect Android with PHP, MySQL

PHP + MySQLサーバーと連携した、AndroidアプリのREST API
How to create REST API for Android app using PHP, Slim and MySQL – Day 1/3
How to create REST API for Android app using PHP, Slim and MySQL – Day 2/3
近日中に、Day 3/3?

などの記事が紹介されており、大変興味深い内容になっています。他にも、すぐに利用できるサンプルが多数紹介されています。暗闇の中に、希望の光が灯った気分。サイトの作者に、心の底から感謝であります。

2014年1月23日木曜日

Androidアプリで、JSONデータの取得

Androidアプリで、JSONデータの取得です。JSONObjectを利用して、実現できました。技術評論社の記事によると、Webサービスとの連携では、JSONを使うとあります。ウェブでいうところの、AJAXを作るような感覚でAndroidアプリを作りこんでいけば、データベースとの連携も実現できそうな気がします? JSONの蟻地獄にハマる運命なのかも(笑)。

JsonActivity.java
try {
  JSONObject jsonObj = new JSONObject(jsonData);
  members = jsonObj.getJSONArray("members");

  for (int i = 0; i < members.length(); i++) {
    JSONObject member = members.getJSONObject(i);
    String id = member.getString("id");
    String name = member.getString("name");
    String email = member.getString("email");
  }

} catch (JSONException e) {

}


参考サイト
第9回 AndroidでHTTP通信を行う(技術評論社)
AndroidでJSON を使おう ~後編~ (雑記帳さん)

2014年1月22日水曜日

Androidアプリで、http通信

Androidアプリで、http通信です。DefaultHttpClientを利用して、実現できました。ささやかな喜び(笑)。

HTTPRequestsActivity.java
public class HTTPRequestsActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  // URL指定
    private static String url = "http://www.example.com/";

    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(url); 
    HttpResponse response;

    try {
      response = httpclient.execute(httpget);
      HttpEntity entity = response.getEntity();
     // 取得したデータの処理
      if (entity != null) {

      }
    } catch (Exception e) {
    // エラー処理

    }

  }
}


参考サイト
第9回 AndroidでHTTP通信を行う(技術評論社)
DefaultHttpClientを使ってコンテンツを取得する(Tech Boosterさん)
DefaultHttpClientでHTTP通信を行う(GE Android Blogさん)
Simple HTTP client example in Android(Stack Overflow)

2014年1月21日火曜日

Androidアプリで、アラート表示

Androidアプリで、アラート表示です。AlertDialog.Builderを利用して、実現できました。

import android.app.AlertDialog;
import android.content.DialogInterface;

public class AlertActivity extends Activity
{
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
 
    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
    dialog.setTitle("アラート")
      .setMessage("本当に削除しますか?")
      .setCancelable(false)
      .setIcon(R.drawable.ic_launcher)
      .setPositiveButton("はい", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
          AlertActivity.this.finish();
        }
      })
      .setNegativeButton("いいえ", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
          dialog.cancel();
        }
      })

    dialog.create().show();
  }
}


参考サイト
アラートダイアログ(AlertDialog)を使用するには(逆引きAndroid入門さん)
ダイアログは永遠に(1)(愚鈍人さん)

2014年1月20日月曜日

Androidアプリで、ボタンのクリック処理

Androidアプリで、ボタンのクリック処理です。ボタンをクリックされた時の流れが、若干、見えたような気がします。行く路は、険しく、遥か彼方。

MainActivity.java
public class MainActivity extends Activity implements OnClickListener {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button sendButton = (Button) findViewById(R.id.button1);
    sendButton.setOnClickListener(this);
  }

  //@Override
  public void onClick(View v){
    // ボタンをクリックされた時の処理

  }
}

参考サイト
クリック処理(OnClickListenerインターフェースの実装)(Android入門さん)
アンドロイドアプリでクリックイベントを取得(素人のアンドロイドアプリ開発日記さん)
Buttonのイベント(onClickListener、クリック処理)を受ける(Tech Boosterさん)
View.OnClickListener(Android Developers)

2014年1月19日日曜日

モールス信号を作成してくれる「Morse Node」

モールス信号を作成してくれる「Morse Node」 時代に逆行しているサービスと言えなくもありませんが、node.jsによって実現されている今時のサービスです。貴重な戦力になってくれること、間違いなし。現代のサービスとして、見事にカタチになっています。

2014年1月18日土曜日

Androidアプリで、アクティビティ

Androidアプリで、アクティビティです。「世界を目指せ!Androidアプリ開発入門」のサンプルを試しています。あちこちボタンをクリックして、ようやくonPause と onResume の意味が理解出来たような気がします。 我が非力なPCでは、Eclipseが激重。ハイスペックPCが欲しくなります(笑)。



参考サイト
第4回 Androidの肝,アクティビティ(技術評論社)

2014年1月17日金曜日

Androidアプリで、「Hello world」

Androidアプリで、「Hello world」です。おバカな実験プロジェクト、今回はAndroidアプリに挑戦です! 挫折必至とも思われますが、行けるところまで、また亀の歩みで進めてみます。いろいろ試していたら、表示はできました。手順をまとめるべきなんでしょうが、Eclipseが複雑すぎて、何だかわからなくなってしまいました(笑)。とりあえずスクリーンショットです。



参考サイト
第3回 Android SDKでサンプルアプリを使ってみる(技術評論社)

2014年1月16日木曜日

Bloggerで「読込中」のまま固まった場合の対処とバックアップ

Bloggerで「読込中」のまま固まった場合の対処方法です。ログインしなおして、やり直しても「読込中」の同じ状態が続き、ブログがお釈迦になったかと途方に暮れてしまいました。時間が経てば改善されるかと思い、しばらく待ってみても何も変わらず。

結局、Bloggerの管理画面ホーム(https://www.blogger.com/home)で、言語の設定を変更すると、元に戻りました。選択肢の「英語(アメリカ合衆国)」に設定し、すぐに「日本語」に変更してみると回復していました。何かの設定が、初期化されたのか? とにかく、良かったです。



中身の無いブログではありますが、失うことを考えると、恐怖を感じてしまいました(笑)。だいぶ愛着が湧いてきたということでしょうか。早速、バックアップを取ったのは言うまでもありません。管理画面のメニュー「設定」→「その他」から、「ブログをエクスポート」をクリックすると、xml形式のデータをダウンロードすることが可能です。今後は定期的にバックアップを取ろうと思います。

Bloggerに、改めて感謝であります。

参考サイト
ページ・投稿を編集しようとすると読込中になったまま動きません・・・(Googleプロダクトフォーラム)
ブログをインポート/エクスポートする(Bloggerヘルプ)

2014年1月15日水曜日

Eclipseをインストール

起業コラボ」ネタを続けようと思っていたのですが、早くも燃料切れです(笑)。 次なるプロジェクトを考えつつ、Eclipseをインストールしてみました。何の中身もない、日記ブログです。Android に手を出してしまおうかな?!

2014年1月14日火曜日

PHPフレームワークのPhalcon 1.2.5がリリース

PHPフレームワークのPhalcon 1.2.5がリリースされました。というわけで、早速、アップデートしてみました。動作はほとんど何も変わらないと思いますが、気分一新です。

OpenShiftの「起業コラボ」の方は、sshでログインして、Phalconのコンパイルのみやり直しました。一度環境ができてしまえば、アップデート作業は楽です。



参考サイト
Nginx, PHP5.5 and Phalcon on OpenShift(SitePoint)
Red HatのクラウドPaaS「OpenShift」に、Nginx + PHP5.5 + PHP-FPM + Phalconの環境構築

2014年1月13日月曜日

「起業コラボ」サービススタート

起業コラボ」サービススタートです。「PHPフレームワークのPhalcon実験サイト」スピンオフ企画。起業を志す方々向けのコラボレーション&マッチングサイトとして運営致します。完全な自己満足プロジェクトですが、悪あがきしてみます(笑)。調子に乗って、ツイッターアカウントまで作成してしまいました。どうぞ、よろしくお願い致します。時間のある方、冷やかしでも、お立ち寄りいただけると、ありがたいです。

@kigyocollabo


2014年1月12日日曜日

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

ubuntu 12.04 から 13.10 へのアップグレードです。

/etc/update-manager/release-upgrades を編集
prompt=lts
↓
prompt=normal
その後は、アップグレード作業の繰り返し。
sudo do-release-upgrade
一気に、13.10にはアップグレードできないので、12.10、13.04と段階を経て、13.10までアップグレードしなければなりません。ものすごく時間がかかります。必要に迫られない限り、13.10、そのものを用意した方が良いと思います。

バージョンの確認
cat /etc/lsb-release 
参考サイト
upgrade ubuntu 12.04 to 13(Ask Ubuntu)
ubuntuのバージョンを確認する方法(気負わない日記さん)

2014年1月11日土曜日

Red HatのクラウドPaaS「OpenShift」に、Nginx + PHP5.5 + PHP-FPM + Phalconの環境構築

Red HatのクラウドPaaSOpenShift」に、Nginx + PHP5.5 + PHP-FPM + Phalconの環境構築してみました。素晴らしすぎて、雄叫びをあげたい気分です(笑)。全ては、SitePointの記事「Nginx, PHP5.5 and Phalcon on OpenShift」にある通り。GitHubの「duythien/openshift-diy-nginx-php」を利用しています。Phalconは必要ないという方は、このopenshift-diy-nginx-phpの設定だけでOK。mbstringなどの関数も揃って魅力的なサーバー環境を実現できます。さすがはRed Hat、動作も実に快適です。

ちなみに、構築は全てソースからインストールすることになるため、かなり時間がかかります。途中、エラーも何度か出現しますので、忍耐と時間のある方向け。OpenShiftでは、PHP環境は、Zend Server 6.1(PHP 5.4)、PHP 5.3、CakePHPなどが公式にサポートされていますので、PHP5.5は必要ないという方は、そちらを利用した方が良いかもしれません。

シェルコマンドのタイムアウトエラー
remote: An error occurred executing 'gear postreceive' (exit code: -1)
remote: Error message: Shell command '/var/lib/openshift/1234/app-root/runtime/repo/.openshift/action_hooks/build' exceeded timeout of 3598
上記のようなタイムアウトエラーが出てストップしても、めげずに、README.md等に変更を加え、コンパイルが終了するまで、根気強く何度でもgit pushを繰り返すことがコツです。phpinfo() の画面が表示できたら、後は、sshでログインして、Phalconのコンパイルと、php.ini、nginx.confの設定をすれば完了です。

実際に設定してみたサイトがこちら

起業コラボ


閑古鳥が鳴くのはわかっているのですが、調子に乗って、今まで作りためてきたPHPフレームワークのPhalcon実験サイトを利用して、マッチングサイト「起業コラボ」を実際に運用してみようかと思います(笑)。良かったら、試してみてください。どうぞ、よろしくお願いします!

OpenShiftさん、しばらくお世話になります。すばらしいサーバー環境に感謝。

2014年1月10日金曜日

PHPフレームワークのPhalcon実験サイト、一区切り

PHPフレームワークのPhalcon(1.2.4)実験サイト、一区切りです。 「最速PHPフレームワーク」と掲げているだけあって、確かに動作は速いです。当初、その速さに興味はなかったのですが、利用しているうちにその魔力に取り憑かれました。既存のフレームワークとは、全く異なる別次元の速さを味あわせてくれます。

今回利用させてもらっているHerokuでは、スリープ状態からの起動となることが多いため、その素晴らしさをフルに発揮できていないのが残念なのですが。しかし、ユーザーさんを待たせない快適な操作性を提供できるフレームワークであることは間違いありません。このスピードは、初心者から上級者まで、誰に利用いただいても違いのわかる大きな武器になると思います。

実際に設定してみたサイトがこちら

2014年1月9日木曜日

PHPフレームワークのPhalconで、CSRF対策

PHPフレームワークのPhalcon(1.2.4)で、CSRF対策です。埋め込まれるトークン(Token)の変数名(TokenKey)も変動します。非常に勉強になります。

/app/views/session/index.volt(テンプレート)
<input type="hidden" name="<?php echo $this->security->getTokenKey() ?>"
        value="<?php echo $this->security->getToken() ?>"/>
/app/controllers/SessionController.php(コントローラー)
if ($this->security->checkToken()) {
  // 正規のToken
}
実際に設定してみたサイトがこちら

2014年1月8日水曜日

PHPフレームワークのPhalconで、パスワードハッシュ

PHPフレームワークのPhalcon(1.2.4)で、パスワードハッシュです。ユーザー登録や認証の場面で重宝します。bcryptを利用していて、セキュリティーも強固。すばらしい。

/app/controllers/SessionController.php
// ユーザー登録
public function registerAction() {
  $password = $this->request->getPost('password');
  $user->password = $this->security->hash($password);
}

// ユーザー認証
public function startAction() {
  $email = $this->request->getPost('email');
  $user = Users::findFirstByEmail($email);
  if ($user) {
    if ($this->security->checkHash($password, $user->password)) {
      // ログイン成功の処理
    } else {
      // ログイン失敗の処理
    }
  }
}
実際に設定してみたサイトがこちら

2014年1月7日火曜日

PHPフレームワークのPhalconで、Voltテンプレートの変更

PHPフレームワークのPhalcon(1.2.4)で、Voltテンプレートの変更です。Voltテンプレートと言うよりは、Viewの変更、あるいはレイアウトの変更と言った方がいいのかもしれません。設定ファイルで定義されているので、拡張子の「.volt」は省いて書いてOKのようです。

/app/controllers/RssController.php
// Viewの変更(/app/views/rss.volt)
$this->view->setMainView('rss');

// Templateの変更(/app/views/layouts/rss.volt)
$this->view->setTemplateAfter('rss');

// Viewを無効にしてレンダリングしない場合
$this->view->disable();
実際に設定してみたサイトがこちら

2014年1月6日月曜日

PHPフレームワークのPhalconで、集約関数(count)

PHPフレームワークのPhalcon(1.2.4)で、モデルを利用した集約関数の count です。直感的でわかりやすいです。取得したデータは、rowcount で取得可能。

/app/controllers/NewsController.php
$news = News::count(array(
  "group" => "category",
  "order" => "rowcount"
));

foreach($news as $count){
  print $count->rowcount ;
}
実際に設定してみたサイトがこちら

2014年1月5日日曜日

右脳派の人間か、左脳派の人間化をテストしてくれる「The 30-Second Brain Test」

右脳派の人間か、左脳派の人間化をテストしてくれる「The 30-Second Brain Test」 これ面白いです。意外なテスト結果に、自分自身、驚いていまいました。自分の新たな可能性が見いだせるかもしれません(笑)。

2014年1月4日土曜日

オープンソースの3Dプリンタ「RepRap」

オープンソースの3Dプリンタ「RepRap」 オープンソースのプリンタとは何ぞや? という話ですが、3Dプリンタの設計図から製造方法まで公開されていて、プラモデルを組み立てるがごとく、3Dプリンタを自分で製造できるという代物らしいです。それでもハードルは高いと思いますが、自分で製作すれば、市販のものよりもお安いのは確か。手先の器用な方、是非どうぞ(笑)。



2014年1月3日金曜日

洋書の批評や推薦情報などを共有できる「Goodreads」

洋書の批評や推薦情報などを共有できる「Goodreads」 過去に読んだ本の批評を投稿できたり、今後読みたい本をチェックできたりと、便利な本棚(?)として利用できます。何と言っても圧倒されるのは、その書籍の数。関連する批評の数も半端ではありません。豊かなコミュニティーが広がっています。感動の書籍サイトです。

2014年1月2日木曜日

2014年ウェブデザインのトレンドは?

2014年ウェブデザインのトレンドは(10 Web design trends you can expect to see in 2014)? 10のウェブデザイントレンドが挙げられています。既に、2013年に見られた内容とも言えると思いますが、中でも、今どきのデザインは、「サイドバーが無く、視覚に訴えるものが多い」という記事は、確かにそうだなと。大手のソーシャルメディアサイトを見ても、見事に当てはまっています。サイドバーのメニューを取り払うだけで、新しさや、若さまでをもアピールできるのかもしれません(笑)。

2014年1月1日水曜日

2014年、ベストなPHPフレームワークは?

2014年、ベストなPHPフレームワークは(Best PHP Frameworks for 2014)? 2013年末時点の調査結果が集計されています。結果は以下の通り。

Laravel
Phalcon
Symfony2

Laravelの強さが際立っています。これは確かに納得。わかりやすいし、勉強しやすいですからね。一方、Phalconが2位にランクインしているのには、ビックリ。思いつきで始めたPhalcon実験サイトですが、これはこれで良かったのかなと思います。