2013/06/28

Thrift 0.9.0 を iOS から使ってみる(その2 IDL作成編)

今井です

前回に引き続き Thrift のお話です。

2. IDL を書く


さて、前回で Thrift のインストールが出来たので、今回はサーバに問い合わせる API とそこで使用する構造体を定義します。

ファイル名


作成するIDLのファイル名は特に制限が無いようですが、チュートリアルに習って拡張子を .thrift とすることにしました。

IDLの文法


Thrift IDL の文法は 公式サイト に BNF 記法 で記されています。
BNF 記法については @IT:BNF記法入門 などを御覧ください。

使用できる定義


使える定義は const, typedef, enum, senum, struct, exception, service の7種。

senum は文字列の列挙型。
senum DAY {
    "SUNDAY",
    "MONDAY",
    "TUESDAY",
    "WEDNESDAY",
    "THURSDAY",
    "FRIDAY",
    "SATURDAY",
}
のように定義して使用するようです。

exception は例外ですが、以前のバージョンで試してみたところ動作しなかったとの情報もあるため、実際に動作するか確認してから使ったほうがよさそうです。

service は Function を意味のある単位でまとめて名前を付けるために使用するようです。
生成した Obcective-C のコードではプロトコルとして実装されていました。

使用出来る基本型


基本型は bool, byte, i16, i32, i64, double, string, binary, slist の9種。

byte 〜 i64 の整数型はいずれも符号あり、string は UTF-8 文字列。
slist はカンマ区切りの文字列で表したリストらしいです。

使用出来るコンテナ


使えるコンテナは map, set, list の3種。
通信用の型としては list だけで十分だし、map, set はトラブルの元になりそうなので、とりあえず list だけを使用することにしました。

コメント


コメントについては IDL の所に説明がありませんでしたが、
/*
 * 複数行にわたるコメント
 * 複数行にわたるコメント
 */

// 行末尾までコメント

# コメント
のような書き方でよいみたいです。
Java Doc 風に書いてみましたが残念ながら生成されたファイルにはコメントが入りませんでした。

実験用サンプル定義


公式サイトのIDLのページ末尾の辺りにサンプルへのリンクがあるのでわざわざ作るのはやめました。
Here are some examples of Thrift definitions, using the Thrift IDL:
このくらいの情報があれば IDL を書くことが出来そうです。

ということで、今回はこれでおしまい。
次回は Xcode への組込などを書く予定です。

2013/06/25

Thrift 0.9.0 を iOS から使ってみる(その1 インストール編)

今井です

現在開発中のiOSアプリでサーバとの通信部分を Thrift で実装する事にしたので使い方をメモしておきます。

1. Apache Thrift のインストール

MacPorts を使って次のようにインストールしました。
Homebrew でもインストールできるようですが、システムに依存せず確実に動作する事が望ましいので MacPorts でインストールしました。

  1. MacPorts のパッケージを検索して Thrift がインストール可能か確認する。
    $ port search thrift
    p5-thrift @0.8.0 (perl)
        Perl implementation of Thrift serialization library
    
    p5.8-thrift @0.8.0 (perl)
        Perl implementation of Thrift serialization library
    
    p5.10-thrift @0.8.0 (perl)
        Perl implementation of Thrift serialization library
    
    p5.12-thrift @0.8.0 (perl)
        Perl implementation of Thrift serialization library
    
    p5.14-thrift @0.8.0 (perl)
        Perl implementation of Thrift serialization library
    
    p5.16-thrift @0.8.0 (perl)
        Perl implementation of Thrift serialization library
    
    py-thrift @0.9.0 (python)
        Python bindings to Thrift
    
    py25-thrift @0.9.0 (python)
        Python bindings to Thrift
    
    py26-thrift @0.9.0 (python)
        Python bindings to Thrift
    
    py27-thrift @0.9.0 (python)
        Python bindings to Thrift
    
    thrift @0.9.0 (devel)
        framework for scalable cross-language services development
    
    thrift-devel @1372257 (devel)
        framework for scalable cross-language services development
    
    Found 12 ports.

    "thrift" を含むパッケージは12個見つかりました。その中に thrift @0.9.0 (devel) というお目当ての物が見つかりました。
  2. インストールオプションを確認する。
    $ port variants thrift
    thrift has the variants:
       csharp: enable the C# library
       erlang: enable the Erlang library
       glib2: enable the C (GLib) library
       haskell: enable the Haskell library
       java: enable the Java library
       php: enable the PHP library
       universal: Build for multiple architectures

    "universal" は PowerPC Mac と Intel Mac の両方に対応したバイナリを生成するオプションなので、Intel Mac のみで使用する私の環境では指定不要。"java" は使用する事が決まっているので必須。残りは現時点では不要だが、後でインストールし直すのも面倒なので全部指定することにしました。
  3. インストールする。
    $ sudo port install thrift +csharp +erlang +glib2 +haskell +java +php
    
