head

2013年8月27日火曜日

GCM でマルチキャスト メッセージ送信方法(JSON形式)、(PHP) 2013-08-27

夏ですね。お盆過ぎてもまだ暑い、、

さて、PHPで
APサーバからGCM送信時に、マルチキャスト メッセージ(複数配信、JSON形式)
する方法です。最大= 1,000件までみたいですけど。

ぐぐると単発(テキスト形式)はあるけど、マルチは少なかった気がしますので、メモ。

GCMの申請、register(登録IDの確定)などは、他のサイトをご参考ください。
送信処理のみ記載です。

$apiKeyは、取得したキー使ってください、curl使ってますけど。
下記はファイルから、複数ID取得してます。($ROOT/dat)
postするパラメータなどは、下記のサイト様など参照頂ければと思います。
(いろいろ設定できるみたいです。)
===============================
<?php

$url = 'https://android.googleapis.com/gcm/send';

$message = 'Hello, test-GCM!!';

$apiKey = "xxxx";

//heaer
$header = array(
  'Content-Type: application/json',
  "Authorization: key={$apiKey}",
);

    $registerDir =  $_SERVER['DOCUMENT_ROOT'] . "/dat";
$fileList = scandir($registerDir);

//    $ict =count($fileList);
    $i_reg=0;
    $items = array();
    foreach($fileList as $s_fnm){
        if(!is_dir($s_fnm)){
     $regId = file_get_contents($registerDir . "/{$s_fnm}");
 $items[$i_reg] = $regId;
 $i_reg += 1;
        }
    }
// print(json_encode($items) );
       //post-data
$post_list = array(
'collapse_key' => 'update',
'time_to_live' => 108,
'data'         => array('message' => $message),
'registration_ids' => $items,
);

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FAILONERROR, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_POST, TRUE);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_list) );
    curl_setopt($curl, CURLOPT_TIMEOUT, 5);
 
$ret = curl_exec($curl);
var_dump($ret);
?>
===============================
実行すると、複数push配信できるはず!!(たぶん)

*)参考までに、送信の前の、登録ID保存。(Androidからの送信ID保存)
===============================
<?php
if (!isset($_POST['regId'])){
 print("-1");
 exit;
}

$registerDir =  $_SERVER['DOCUMENT_ROOT'] . "/dat";

$regId = $_POST['regId'];
$filename = md5($regId). ".txt";

file_put_contents($registerDir."/{$filename}", $regId);
?>
===============================


ご参考のサイトさま:
http://www.techdoctranslator.com/android/guide/google/gcm/gcm

http://www.atmarkit.co.jp/ait/articles/1302/12/news029.html

*) それでは、また会いましょう。

2013年8月11日日曜日

Mac OS 10.7.5に、Node.js, WebSocketをインストールしてみる。 2013-08-11


お盆の時期ですね。それにしても暑い、、

さて、
WebSocketを試したかったので。
Node.jsを Mac(10.7.5)にインストールしてみました。
若干はまったので、メモしておきます、


[1] Node.js インストール

1) http://nodejs.org/ で[INSTALL] ボタン押す。
*) 今回は、pk形式。

2) node-v0.10.15.pkg を実行。ダイアログでるので
 ひたすら、次に進む。
 完了。

3)確認。
コンソールから、
node --version
など実行。
$ node --version
 v0.10.15
version出ればOK

[2] 「npm」のインストール
ぐぐると、Ubuntu 系の説明はあるが、Macは少ない気がした。

1) apt-getで、curlのセットアップ
$ sudo apt-get install curl
 > macは、apt-getがない事に気づく(汗、)

2) macの場合、fink で対応するらしいので、
このへん参考。
 http://d.hatena.ne.jp/haronoid/20130503/1367581401
時間かかったけど、終了。しかし、 すでにcurlがインストール済だった事に気づく(汗、)
*) fink は不要かもしれません。

3) npm setup
 参考記事には、下記コマンドの記載が多いが、macだとこれエラーなりました。
 $ curl http://npmjs.org/install.sh | sh
 回避策は、ブラウザで 「http://npmjs.org/install.sh」入力して、ローカル保存。
 (wget でも良いかも。)

 $sh install.sh ,実行してOK

4) npmでのインストール手順、
$ npm install 【パッケージ名】
 npm install -g [pkg]  が良いかもしれません、 -g は、グローバル領域?。

*) この後、コンソールの再起動が必要だったかも、たぶんパスの関係で

