2017年8月22日火曜日

MySQLで日付から「○月第○週」を求める方法

MySQLで日付から「○月第○週」を求める方法のメモ。

-- テスト用テーブル・データ作成
create table test.weektest (date1 date primary key);

insert into test.weektest values('2017/06/01');
insert into test.weektest values('2017/06/02');
insert into test.weektest values('2017/06/03');
insert into test.weektest values('2017/06/04');
insert into test.weektest values('2017/06/05');
insert into test.weektest values('2017/06/06');
insert into test.weektest values('2017/06/07');
insert into test.weektest values('2017/06/08');
insert into test.weektest values('2017/06/09');
insert into test.weektest values('2017/06/10');
insert into test.weektest values('2017/06/11');
insert into test.weektest values('2017/06/12');
insert into test.weektest values('2017/06/13');
insert into test.weektest values('2017/06/14');
insert into test.weektest values('2017/06/15');
insert into test.weektest values('2017/06/16');
insert into test.weektest values('2017/06/17');
insert into test.weektest values('2017/06/18');
insert into test.weektest values('2017/06/19');
insert into test.weektest values('2017/06/20');
insert into test.weektest values('2017/06/21');
insert into test.weektest values('2017/06/22');
insert into test.weektest values('2017/06/23');
insert into test.weektest values('2017/06/24');
insert into test.weektest values('2017/06/25');
insert into test.weektest values('2017/06/26');
insert into test.weektest values('2017/06/27');
insert into test.weektest values('2017/06/28');
insert into test.weektest values('2017/06/29');
insert into test.weektest values('2017/06/30');
insert into test.weektest values('2017/07/01');
insert into test.weektest values('2017/07/02');
insert into test.weektest values('2017/07/03');
insert into test.weektest values('2017/07/04');
insert into test.weektest values('2017/07/05');
insert into test.weektest values('2017/07/06');
insert into test.weektest values('2017/07/07');
insert into test.weektest values('2017/07/08');
insert into test.weektest values('2017/07/09');
insert into test.weektest values('2017/07/10');
insert into test.weektest values('2017/07/11');
insert into test.weektest values('2017/07/12');
insert into test.weektest values('2017/07/13');
insert into test.weektest values('2017/07/14');
insert into test.weektest values('2017/07/15');
insert into test.weektest values('2017/07/16');
insert into test.weektest values('2017/07/17');
insert into test.weektest values('2017/07/18');
insert into test.weektest values('2017/07/19');
insert into test.weektest values('2017/07/20');
insert into test.weektest values('2017/07/21');
insert into test.weektest values('2017/07/22');
insert into test.weektest values('2017/07/23');
insert into test.weektest values('2017/07/24');
insert into test.weektest values('2017/07/25');
insert into test.weektest values('2017/07/26');
insert into test.weektest values('2017/07/27');
insert into test.weektest values('2017/07/28');
insert into test.weektest values('2017/07/29');
insert into test.weektest values('2017/07/30');
insert into test.weektest values('2017/07/31');
insert into test.weektest values('2017/08/01');
insert into test.weektest values('2017/08/02');
insert into test.weektest values('2017/08/03');
insert into test.weektest values('2017/08/04');
insert into test.weektest values('2017/08/05');
insert into test.weektest values('2017/08/06');
insert into test.weektest values('2017/08/07');
insert into test.weektest values('2017/08/08');
insert into test.weektest values('2017/08/09');
insert into test.weektest values('2017/08/10');

SELECT
date1
,CONCAT(MONTH(ADDDATE(date1, weekday(date1) * -1))
  , '月第'
  , FLOOR((DAYOFMONTH(ADDDATE(date1, weekday(date1) * -1))-1)/7)+1, '週') 
AS WEEK
FROM test.weektest
ORDER BY date1;

↓のような結果が得られる。月曜始まりとして、ある日付の週の月曜日がある月の第○週を返す。