以上でインストール完了です。

使い方はチュートリアルに書いてあるとおりなのですが手順としては

  1. IDL ファイルを書く
  2. thrift でコンパイルする
  3. 出力ファイルを iOS プロジェクトとサーバサイドプロジェクトに組み込む
となりますがこれらは、次回以降に持ち越します。

2013/06/22

ビジネスにゲーミフィケーションを取り入れる(その1)


山田です。

みなさんはゲーミフィケーションという言葉をご存知でしょうか。
ゲームという言葉が入っている通り、ゲームの技術に深く関係があるわけですが、
一体なんなのでしょう?


実は、結構みなさんの日常生活のなかで触れる機会が多いものなんです。
例えば、私達の会社の近くに最近できたラーメン屋でもらったポイントカードは、
少し工夫がしてあります。
約10回お店に来店すると、ポイントがたまって特典がもらえるだけでなく、
ポイントカードが"ランクアップ"します。
つまり来た回数に応じてどんどんカードが進化していくので、
それが面白くてつい来店してしまうという仕組みですね。
最初は"凡人"みたいなランクだったのが、"玄人"になり"極み"になり...みたいな感じですね(笑)

また、SNSのfoursquareというチェックイン系のアプリケーションでは、
初めて行った場所でチェックインするとポイントが貰えたり、そのポイントによって
バッヂ(称号)がもらえたりします。それを友達と競ったり、共有するのが楽しいんですね。

また最近では、アメリカではオバマ大統領が選挙活動にゲーミフィケーションを取り入れたことで話題にもなりました。(※1)


簡単に言ってしまえば、「ゲームの要素を取り入れる」という一言で片付いてしまいますが、このコンセプトを正確に理解することは非常に重要です。

競争、報酬、称号といった、人間の感情や習性を利用したこの概念は、
いかに「ユーザーに何かを手に入れさせる」ということが重要になります。

近年、ビジネスにおける顧客の満足度の向上や課題の解決をゲームデザインの技術やメカニズムを活用する動きが広がりつつあります。人間の心理を利用して、
こういったゲーミフィケーションを取り入れることでサービスの向上や改善に結びつけようと、様々な動きが今生まれているんですね。

次回の記事ではゲーミフィケーションとはどう活用すればより効果的であるのか、
またこの技術を使うことで見えてくる未来についてお話したいと思います。



(※1)参考: http://gamification.jp/archives/5577

2013/06/21

続・Eclipse+Mavenのコンパイルエラー

後藤です。

前回書いたエラーについて、さらに調べてまた新しくわかったことがあるので今回はそのことについて書きます。

他のプロジェクトでは出ない

このプロジェクトで mvn clean package をしたときのみ例のエラーが出るようです。というより、このプロジェクトも確かとつぜんエラーが出るようになるまでは mvn clean package を使ってビルドを行なっていました。

色々と消えている