[3] WebSocket (socket.io)
 1) socket.io入れてみました。
 npm install -g socket.io
 2) express フレームワークもついでに、追加。
 npm install -g express

*) WebSocketとかで、ぐぐると。サンプルのプロジェクトとか、
 数件でてきましたので、動かしてみました。

[4] 実行編
 このへん参考(おもしろかった、)
 http://www.atmarkit.co.jp/ait/articles/1210/10/news115.html
 expressの chatプロジェクトで、複数ブラウザ立ち上げても、同一メッセージ(chat)
 がリアルタイムにpush配信される。(外部クラウドでも、はやいのか? )


*)参考サイトさま
http://www.atmarkit.co.jp/ait/articles/1102/28/news105.html
http://www.tettori.net/post/293/

*) Node.js はデメリットもありそうですが、いろいろ試してみると
 面白そうですね。
 それでは、また会いましょう


2013年4月21日日曜日

facebook広告, 結果レポート4月、2013/04/21


サツキが咲くころですね。

4月分の宣伝キャンペーン実施しましたので(facebook広告出)、
結果を記載したいと思います。

[推奨入札価格] :おまかせ設定(デフォルト)

[条件]
ターゲット (北米、欧州、アジアの一部ねらい):
米国、
イタリア、
マレーシア、
オランダ、
ノルウェー、
カナダ、
スペイン、
スウェーデン、
スイス、
シンガポール、
イギリス、
フィンランド、
デンマーク、
日本、
韓国、
トルコ、
タイ、
ロシア、
フィリピン、
香港、
台湾、
ブラジル、
メキシコ、
フランスまたはドイツのいずれかに住んでいる

次のカテゴリに該当: 写真、iOS/Apple (All)
掲載期間(東京時間): 2013/4/9 – 2013/4/18 (約10日)
年齢:17歳以上
予算:通算= 10,000 en (JPY)

================== AD-result ===============================
[広告結果]
リーチ: 982,960
クリック数: 1,340
アクション(いいね): 56
CTR: 0.051%
平均費用: 4 en(JPY)
==================

*) 作成した、広告バナーはこれ。 (110 * 80)


*) 期間は長めにしたが、1日の予算が少ないので。効果は低い?みたいな結果でした。
*) tumblrの普及地域を考えて、欧米(先進国)をメインに配信したのも、失敗だったかもしれません。
 (以外と新興国を中心のほうが良かったのかもですね。)
*) 今回、年齢指定(17)してみました。そのせいか「いいね」少なめでした(汗、、)
 次は12歳でチャレンジするか検討です。

*) ちなみに今回出した、iPad Apps はこれです(Kuc.Board Ad for tumblr)。どうぞ。
https://itunes.apple.com/us/app/kuc.board-ad-for-tumblr/id615045225?l=ja&ls=1&mt=8

それでは、また会いましょう。



2013年4月13日土曜日

Apps-Info:「kuc.Board for tumblr」(Android) GWアプリコンテスト応募の掲載記事 2013-04-13

週刊アスキー様向け。GWアプリコンテスト応募の記事です。

概要:tumblr ビューア (タンブラーの写真ビューア)

以下はアプリ説明等です。
=====================================================
(1)アプリについてアピールしたいことを自由にコメント
【質問1】このアプリを着想されたきっかけは?
 1) 開発当時でダッシュボードなどの、グリッドレイアウト表示できるtumblrアプリが少なかった。
 2) タブレットレイアウトのtumblrアプリが少なかった。(スマホと関係ないのですが)

【質問2】このアプリの開発者的なセールスポイントを教えてください
 1) カタログを見るような、スワイプ操作で次ページを表示できます。(6 - 8アイテム)
 2) メイン画面の高速描画 (表示ページの先アイテムを事前にダウンロード)
 3) 詳細画面の高速描画 (スワイプ時には、表示ページの先アイテムを事前にダウンロード)
 4) 詳細画面で,写真(種類=写真の場合)をクリックすると、拡大画面表示できます。

【質問3】開発で苦労された、あるいは楽だったのは、どういう点ですか?
 苦労した点:スマホ(小さい画面)で、レイアウト配置等に苦労しました。

(2)アプリの画像(アイコン、スクリーンショット数点)
アイコン:

スクリーン:


=====================================================

*) おまけ[補足情報]
[Goole Play]

[製品ページ:弊社HP]