date1 WEEK
2017/06/01 5月第5週
2017/06/02 5月第5週
2017/06/03 5月第5週
2017/06/04 5月第5週
2017/06/05 6月第1週
2017/06/06 6月第1週
2017/06/07 6月第1週
2017/06/08 6月第1週
2017/06/09 6月第1週
2017/06/10 6月第1週
2017/06/11 6月第1週
2017/06/12 6月第2週
2017/06/13 6月第2週
2017/06/14 6月第2週
2017/06/15 6月第2週
2017/06/16 6月第2週
2017/06/17 6月第2週
2017/06/18 6月第2週
2017/06/19 6月第3週
2017/06/20 6月第3週
2017/06/21 6月第3週
2017/06/22 6月第3週
2017/06/23 6月第3週
2017/06/24 6月第3週
2017/06/25 6月第3週
2017/06/26 6月第4週
2017/06/27 6月第4週
2017/06/28 6月第4週
2017/06/29 6月第4週
2017/06/30 6月第4週
2017/07/01 6月第4週
2017/07/02 6月第4週
2017/07/03 7月第1週
2017/07/04 7月第1週
2017/07/05 7月第1週
2017/07/06 7月第1週
2017/07/07 7月第1週
2017/07/08 7月第1週
2017/07/09 7月第1週
2017/07/10 7月第2週
2017/07/11 7月第2週
2017/07/12 7月第2週
2017/07/13 7月第2週
2017/07/14 7月第2週
2017/07/15 7月第2週
2017/07/16 7月第2週
2017/07/17 7月第3週
2017/07/18 7月第3週
2017/07/19 7月第3週
2017/07/20 7月第3週
2017/07/21 7月第3週
2017/07/22 7月第3週
2017/07/23 7月第3週
2017/07/24 7月第4週
2017/07/25 7月第4週
2017/07/26 7月第4週
2017/07/27 7月第4週
2017/07/28 7月第4週
2017/07/29 7月第4週
2017/07/30 7月第4週
2017/07/31 7月第5週
2017/08/01 7月第5週
2017/08/02 7月第5週
2017/08/03 7月第5週
2017/08/04 7月第5週
2017/08/05 7月第5週
2017/08/06 7月第5週
2017/08/07 8月第1週
2017/08/08 8月第1週
2017/08/09 8月第1週
2017/08/10 8月第1週



2017年3月16日木曜日

AIが人に代わる未来は来ない

グーグルの研究本部長が予言「AIが人に代わる未来は来ない」

を読んだ。
人間が認識しておかなければならないのは、こういったモノは人間が使えるツールであって、われわれがやってきたことにとって代わる、完全に代替するものではないということです。


常々思ってたことなのでGoogleの研究本部長が言ってくれてスッキリした。

技術者がAIを進化させて、人々がうまく使いこなせるようになる事は意味があるけど、
お任せってわけにはなかなかいかないでしょう。



まあでも100年後どうなってるかは分からないけどね。



2017年3月1日水曜日

最近読んだものメモ

Spring Boot解説第2回 (IDEの構築とHello World)
http://qiita.com/TEBASAKI/items/a30a7daf11cdb51272fb

Spring Boot 使い方メモ
http://qiita.com/opengl-8080/items/05d9490d6f0544e2351a

Spring MVCのコントローラでの戻り値いろいろ
http://qiita.com/tag1216/items/3680b92cf96eb5a170f0

Spring4勉強会 第三回(Validation)
http://qiita.com/yu_eguchi/items/5a1b2ae46ff803b020bf

Thymeleafチートシート
http://qiita.com/NagaokaKenichi/items/c6d1b76090ef5ef39482

Spring BootでSpring SecurityのCSRF対策を使う
http://qiita.com/nenokido2000/items/22a97a26a5858ddb164f

OkHttp (POST送信)
http://square.github.io/okhttp/

CentOS6.7 + Java 1.8 + Tomcat 8 の環境を作るには
http://qiita.com/hirohiro77/items/893be0dea507925f6322