件のものとは他の mvn clean package を行なってもエラーが出ず動くプロジェクトで build しか行なっていないもの と、一度 mvn clean package を行ったあとに build を行ったもの の target フォルダをdiffした結果
$ diff 130614/target 130615/target
Common subdirectories: 130614/target/130614 and 130615/target/130614
Binary files 130614/target/130614.war and 130615/target/130614.war differ
Common subdirectories: 130614/target/classes and 130615/target/classes
Only in 130615/target: generated-sources
Only in 130614/target: jboss-as-dist
Only in 130614/target: m2e-wtp
Common subdirectories: 130614/target/maven-archiver and 130615/target/maven-archiver
Common subdirectories: 130614/target/surefire and 130615/target/surefire
Common subdirectories: 130614/target/test-classes and 130615/target/test-classes

件のエラーが出るプロジェクトでbuildしかおこなっていないもの と、一度mvn clean packageを行ったあとにbuildを行ったもの のtargetフォルダをdiffした結果
$ diff book/target book2/target
Only in book/target: book
Only in book/target: book.war
Common subdirectories: book/target/classes and book2/target/classes
Common subdirectories: book/target/generated-sources and book2/target/generated-sources
Only in book/target: m2e-wtp
Only in book/target: maven-archiver
Only in book/target: surefire
Only in book/target: surefire-reports
Only in book/target: test-classes

わかりにくいですが、太字がmvn clean packageをして減った部分で、下線が増えた部分です。他のエラーがなく動いているものももうひとつ同じように試してみましたが、やはり上の方のような結果になりました。
m2e-wtpは分からないのですが、通常mvn cleanをすると消えるファイルというのがmaven-archiverフォルダということになるのでしょうか。

残っているファイルを見ていてもあまり分からないので、エラーが出たbookと同じ内容のプロジェクトをもう一度はじめから作り直してみて、何が原因なのかとりあえず小さい単位でmvn clean packageを行うことで確かめてみることにしました。

・fieldを追加したBook.javaを作成
・Bookオブジェクトを操作するBookViewBean.javaを作成 
のあたりまでは普通に動いていたことを思い出しました(ただこの問題に対面したのがもう2週間前くらいなので記憶が薄れ始めています)

・arquillianでTestクラスを作成 してJUnit Testを行ったところ
org.jboss.arquillian.container.test.impl.client.deployment.ValidationException: DeploymentScenario contains a target (_DEFAULT_) not matching any defined Container in the registry.
Please include at least 1 Deployable Container on your Classpath.


というエラーが出て、色々試したもののこのエラーの原因がわからずTestクラスの利用を諦めて元に戻したところで、件のエラーが出るようになったのでした。

が、今回何もせずにTestクラスを削除しただけではエラーは出ませんでした。arquillianのことでエラーが出るので色々と設定を変更したりしたせいだったのかなと思うのですが、何をどういじったかは覚えておらず、そのときのエラーを再現することができませんでした。
arquillian、使いこなせれば便利なのかもしれませんが、英語のドキュメントばかりで難しいですね…。

この続きはまた来週、機会があれば。。


追記:targetフォルダを見ても意味ないのでは?という指摘を受けました。まずJBossだとかForgeのなんたるかを勉強する必要がありそうです。



.

2013/06/14

iOS7がついに発表されました!

山田です。
先日iOS7が発表されましたね。
主にデザインが大きく変更され、「フラットデザイン」として、
よりシンプルに奥行きのあるUIに生まれ変わりました。
賛否両論ありますが、Appleの変化の一つとして受け入れられるものだったのではないでしょうか。

一歩間違えば批判の嵐になりかねない今回の大幅な変更ですが、
これをやってのけたジョナサン・アイブはさすがです。

さて。
iOS7のリリースは秋ということで、二ヶ月ほど時間があるわけですが、
では開発者はリリースまで指をくわえて待っていればよいかと言えばそうではありません(笑)
すでにADC(AppleDepeloperCenter)では開発環境やドキュメントが整備され、公開されています。つまり我々はこの期間の間に素早く勉強して、次のOSに対応できるように準備しなければいけないわけですね。