*) iOS(iPad)製品もリリースしておりますが、今回スマホ限定みたいですので
   Androidのみ応募とさせて頂きます。




2013年3月8日金曜日

twitter4J 3.0.3 Android実装、 Twitter API 1.1対応 OAuth認証 --2013/03/08

twitter4J 3.0.3 Android実装、 Twitter API 1.1対応 OAuth認証 --2013/03/08

春ですね、梅の咲く時期!!
twitter API 1.1ですが、
2013/03/05で切り替えみたいな記事見ましたので、旧APIでAndroid実装してた部分の、改修やってみました。
今頃修正しても、遅いのですが(汗、、)
現時点で、旧API 1.0でも動くみたいですが、将来的に無くなると予想して作業です。
twitter4J 2.x -> 3.0.3 の移植ですが、結構ハマリました。Androidのサンプルが少い気がしました。

準備などは下記サイトを参考。
推奨されない方法みたいですが、WebView使ってます。
基本はtwitter4J 2.xに似てます。下記ソースです。

1) requestTokenの生成, Intent起動して、onActivityResultでAccesToken生成します、
==============================================
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.auth.AccessToken;
import twitter4j.auth.OAuthAuthorization;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationContext;

public static OAuthAuthorization _oauth = null;
private RequestToken requestToken = null;
String mCallbackURL = "myapp://oauth";

public class LoadTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void ... params) {
try
{
exec_connect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
try
{
start_Intent();
}catch(Exception e){
e.printStackTrace();
}
}
}

    private void start_Intent() throws Exception{
    try
    {
         Intent intent = new Intent(this, TwitterLogin.class);
         intent.putExtra("auth_url", requestToken.getAuthorizationURL());
         this.startActivityForResult(intent, REQUEST_CODE);
    }catch( Exception e){
    throw e;
    }
    }
 

    private void exec_connect() throws Exception{
    try
    {
//Log.d(TAG, "#exec_connect=" );    
            //Twitetr4Jの設定を読み込む
            Configuration conf = ConfigurationContext.getInstance();
            //Oauth認証オブジェクト作成
            _oauth = new OAuthAuthorization(conf);
            _oauth.setOAuthConsumer(m_Const.CONSUMER_KEY, m_Const.CONSUMER_SECRET) ;
            //アプリの認証オブジェクト作成
            try {
                requestToken = _oauth.getOAuthRequestToken(mCallbackURL);
            } catch (TwitterException e) {
                e.printStackTrace();
            }
    }catch( Exception e){
    throw e;
    }
    }



2) WebView, コールバック[oauth_verifier]をGETします。
==============================================
package com.kuc_arc_f.app.hoge;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.kuc_arc_f.fw.*;


public class TwitterLogin extends Activity {

//
private com.kuc_arc_f.fw.ComUtil m_Util = new ComUtil();

protected void onCreate(Bundle bundle) {

super.onCreate(bundle);
        setContentView(R.layout.twitterlogin );
        try
        {
        init_proc();
        }catch(Exception e){
        e.printStackTrace();
        m_Util.errorDialog(this, e.toString() + e.getMessage());
        }
}
//
private void init_proc() throws Exception{
try
{
WebView webView = (WebView)findViewById(R.id.twitterlogin);
webView.setWebViewClient(new WebViewClient(){

public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);

String CALLBACK_URL = "myapp://oauth";

if(url != null && url.startsWith(CALLBACK_URL)){
String[] urlParameters = url.split("\\?")[1].split("&");

String oauthToken = "";
String oauthVerifier = "";

if(urlParameters[0].startsWith("oauth_token")){
oauthToken = urlParameters[0].split("=")[1];
}else if(urlParameters[1].startsWith("oauth_token")){
oauthToken = urlParameters[1].split("=")[1];
}

if(urlParameters[0].startsWith("oauth_verifier")){
oauthVerifier = urlParameters[0].split("=")[1];
}else if(urlParameters[1].startsWith("oauth_verifier")){
oauthVerifier = urlParameters[1].split("=")[1];
}

Intent intent = getIntent();
intent.putExtra("oauth_token"   , oauthToken);
intent.putExtra("oauth_verifier", oauthVerifier);

setResult(Activity.RESULT_OK, intent);
finish();
}
}
});

// 認証ページを表示。
webView.loadUrl(this.getIntent().getExtras().getString("auth_url"));
}catch(Exception e){
throw e;
}
}

}
3) AccessTokenをGETします。
==============================================
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