CentOSでサーバー公開するためのセキュリティ設定メモ
http://qiita.com/narumi_/items/179048afb48f64f45c6e

鍵認証の設定をしてパスワードログインを無効にするまで
http://qiita.com/nama/items/54e8f62bfe835bf24a4c

AWSのApache2.4の初期設定とセキュリティ設定
http://qiita.com/shojimotio/items/41a74f314f3e47c018a5

中規模サイトのApacheチューニング
http://qiita.com/kou/items/acb3dcf1dcb428d7a3ec

2016年11月22日火曜日

Spring Day 2016 参加メモ

先日11/18、Spring Day 2016 に行ってきました。

そろそろと思い、最近 Spring Framework、Spring Boot の情報収集・勉強を始めてた所でした。

このイベントは大規模で、開発元や国内の大手・有力な会社が講演を行うということで、期待大でした。

という事で参加メモ。


1.Application Re-Architecture Technology
 ~ StrutsからSpring MVCへ ~
倉元 貴一/池谷 智行(NTTデータ)

メモ:
 Springの薄くラップしたTERASOLUNAの説明。ガイドラインが目玉。
 二重送信防止機能がある。
 TERASOLUNAはSpring Boot未対応?みたいだが、ガイドラインは読む価値あり。



2.Spring Bootで学ぶ初めてのWEBアプリ開発
てらひで

http://www.slideshare.net/terahide/spring-bootweb-69236132

メモ:
 Bootのチュートリアルを少しデモ。関係ない話が多くて面白くなかった。



3.LINE における Spring Framework の活用
松野 徳大(LINE)



メモ:
 LINEではかなりJava率が高い。Springを多く使っている。
 フレームワーク決めつけない。一つにコミットすると変化に弱い。
 LINE Notifyで使用。
 Redisは良い
 Jetty使ってる。起動速い
 LINEは全部オンプレ
 freemarker使用。タイムリーフと人気を二分
 mybatis優勢。JPA少ない。
 技術的にかなり濃い内容。松野氏は若そうだがすごい技術者だと思う。しゃべりも上手い。
 


3.楽天トラベルとSpring
藤井貴浩/Thomas Ludwig(楽天トラベル)



メモ:
 マイクロサービス推進
 SpringRESTDocsでAPIドキュメント作成
 マイクロだとログ追跡が面倒。MDCを利用。
 Spring Cloud Sleuthを使用
 楽天は堅そうなイメージだったけど結構攻めてる。



4.アメブロの大規模システム刷新とそれを支える Spring
向井 政貴/服部 拓也(サイバーエージェント)


メモ:
 OS、言語、フレームワークの陳腐化が深刻化
 レガシーコードも多く課題山積
 DC移設の際にシステム刷新した。Springを採用。
 SpringFox+SwaggerでAPIドキュメント作成
 とても分かりやすい内容で、面白かった。大規模になってくるとみんなAPI化。
 +Swagger等でAPIドキュメント作るのが常識になっているのが分かった。



5.Spring で実現する SmartNews のニュース配信基盤
井口 貝(SmartNews)


メモ:
 Seasar2からSpring Bootへ移行した。
 マイクロサービス化で個々のコンポーネントに集中。
 SpringFox+SwaggerでAPIドキュメント作成
 高度な周辺エコシステム
 spring boot adminでUIで設定確認、変更ができる
 actuatorでのメトリクス収集
 こちらもマイクロサービス化。今回Springのイベントなんだがマイクロサービスも存在感大だった。



その他、参加してないが以下のセッションも非常に興味深い。


Let's Visualize Your Spring Cloud Applications!
~ElasticsearchとSleuthを使った可視化の実際〜
谷本 心(Acroquest Technology)




Spring Security で作る Web API アクセス制御の最適解
~ Basic認証? APIキー? OAuth 2.0? OpenID Connect? ~
都元ダイスケ(クラスメソッド)





2016年10月4日火曜日

Rails勉強中

Ruby on Rails勉強中。