社内ではすでに環境を整備して、英語のドキュメントを一通りダウンロードして、開発ができるように準備が整っています。こういう動きはとても大事で、なぜなら時期OSに対応できる技術をすぐにおさえるということは、他社との差別化に繋がるからです。
素早く、変化していく技術に対応していく。このITの業界ではそういった動きが大切ですし、またケイフィールドもこの考え方を大切にしています。

というわけで、もしこの記事を見ているiOS技術者の方がいたら、すぐにADCにアクセスして、何百ページもあるPDF(しかも英語)とにらめっこしながら、Xcodeと戦うことをおすすめします(笑)

2013/06/13

Eclipse+Mavenのコンパイルエラー

追記:人気の記事になっていて非常に申し訳ないのですが、まだこの原因については究明中で原因と解決策がわかっていないことを書き添えておきます。


後藤です。

今、BOOTCAMP(研修)でEclipseを利用してJavaのWEBアプリケーションを作成したりしていて、その中でよく分からない動作があり困っています。

[book] book2 $ build
[INFO] Scanning for projects...
[INFO]                                                                        
[INFO] ------------------------------------------------------------------------
[INFO] Building book 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ book ---
[WARNING] Using platform encoding (SJIS actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ book ---
[INFO] Compiling 6 source files to /Users/goto/Documents/workspace/book2/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/goto/Documents/workspace/book2/src/main/java/jp/co/kfield/sample/model/BookCriteriaBean.java:[5,16] パッケージ javax.ejb は存在しません。
[ERROR] /Users/goto/Documents/workspace/book2/src/main/java/jp/co/kfield/sample/model/BookCriteriaBean.java:[13,1] シンボルを見つけられません。
シンボル: クラス Stateful
@Stateful
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.190s
[INFO] Finished at: Thu Jun 13 16:34:25 JST 2013
[INFO] Final Memory: 9M/81M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project book: Compilation failure: Compilation failure:
[ERROR] /Users/goto/Documents/workspace/book2/src/main/java/jp/co/kfield/sample/model/BookCriteriaBean.java:[5,16] パッケージ javax.ejb は存在しません。
[ERROR] /Users/goto/Documents/workspace/book2/src/main/java/jp/co/kfield/sample/model/BookCriteriaBean.java:[13,1] シンボルを見つけられません。
[ERROR] シンボル: クラス Stateful
[ERROR] @Stateful
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
***ERROR*** Exception encountered: Build failed. (type "set VERBOSE true" to enable stack traces)

このエラーが起こる原因というのは、いつもビルドを mvn clean package で行なっていたのですが、このcleanを行うとEclipseでの実行に必要なファイル?も削除してしまうからのようです。これをした以降に build を使っても、同じエラーが出ました。
解決策というか予防策は今のところ、mvn clean package は使わずに build を使うようにするということしか分かっていません。

最近までずっと mvn の方を使っていたのですが、何がいけなくてそうなるようになったのか(もしくは今回のプロジェクトだけなのか?)まだ分かっていません。

一応、英語のサイトなども色々見てみました。Maven・Eclipseの組み合わせはバグが大量にある、というような投稿がある…と思うものの、そもそもそれが本当なのか調べてみても そういった情報は見つからず…。

引き続き調べてみたいと思います。


>続く

2013/06/09

SyntaxHighlighter 3.0.83 を使ってみる(後編)

今井 です
SyntaxHighlighter 3.0.83 を使ってみる(前編) の続きです。


前回はグダグダな感じで終わってしまった SyntaxHighlighter 3.0.83 の導入ですが、結局「動的ビュー」の制限でうまくいっていないという結論に至りました。
対策としては、いつ仕様が変わるかわからない「動的ビュー」の制限を回避する道を探るより、制限のない普通のテンプレートを選ぶことにしました。


前回は、上手く行かなかったのでテンプレートのHTMLをカスタマイズするという一番確実に実現できそうな方法を選びましたが、普通のテンプレートにしたためガジェットで出来そうな気がします。
ガジェットで対応しておけばテンプレートを変えるたびに設定し直すこともないからこちらがオススメです。

で、とりあえず ホスティング版 を使って SyntaxHightlighter を使うよう、
レイアウト→ガジェットを追加→HTML/JavaScript
に次のようなコードを書いてフッターに配置してみました

<!-- SyntaxHighlighter -->
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js" type="text/javascript"></script>

<script type="text/javascript"><!--
  function loadCss(aUrl) {
    var head  = document.getElementsByTagName('head')[0]
    var fileref =document.createElement('link')
    fileref.setAttribute('rel', 'stylesheet')
    fileref.setAttribute('type', 'text/css')
    fileref.setAttribute('href', aUrl)
    fileref.setAttribute('media', 'all')
    head.appendChild(fileref)
  }

loadCss('http://alexgorbatchev.com/pub/sh/current/styles/shCore.css');
loadCss('http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css');

SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.autoloader(
     'as3 actionscript3         http://alexgorbatchev.com/pub/sh/current/scripts/shBrushAS3.js'
    ,'bash shell                http://alexgorbatchev.com/pub/sh/current/scripts/shBrushBash.js'
    ,'cf coldfusion             http://alexgorbatchev.com/pub/sh/current/scripts/shBrushColdFusion.js'
    ,'c# c-sharp csharp         http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js'
    ,'cpp c                     http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js'
    ,'css                       http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js'
    ,'delphi pas pascal         http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDelphi.js'
    ,'diff patch                http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js'
    ,'erl erlang                http://alexgorbatchev.com/pub/sh/current/scripts/shBrushErlang.js'
    ,'groovy                    http://alexgorbatchev.com/pub/sh/current/scripts/shBrushGroovy.js'
    ,'js jscript javascript     http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js'
    ,'java                      http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js'
    ,'jfx javafx                http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJavaFX.js'
    ,'perl pl                   http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js'
    ,'php                       http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js'
    ,'plain text                http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js'
    ,'ps powershell             http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPowerShell.js'
    ,'py python                 http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js'
    ,'rails ror ruby            http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js'
    ,'scala                     http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js'
    ,'sql                       http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js'
    ,'vb vbnet                  http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js'
//    ,'xml xhtml xslt html xhtml http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js'
);
SyntaxHighlighter.all();
--></script>

結果は良好、autoloader が必要な JavaScript だけを読み込んで綺麗に表示してくれます。
うまくいったので、参照ファイルを Google Site 上に置いたファイルに置き換えて本ブログに導入しました。


Blogger 上での使い方は「作成」モードでソースコードを貼り付けてから「HTML」モードで貼りつけたコードを次のタグで囲います。ソースコードは有効なHTMLになるようにエスケープする必要がありますが、「作成」モードで貼り付ければエディタ側でエスケープをしてくれます。(使えるブラシは SyntaxHighlighter Bundled Brushes を参照)

<pre class="brush:html">
ソースコード
</pre>

<script>タグを使った方法は ]]> が含まれるソースコード以外はエスケープなしで貼り付けることが出来るメリットが有るはずだったのですが、「作成」画面には表示されないし、フィードにも表示されないし、Blogger のエディタには script タグの対応が正しくないって怒られて勝手にエスケープされるし、使い勝手が悪い。
]]> が絶対に登場しないと言い切れないですし、こちらの方法は使わないことにしました。