if(resultCode == RESULT_OK){
super.onActivityResult(requestCode, resultCode, intent);

TokenTask tsk = new TokenTask();
tsk.execute(intent);
}
}
 
public class TokenTask extends AsyncTask<Intent, Void, Void> {
@Override
protected Void doInBackground(Intent ... params) {
try
{
m_RetAcToken= m_Const.NG_CODE;
AccessToken token = null;
token =  _oauth.getOAuthAccessToken( requestToken, params[0].getExtras().getString("oauth_verifier"));
//Log.d(TAG, "TokenTask.token="+ token.getToken());
//Log.d(TAG, "TokenTask.token.oauth_token_secret="+ token.getTokenSecret());
m_RetAcToken= m_Const.OK_CODE;
            } catch (TwitterException e) {
                e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
try
{
if(m_RetAcToken.equals( m_Const.OK_CODE)){
//ok
}else{
m_Util.errorDialog(BG01Act.this, "system error, fail get AccessToken .");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
==============================================

*)参考サイト様:
http://techbooster.org/android/mashup/5301/
http://techbooster.org/android/5040/
http://qiita.com/items/f6f39900fd5e449045f9

2013年1月15日火曜日

adMob さんに広告出しました(出稿) 結果編 ,2013/01/15

adMob さんに広告出しました(出稿) 結果編です。


冬ですね、鍋の季節!!

AD申請が早めに返事きましたので、申請&結果内容まとめて記載します。

[結果]
インプレッション数: 400,424
クリック数: 936
CTR= 0.23%
平均 CPC= $0.05
コスト= $50 USD

==AD入札条件etc
グループ設定、デフォルト入札額= 0.5(USD)
広告編集、入札= 0.4(USD)
予算= 50 USD (そのまま)
地域:南米、アジア、東ヨーロッパ、西ヨーロッパの一部以外の地域。
*)今回、北米、オセアニア、アフリカとかは対象外しときました。
===

*)ちなみに、Apps はこれ、よろしければどうぞ。
kuc.Board :tumblr ビューワ
https://play.google.com/store/apps/details?id=com.kuc_arc_f.app.board

*) 配信開始後、5-10分程度で予算(広告在庫)使い切ったようです。(即完了メール、汗、)
 次は成功報酬型のADとかも検討しようと思います。でも予算少ないと厳しいですね、、

それでは、また会いましょう。

2013年1月4日金曜日

Android HorizontalScrollView で、指定ページに移動させる方法。 --2013/01/04

Android HorizontalScrollView で、指定ページに移動させる方法。 --2013/01/04



正月ですね。おせちの季節!!
HorizontalScrollViewで移動、イベントなどで指定ページに動かす場合、
苦戦したので、メモです。

ググると、scrollTo() とか出てきます。
メインスレッドから呼ぶと、ページ移動しません。
handler経由だと、動きました。

*) 使ったのは、このアプリ(書籍)、是非どうぞ。
https://play.google.com/store/apps/details?id=com.kuc_arc_f.app.aozora

*) 参考ページ: http://relog.xii.jp/archives/2010/11/horizontalscrol.html
それでは、また会いましょう。

=== SRC一部 ===
 public class ShowH_ScrollView extends HorizontalScrollView implements OnTouchListener, OnGestureListener
 {
static final String TAG="ShowH_ScrollView";
private Handler _handlerAnimation = null;

private final Runnable _runAnimationThread = new Runnable(){
    public void run(){
        updateAutoScroll();
    }
};

public ShowH_ScrollView(Context context) {
 super(context);
 setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
   LayoutParams.FILL_PARENT));
}

public ShowH_ScrollView(Context context, int maxItem,
  int itemWidth, int itemHeight, ArrayList<ItemPT> lst, String s_dir, View info_view)
{
this(context);
try
{
startAutoScroll();


}catch(Exception e )
{
e.printStackTrace();
}
}
/**
 * ハンドラ
 * @return
 */
private Handler getHandlerAnimation(){
    if(_handlerAnimation == null){
        _handlerAnimation = new Handler();
    }
    return _handlerAnimation;
}

public void startAutoScroll(){
    //監視を開始
    getHandlerAnimation().postDelayed(_runAnimationThread, 100 );
}
public void updateAutoScroll(){
scrollTo(itemWidth * activeItem , getScrollY());
}


 }
===

2012年12月15日土曜日

facebook広告, 結果12月、2012/12/15