とりあえずドットインストールにて。
http://dotinstall.com/lessons/basic_rails_v2

Javaと相当文化が違う。

Migrationて、メリットが分からないな。

カラム追加する時とか、普通にALTERすればいいんじゃない。って思う。

でも、色々面白い。

2015年8月24日月曜日

GMail APIを使ってJavaからGMail検索

















GMail APIというのが最近できたらしい。

Java Quickstart
https://developers.google.com/gmail/api/quickstart/java

上記の説明では、gradleを使うようになっている。
gradleプラグインが標準で入っているEclipse 4.5をインストールしておく。もちろんPleiadesを使う。

Eclipseで、新規→その他→Gradle プロジェクト で、プロジェクトを作成する。

Library.javaとLibraryTest.javaが自動で作成されるが削除する。

「Gradle タスク」ビューでbuildを右クリックして「Gradle タスクの実行」をクリックすると、以下のエラーが出た。

--------------------------------------------------------
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Could not find tools.jar

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
--------------------------------------------------------

プロジェクトルートフォルダに、gradle.propertiesを作成し、以下のようにJDKのパスを設定した。
org.gradle.java.home=C:/Program Files/Java/jdk1.8.0_40


これで上記エラーは出なくなったが、違うエラーになった。
--------------------------------------------------------
C:\eclipse4.5\workspace\GMailAPI\src\main\java\GmailQuickstart.java:16: エラー: シンボルを見つけられません
private static FileDataStoreFactory DATA_STORE_FACTORY;
--------------------------------------------------------

依存性の解決がされていない。
自分でjarダウンロードのタスクを書いて実行しないといけない。


build.gradleに以下を追加する。libsフォルダはルートに作成しておく。
-------------------------------------------------
task copyDependencies(type:Copy) {
    from (configurations.compile)
    into 'libs' //ダウンロード先ディレクトリ
}
-------------------------------------------------

「実行の構成」から、Gradleの実行構成を作り、タスクに「copyDependencies」を入力して実行すると、
libsにjarがダウンロードされる。

その後、Eclipse上で「Javaのビルド・パス」から、libsにダウンロードしたjarをビルド・パスに入れる。

GmailQuickstart.javaのコンパイルエラーがなくなるので、Eclipseから普通に実行する。
以下のメッセージが表示される。

-------------------------------------------------
Please open the following address in your browser:
  https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=xxxxxxxxx-xxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=http://localhost:23189/Callback&response_type=code&scope=https://www.googleapis.com/auth/gmail.labels
Attempting to open that address in the default browser now...
-------------------------------------------------

ブラウザで上記URLが自動的に開き、Googleの承認画面が表示されるので、「承認」をクリック。
以下のメッセージが表示された。
Received verification code. You may now close this window...


再度、GmailQuickstartを実行すると、めでたくGMailのラベル一覧が表示された。
※出力結果は割愛

###########################################################

次に、以下のコードでメール(メッセージ)の検索を試みる。
---------------------------------------------------------
Gmail service = getGmailService();
String user = "me";
ListMessagesResponse listResponse = service.users().messages().list(user).setQ("検索ワード").execute();
List<Message> messages = listResponse.getMessages();
if (messages.size() == 0) {
System.out.println("No messages found.");
} else {
System.out.println("messages:");
for (Message message : messages) {
System.out.printf("- %s\n", message);
}
}
---------------------------------------------------------


実行すると、権限がないとのエラーになる。
---------------------------------------------------------
Credentials saved to C:\Users\nob\.credentials\gmail-api-quickstart
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}
---------------------------------------------------------


↓に着目する。このフォルダを一旦削除して、再実行すると再度ブラウザで承認画面が開く。
Credentials saved to C:\Users\nob\.credentials\gmail-api-quickstart

しかし、相変わらず「メールボックス ラベルの管理」しか表示されない。


GmailQuickstart.javaのここに着目する。
private static final List<String> SCOPES = Arrays.asList(GmailScopes.GMAIL_LABELS);