ということで無事、導入出来ましたので今後、サンプルコードを書く時は使って行きたいと思います。

2013/06/07

AWS Summit Tokyo 2013に参加しました

後藤です。

先日AWS Summit Tokyo 2013が開催され、ケイフィールドからは新入社員である私が参加してきました。参加したのは6月6日の1日のみですが、それだけでもたくさん学ぶことがありました。

AWSのサービス内容や利点などは4月の入社からずっと勉強しているのでかなり理解できてきました。しかし、各サービスの連携方法や詳しい利用方法などがまだほとんど分からないので、色々な構築例などを見ても 漠然としか解らずにおり、悔しいです。
NYCとは違いセッションは全て日本語だったので講演者の方の話す内容が分かり、課題も見えました。AWSには大きな可能性があるので、色々試行錯誤しながらこれからも学んでいきたいと思います。

最近、JAWS-UG名古屋の勉強会で教えて頂いてEC2の利用法を学んだり、K's BOOTCAMP(ケイフィールドの新人研修)でParallelsの仮想マシンを動かしたりすることで、ようやく Linuxサーバの仕組みも理解できてきて とても楽しいです。viはこれまで好きではなかったのですが、だんだん何だか良くなってきました。もっと精進したいです。

以下、参加の感想です。

セッションは、特にバンダイナムコゲームスさんのものが印象に残っています。
バンナムさんには数百台というプライベートクラウドの設備があり、原則そちらを使うようにしているとのことですが、そのうえでAWSも適材適所で利用しているそうです。どういった機能にどういった利点がありバンナムさんではどういうときに利用していて、実際に開発を行う上でどこが良くてどこにハマったか…などを詳細に話していらっしゃったので、私にもイメージしやすかったです。講師の皆さんのお話も面白かったです。
SESはメールのサービスですが、これをユーザへのメール配信に利用した際に、配信先のメールアドレスがドメイン拒否をしていた場合、自動でそのアドレスをブラックリストに入れるそうです。それは良いのですが、ユーザが拒否をやめて もう一度メールを受信したいというときにも自動でブラックリストから解除されることがなく、一々手動で解除をしないといけないそうです。ユーザ数が非常に多いサービスでそんな対応を手動で行うのは…。 バンナムさんでは、対策方法が見つからずSESを使わなくなった、という話でした。 どういう状況なのかとても想像しやすい説明だったので、一番記憶に残っています。