facebook広告, 結果12月、2012/12/15

寒くなってきましたね、鍋の季節!!

ホリデーシーズン狙い、
前半で、iOS Apps のfacebook広告出したので、
広告申請内容と結果を記載したいと思います。

[推奨入札価格] :おまかせ設定(デフォルト)

[条件]
ターゲット:
インド、イタリア、日本、マレーシア、メキシコ、オランダ、ノルウェー、
サウジアラビア、シンガポール、韓国、スペイン、スイス、
アラブ首長国連邦、フィンランド、デンマーク、タイ、
ロシア、ブラジル、台湾またはフランスのいずれかに住んでいる

次のカテゴリに該当: iOS/Apple (All)
掲載期間(東京時間): 2012/12/9 – 2012/12/14
予算:通算= 5,000 en (JPY)


================== AD-result ===============================
[広告結果]
リーチ: 165,694
ソーシャルのリーチ: 8,166
クリック数: 943
アクション: 770
CTR: 0.304%
価格: 16 en(JPY)(最適化入札価格?)

==================
*) 分析(インサイト)は、前回11月と期間重複の為、やめときます。
*) クリック数、アクション、CTRは上がりました、入札単価下がった?気がしました。

*) ちなみに今回出した、iOS Apps はこれです(Kuc500 Ad)。ぜひどうぞ。
http://www.facebook.com/pages/Kuc500/387134194631170


2012年11月22日木曜日

facebook広告, 結果11月、2012/11/22


facebook広告, 結果11月、2012/11/22

秋も深まってきましたね。少し風邪ぎみですが
食欲の秋!!!

中盤で、iOS Apps のfacebook広告出したので、
広告申請内容と結果を記載したいと思います。

[推奨入札価格] :おまかせ設定(デフォルト)

[条件]
ターゲット:
インド、イタリア、日本、マレーシア、メキシコ、オランダ、ノルウェー、カナダ、サウジアラビア、シンガポール、韓国、スペイン、
スイス、アラブ首長国連邦、イギリス、フィンランド、デンマーク、オーストラリア、タイ、ロシア、ブラジル、台湾、
フランスまたはドイツのいずれかに住んでいる

次のカテゴリに該当: iOS/Apple (All)
掲載期間(東京時間): 2012/11/17 – 2012/11/22
予算:通算= 5,000 en (JPY)


================== AD-result ===============================
[広告結果]
リーチ: 115,136
ソーシャルのリーチ: 2,622
アクション: 680
クリック数: 531
CTR: 0.231%
価格: 22 en(JPY)(最適化入札価格?)

※今回分析もやってみたいな、と思い。[インサイト> いいね] 見てみました。




[いいね]多いのは、
メキシコ,インド,ブラジル
年代は、13-17 (中学、高校くらい? 日本だと)
が多い、年齢制限してなかったのは反省すべきかも? と思いました。
この年代だと、iPhone/iPad持ってないかな、、> DLされない(汗;;)
先進国は[いいね]少ないですね。(滝汗;;)

まあエリア違うけど、前回より[いいね]数上がったので、
うれしい悲鳴かと思って、次回のノウハウにできればと思います。
==================

*) ちなみに今回出した、iOS Apps はこれです(Kuc500 Ad)。ぜひどうぞ。
http://www.facebook.com/pages/Kuc500/387134194631170


2012年11月9日金曜日

dotnet(VB.net) で、Twitter Oauth認証(POST送信)に挑戦!! 2012/11/09


dotnet(VB.net) で、Twitter Oauth認証(POST送信)に挑戦


秋ですね。食欲の秋!! でも少し寒くなってきた。

さて、 VB.netから、twitter送信する件です。
以前使用していたDLLが急に送信NGになって、
再作成する事にしました。

とりあえず、dev.twitter.com で調査。
https://dev.twitter.com/docs/twitter-libraries#dotnet

.NET 対応のライブラリらしき記載を発見!!
TwitterVB を使ってみます。

さて実装です。
今回は、 Visual Studio 2010 Professional でビルドします。
AccessToken、AccessTokenSecretまで取得している状態とします。
(以前、取得していた為。そのまま使います。)

TwitterVB.dll、プロジェクトに参照追加。

コンパイルオプション(念のため、記載です)

プロジェクト>コンパイル>詳細コンパイルオプション
 > 対象のフレームワーク= .Net Framework 4