以下のように、GMAIL_READONLYを追加する。

private static final List<String> SCOPES = Arrays.asList(GmailScopes.GMAIL_LABELS, GmailScopes.GMAIL_READONLY);


再度実行すると、リクエストの許可画面で、「メール メッセージと設定の表示」も表示された。
承認後、再実行すると、検索が実行できた。


しかし、出力結果を見ると、以下のようにidとthreadIdしかゲットできていない。
-------------------------------------------------------
- {"id":"14f5f0xxxxxxxxxx","threadId":"14f5eefxxxxxxxxxx"}
- {"id":"14f5eexxxxxxxxxx","threadId":"14f5eefxxxxxxxxxx"}
-------------------------------------------------------


メールの内容(送信者、受信者、サブジェクト、本文、etc...)をゲットしたい場合は、
idを元に再度getする必要がある。



以下は、検索して日付とサブジェクトと本文の一部(snippetと言う)をゲットする例。
---------------------------------------------------------
Gmail service = getGmailService();
String user = "me";
Long max = 5L; //最大件数
ListMessagesResponse listResponse = service.users().messages().list(user).setQ("検索ワード").setMaxResults(max).execute();
List<Message> messages = listResponse.getMessages();
System.out.println("ヒットした件数: " + messages.size());
for (Message message : messages) {
Message detailMessage = service.users().messages().get(user, message.getId()).execute();
List<MessagePartHeader> headers = detailMessage.getPayload().getHeaders(); //ヘッダー一覧
String date = "";
String subject = "";
for(MessagePartHeader header : headers) {
if ("Date".equals(header.getName())) { //日付
date = header.getValue();
}
else if ("Subject".equals(header.getName())) { //サブジェクト
subject = header.getValue();
}
}
System.out.println(date + "  " + subject);
System.out.println(detailMessage.getSnippet());
System.out.println();
}
---------------------------------------------------------


setQ("検索ワード")の部分は、GMailブラウザ版と同様の検索機能が色々使える。

 送信者を指定する例:   from:送信者の名前またはアドレス
 期間を指定する例:      after:2015/08/15 before:2015/08/25



しかし、、自分でタスク書いてlibsにダウンロードするなら、gradleである必要があったのかな・・・。

ちなみにlibsにダウンロードされたjarの一覧はこちら。

commons-codec-1.3.jar
commons-logging-1.1.1.jar
google-api-client-1.20.0.jar
google-api-services-gmail-v1-rev29-1.20.0.jar
google-http-client-1.20.0.jar
google-http-client-jackson2-1.20.0.jar
google-oauth-client-1.20.0.jar
google-oauth-client-java6-1.20.0.jar
google-oauth-client-jetty-1.20.0.jar
guava-jdk5-13.0.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-2.1.3.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
jsr305-1.3.9.jar
servlet-api-2.5-20081211.jar


2015年8月21日金曜日

Amazon S3にawscliのs3 syncを使ってファイルバックアップ

【S3事前準備】
1.AWSアカウントを作成する。
2.AWSコンソールにログインし、S3の管理画面を開く。              
3.バケットを作成する。名称は"xxxx-bucket"等任意。
4.右上のユーザー名をクリックし、「認証情報」をクリック。
5.「アクセスキー」を開き、「新しいアクセスキーの作成」から作成し、アクセスキーIDと、シークレットアクセスキーをエディタ等に控える。(後で再確認できない!)

【s3 sync インストール・設定】
1.pythonインストール
     yum install python
2.pipインストール(awscliをインストールするためのもの)
     cd /usr/local/src
     wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
     python get-pip.py
3.awscliインストール・設定(AWS公式ツール)
     pip install awscli
     aws configure 
         →アクセスキーIDとシークレットアクセスキーを入力する。Default region nameとDefault output formatは未入力でEnter。