また、パネルディスカッションに参加されていたコイニーさんのことも、印象的でした。ディスカッションのテーマとは直接関係ないのですが、AWS Summitのセッションに参加されて展示やそのようなディスカッションのパネリストを行なうような会社が、設立して1年強、人数も弊社と変わらな…くはないですが小企業と言っていい人数だったということに驚きました。
今まで弊社よりも人数の少ない会社の方に出会ったことがない(と思っていた)のですが、UGの懇親会の際に話を聞いていて、人数的にそう変わらない会社や、弊社よりも少ない会社も別に珍しくないんだな、と知りました。負けないように私も技術力などを磨かなくては。。

セッションの全体的な空気が冷たく(笑いがほとんど起きなかった…)日本のAWSに興味を持つ方はそういう雰囲気なのかと感じていたので、最後のJAWS-UGの勉強会の盛り上がりぶりにはとても驚きました。そして、楽しかったです。東京のUGの集まりに参加するのは今回が初めてですが、セッションで講師をしていらっしゃった方たちまで すすんで話しかけて下さる気さくな方ばかりで、色々な話を聞き、色々な方と知り合い、そこでもとても勉強になりました。特にNYCでお世話になった方たちにはここでもお世話になってしまいました。いつかは私もどのサービスをどう使うのが好きだとか語り合えるAWSユーザになりたいものです。
Tokyoで初めて知り合った方たちも、NYCに参加した話をすると興味を持って下さる方が多かったです。参加はできなかったものの、NYCに行きたかったという方はすごく沢山いるんですね。NYC参加者の方にも同じことを思いましたが、AWSユーザの方は積極的で前衛的な方が多い気がします。とても刺激を受けました。