ConsumerKey
ConsumerSecret
AccessToken
AccessTokenSecret
送信メッセージを、渡して実行します。(↓)

====== SRCの一部
Imports TwitterVB2
Imports System.Net

Dim status as String            ="Test, msg"
Dim ConsumerKey As String       = "ConsumerKey_hoge"
Dim ConsumerSecret As String    = "ConsumerSecret_hoge"
Dim AccessToken As String       = "AccessToken_hoge"
Dim AccessTokenSecret As String = "AccessTokenSecret_hoge"

Dim tu = New TwitterUtils()
tu.UpdateStatusOAuth(status, ConsumerKey, ConsumerSecret, AccessToken, AccessTokenSecret)
====== SRCの一部 (End)

*) これで、多分送信できるはず!!

参考サイトさま:
http://v7mz.info/2012/10/29/twittervbdll/

それでは、また会いましょう。


2012年10月25日木曜日

dotcloud さんにデプロイ挑戦しました。 (php)、 2012/10/25


dotcloud さんにデプロイ挑戦しました。 (php)、 2012/10/25

秋ですね、食欲の秋!

PaaSサービス、サービス2個までは無償みたいですので、試してみました。
関連ドキュメント少ないので苦労しました。やってみると手順は少ないです。
*)公式文書ではないので、ご参考程度でお願いします。


1) 申請 、こちらで
https://www.dotcloud.com

*) 注意1: username(個人名、会社?) = サブドメインの一部になるようです。
 (適当につけると良くないかも、DNSを別途設定する場合は別)

ex) サービスURL
username=corp1
service=gretapp の場合

http://greatapp-corp1.dotcloud.com
になる。

 API Key が、発行されますのでメモ。デプロイとかで使います。

2) 準備 (mac で作成 , mac OS X/ 10.7.5)
 -a) dotcloud.yml
  1)とりあえずデプロイ用ディレクトリ作成 ($WORK_BASE)
  2) $WORK_BASE/dotcloud.yml 作成, 今回db使用しない、phpのみ

ex) $WORK_BASE/app の下にソース置きます。
==
  www:
  type: php
  approot: app
==
 -b) toolのインストール
  $ sudo easy_install pip && sudo pip install dotcloud

 -c) API Key 登録
$ dotcloud
 API key 聞かれるの入力 &Enter します。
 sudo しない場合、エラー出た気がしました。(IOError)
 ==
 IOError: [Errno 13] Permission denied: '/Users/knaka0209/.dotcloud/dotcloud.conf'


 -d) $WORK_BASE/app/nginx.conf 作成 (apache の .htaccess みたいな設定)
  *) dotcloud は、nginx httpサーバを使うようで、apache使えないみたいです。

===
location ~ (^|/)¥. {
  return 403;
}
location / {
  index index.html index.htm index.php;
  if (-e $request_filename) { break; }
  rewrite (.*(^|/)[^¥./]+)$ $1/ permanent;
  rewrite ((¥.(html|htm|php|xml|txt|js|json|css|yaml|csv))|/)$ /index.php last;
}
===

3) App 作成(deploy)
 -a) creat
 $ dotcloud create greatapp
 -b) push
 $dotcloud push greatapp

*) 成功した場合、下記のようなメッセージでます。
Deployment finished. Your application is available at the following URLs
www: http://greatapp-corp1.dotcloud.com

-c) 削除する場合。(yn 聞かれます。)
 $dotcloud destroy greatapp

*) 更新する場合は、同じディレクトリで, pushすればOKと思います。
 エラー発生など、うまくいかない場合、ひたすら destroy > create > push これの繰り返しでいけるかも!

*) 参考サイト
================================
http://docs.dotcloud.com/0.4/guides/build-file/
http://www.skyarc.co.jp/engineerblog/entry/ablogcms_dotcloud.html
http://d.hatena.ne.jp/sotarok/20110508/dotcloud_php_nginx
================================

*) ちなみに公開したサービスはこれ、写真共有サービス。よろしければどうぞ
  (ベータ試験運用、停止予定あり。将来的には別クラウドに移動予定)
http://pshare-kucarc.dotcloud.com/


それは、また会いましょう。



google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。 開発環境まわりの内容となり。先人様の情報を元に調査しました。 google colab(google colaboratory) を試してみました。機械学習系の いくつかのライブラリがインストール済みで、 クラウド上で、ある程度機械学...

AD-parts

Shop
Bluetooth搭載
ベース基板

Social