【S3へのバックアップ】
1.バックアップコマンド実行
     aws s3 sync バックアップファイルがあるディレクトリ s3://xxxx-bucket/
     →バケットにファイルが送信される。コピー元にフォルダがある場合はそれも同期される。
         既にS3側に同一ファイルが存在する場合は送信されない。
2.ファイル削除コマンド実行
     aws s3 rm  s3://xxxx-bucket/ファイル名
     →S3のファイルを削除する。

http://docs.aws.amazon.com/cli/latest/reference/s3/index.html

※s3fsという、S3をファイルシステムにマウントしてくれるサードパーティツールもあるが、安定していないのでおすすめできない

2015年8月19日水曜日

DaiGo語録メモ

2015年6月29日月曜日

Androidで写真と動画を複数選択するUI

Androidで写真と動画を複数選択するUIの作り方を書いてみます。

MediaChooserというライブラリを使用します。

https://github.com/learnNcode/MediaChooser

こんな感じで、ビデオのタブと写真のタブがあり、
選択して右上の「Done」を押すと決定するというUIです。



1.SDK Managerで、以下をインストール。すでにInstalledであれば不要。
 Android Support Repository
 Android 4.4.2 (API 19)の中の以下2つ。
  SDK Platform
  Google APIs (x86 System Image)

2.Android Studioを再起動。

3.https://github.com/learnNcode/MediaChooser に行き、右側の Download ZIP を
 押してダウンロードし、解凍しておく。

4.Android Studioのメニューの File → Import Project から、
 解凍した中の mediaChooser-sample フォルダを選択してインポート。
 comlearnNcodemediachoosersampleとmediaChooserlibの2つのプロジェクトができる。

5.mediaChooserlib/manifests/AndroidManifest.xml のandroid:name="@string/app_name" の所でエラーになるので、
 android:label="@string/app_name" に修正。

6.さらに、同ファイルの
 com.learnncode.mediachooser.fragment.ImageFragment の所でエラーになるので、
 <activity を <fragment に修正。その下のVideoFragmentの所も同様。

7.android:theme="@style/AppBaseTheme"  が重複しているとのエラーが出るので、
 android:theme="@style/AppBaseTheme" を削除。

8.メニューの Build → Clean Project を実行すると、ビルドが成功。
 (BUILD SUCCESSFUL)

9.アプリを実行 (Run 'app')すると、サンプルアプリが起動する。
 少し動かしてみて感触を掴んだら、今度は自分のアプリに組み込む。

10.自分のアプリをAndroid Studioで開いて、File → Project Structure を開く。
 左上の + をクリックし、下の枠の Improt Existing Project を選択して Next を押す。

11.先ほど解凍した MediaChooser-lib フォルダを選択して Next を押して、さらにNext、Finish を押す。
 ビルドが行われるので、しばらく待つと、mediaChooserlib というライブラリが自分のアプリと同じ階層に現れる。

12.上記の5~8を実行する。

13.続く・・・

2015年3月20日金曜日

メンタリストDaigoが最近気になる

2015年2月5日木曜日

iOS8のSystemButtonのスクリーンショット一覧

Titaniumで使える、iOSのSystemButtonのスクリーンショットをメモとして残します。

iPhone5S、iOS8のものです。



ACTION
ACTIVITY
ADD
BOOKMARKS
CAMERA
CANCEL
COMPOSE
CONTACT_ADD
DISCLOSURE
DONE
EDIT
FAST_FORWARD
FIXED_SPACE
FLEXIBLE_SPACE
INFO_DARK
INFO_LIGHT
ORGANIZE
PAUSE
PLAY
REFRESH
REPLY
REWIND
SAVE
SPINNER
STOP
TRASH


2014年9月20日土曜日

Jリーグ各チーム用スマホアプリ

レッズマイライフ(iPhone版・Android版)をベースとして、
Jリーグの各クラブ用のアプリを作ってます。

今の所、以下3つのアプリをリリースしてます。
全チーム分、iPhone版とAndroid版を作る予定。

スマートJ for 川崎フロンターレ iPhone版

スマートJ for 川崎フロンターレ Android版