そして、NYCもTokyoもですが、都合がつかずに参加できなかった 私よりもすごい技術者の方がたくさんいる中で、NYCに連れて行っていただけて、Tokyoへの参加を許してもらえる ケイフィールドという環境はとても恵まれていると改めて感じました。ケイフィールドだけでなく、知り合う方は わからないことだらけの私に優しく教えて下さる方ばかりで、やっぱり恵まれていると思います。
与えられたものをしっかり吸収し、プロフェッショナルと言える人間になれるよう 自らすすんで精進を続けたい、 とまた思った一日でした。

内容が技術ブログではないですが、以上で終わります。


/* 特に印象に残っているところをかいつまんだため朝のミーティングで話したことがほとんどになっていますが、社内向けには改めて発表をするということですのでご了承ください。 */

SyntaxHighlighter 3.0.83 を使ってみる(前編)

今井 です

Google Apps を使い始め、ブログをBlogger上に書き始めたわけですが、ケイフィールドはソフトウェア開発会社なので、ブログ内にソースコードを書くこともあります。

ソースコードを書く時、今まで私は
<blockquote><pre><code>
ソースコード
</code></pre></blockquote>
のように書いていましたが、今使っている Blogger のテーマでは枠などもなくイマイチ。
そこで SyntaxHighlighter を使ってみる事にしました。


SyntaxHighlighter を組み込むには JavaScript や CSS ファイルをサーバに置きたいところですが、Bloggerには画像、動画以外のファイルアップロードが出来ないのでそのまま組み込むことができません。

寄付もしないでホスティング版を使うのも気が引けるのでファイルは Google Site 上に置くことにしました。


ファイル置き場は決まったので次は組込です。テンプレートをカスタマイズするのは好きじゃないけどHTMLのヘッダ部分に次のようなコードを加えます。

<link type='text/css' rel='stylesheet' href='http://***************/syntaxhighlighter/shCore.css'/>
<link type='text/css' rel='stylesheet' href='http://***************/syntaxhighlighter/shThemeDefault.css'/>
<script type='text/javascript' src='http://***************/syntaxhighlighter/shCore.js'/>
<script type='text/javascript' src='http://***************/syntaxhighlighter/shBrushXml.js'/>
<script type='text/javascript'>
SyntaxHighlighter.bloggerMode = true;
SyntaxHighlighter.all();
</script>

後はブログを書く時にソースコードを
<pre class='brush:html'>
</pre>



<script type='syntaxhighlighter' class='brush:html'><![CDATA[
]]></script>

で囲えばOK。
のはずなのですが、ダメですね。

<pre class='brush:html'>
</pre>

で囲った方はそのまま表示されるし、

<script type='syntaxhighlighter' class='brush:html'><![CDATA[
]]></script>

で囲った方は表示されない。

試しに個人で使ってるBloggerに同じように組み込んでみたらちゃんと出来たので今使ってるテンプレートと併せて使うには問題があるのかもしれません。



もう少し試してみますが、それは後編で…

2013/6/9 タイトルにSyntaxHighlighterのバージョン番号を追加しました

2013/06/03

iOSでバッヂ表示を行う

山田です。
iOSでプッシュ通知の取得を行うと、適切なタブにバッヂを更新したいといった要望も出てくると思います。 今回はそのやり方の一部を記述しておきます。
// バッヂの更新プログラム
UINavigationController *navi = (UINavigationController *)[[[[UIApplication sharedApplication] delegate] window] rootViewController];  //各プロジェクトの作りに合わせてください
UITabBarController *tab = [[navi viewControllers] objectAtIndex:0];
UIViewController *vc;
if (  [バッヂを表示するための判定式] ) {
    for ( vc in [tab viewControllers] ) {
        //! 表示したいタブのtagを指定する     
         if ( [[vc tabBarItem] tag] == 1) {
            //! バッヂを更新     
             [[vc tabBarItem] setBadgeValue:@"★"];
            }
        }
        else {
            //! バッヂを非表示にする  
             [[vc tabBarItem] setBadgeValue:nil];
        }
    }
}
以上です。