スマートJ for 横浜F・マリノス Android版

スマートJ for アルビレックス新潟 Android版

★ ★ ★ ★ ★ ★ ★ ★ ★

マリノス版のスクリーンショット。
マリノスに関連するニュース、ブログのみ表示します。


試合日程。ハイライト動画も見れます。


順位表。


2014年6月30日月曜日

「代表なう」iPhone版リリース!

アプリ「代表なう」iPhone版、6/21にリリースできました!


ワールドカップの各国代表選手のTwitter、Facebook投稿をまとめてチェックできます。


投稿内容の日本語訳表示に対応しています!


右上の「翻訳する」をタップすると、日本語の表示に切り替わります。


 



























ハメス・ロドリゲス、すごいですね!


ネイマールも結構つぶやいてます!



ぜひダウンロードしてみてください~!


2014年6月10日火曜日

Androidアプリ「W杯代表なう」リリース!

前回のブログから1年以上空いてしまいました。

本日6/10、Androidアプリ「W杯代表なう」をリリースしました!!





見ての通り、ワールドカップに出場する各国代表選手のTwitter、Facebook、ブログの
投稿をまとめ読みできるアプリです。


外国語は何言ってるか分からないので、自動翻訳機能を予定しています。


ワールドカップの主役たちの発信をチェックして、

4年に1度の祭典をさらに楽しみましょう!


https://play.google.com/store/apps/details?id=net.footballersvoices


※iPhone版も近々登場予定です!

2013年4月30日火曜日

Node.js で Google Feed API

さて、浦和レッズ My Lifeではニュース記事の取得に
Google Readerを使用しているが、Googleが7/1でサービス終了するという話で
代替手段が必要になった。

feedlyがGoogle Reader互換APIを提供するという話もあるが、
まだ情報が公開されていないので、Node.jsとGoogle Feed APIで
作ってみることにしよう。

ということで、Node.jsのインストール。
http://snippets.takahironakamori.jp/2013/01/nodejs_install/

最初にPython 2.7.3のインストール。
$ cd /tmp
$ wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar zxvf Python-2.7.3.tgz
$ ./configure --with-threads --enable-shared
$ make
$ sudo make install
$ ln -s /usr/local/lib/libpython2.7.so.1.0 /lib64/
$ python -V
Python 2.7.3と表示されたらOK。

* * * * * * * * * * * * * * * * * * * * * * * * * *

次にNode.jsのインストール。
$ cd /tmp
$ wget -N http://nodejs.org/dist/node-latest.tar.gz
$ tar xzvf node-latest.tar.gz
$ cd node-v0.x.xx ←解凍したディレクトリへ移動
$ make
$ sudo make install
$ node -v
v0.10.5と表示されたらOK。(2013/4/30時点)

* * * * * * * * * * * * * * * * * * * * * * * * * *

次に、Node.jsでGoogle Feed APIを使うためのモジュールをインストール。
https://npmjs.org/package/google-feed-api

$ mkdir nodetest  ※任意のDIR
$ cd nodetest
$ npm install google-feed-api

* * * * * * * * * * * * * * * * * * * * * * * * * *
そして実装してみる。
$ vi google_feed_api_test.js
↓中身
//モジュールロード
var gfeed = require('google-feed-api');
//フィードを読み込み
var feed = new gfeed.Feed("http://www.uramaga.jp/index.rdf");
feed.load(function(res) {
        console.log("site title=" + res.feed.title);
});
//フィード取得件数設定
feed.setNumEntries(10);
//フィードを読み込む
feed.listItems(function(items){
        for(i=0; i<items.length; i++) {
                var item = items[i];
                console.log("title=" + item.title + "  " + item.publishedDate);
//              console.log("   content=" + item.content);
        }
});

$ google_feed_api_test.js

を実行すると結果は以下の通り。
feed title=浦和レッズマガジン
title=「浦和レッズマガジン×浦和パルコ水内猛&都築龍太トークライブ」を開催しました!  Fri, 07 Dec 2012 01:55:55 -0800
title=水内猛&都築龍太トークライブ 11月25日(日)、浦和パルコにて開催決定  Sun, 11 Nov 2012 17:35:26 -0800
title=力(リキ)で飲もう。レッズを語ろう。水内猛&島崎英純ウラマガ・トークライブ<RIKI NIGHT>10月23日(火)開催  Wed, 26 Sep 2012 06:31:05 -0700
title=永井雄一郎ナイト 真夏の夜のトークライブ 開催決定! 8月23日(木)19:30~ 東京開催 司会:水内猛  Wed, 15 Aug 2012 05:18:17 -0700
title=水内猛&池田学&時田愛梨7/10トークライブ申込受付中! ウラマガ8月号をプレゼント  Wed, 04 Jul 2012 21:28:13 -0700
title=【残席わずか】水内猛&都築龍太トークライブ 6月25日(月)テレ玉スタジオにて開催  Fri, 22 Jun 2012 04:26:59 -0700
title=5月11日(金)福永泰&島崎英純ウラマガトークライブ参加者募集 最新号をプレゼント  Wed, 02 May 2012 15:26:16 -0700

Node.js+Google Feed APIでフィードの内容が取得できた。

* * * * * * * * * * * * * * * * * * * * * * * * * *

読み込んだ結果値の構造は
https://developers.google.com/feed/v1/devguide?hl=ja#resultJson
を参照。


2012年11月20日火曜日

スマホアプリ分析ツール「App Annie」がすばらしい



















ようやくiPhoneアプリをリリースして、

「よし、どのくらいダウンロードされてるかな?」

と思って、iTunes Connectで意気揚々と「Sales & Trend」をクリックしたまではいいが・・・



日ごと、週ごとのダウンロード数やランキングは分かるけど、

合計ダウンロード数が分からない。


なんでだ!?と思いつつ検索してると、App Annie というサービスを発見。


アカウント登録してしばし使ってみた所、これはいい!


ダウンロード推移やランキング推移がチャートで見やすく表示され、

もちろん合計ダウンロード数も表示される。


iPhone/Androidに対応しているし、無料で使えるし、

スマホアプリ開発者には必須のサービスとなるね。


「Sales & Trend」を見ることは二度とないかも?


2012年11月13日火曜日

「浦和レッズ My Life」 iPhone版リリース

「浦和レッズ My Life」 iPhone版、

先日の申請後、バグにより1回リジェクトされた後、

本日めでたく承認されました!!



このアプリは、

浦和レッズのファン・サポーターのための情報集約アプリ です!


浦和レッズに関係するニュース・ブログの更新情報一覧、試合日程・結果やハイライト動画検索、

順位表やtwitter閲覧の機能があります。





































































2012年シーズンはもう残り3試合ですが、

レッズサポの方は是非ダウンロードして使ってみて下さい~!


ここからダウンロード↓

https://itunes.apple.com/jp/app/pu-herezzu-my-life/id570541514?l=ja&mt=8



2012年10月21日日曜日

2012年10月18日木曜日

iPad mini

もうすぐ発表されるiPad mini。


速攻で予約するよっ!


いや~ようやくだなあ。

Galaxy Tab、Nexus7は我慢して見送ってきたからな。


iPhone5はすごくいいけど、やはりもっと大きく、広く見たい。



そして、、アプリ開発はまた困難が増える・・・のか?

2012年10月15日月曜日

iPhoneアプリ開発

iPhoneアプリ開発は複雑ですね。

開発者登録、証明書、デバイス登録、配布用アーカイビング、iTunes Connectなど、

やることがてんこもり。。

でも70万近くのアプリが公開されていて増え続けている。

ハードルの高さを考えると、このプラットフォームは本当にすごいです。


自分もそのプレイヤーになるべく、浦和レッズ My LifeのiPhone版をTitaniumで作ってます。

あともう少し・・・・

今シーズン中に出すぞ!