『中日・日中辞典【第3版】1.0.3』をリリースしました


iOSアプリ『中日・日中辞典【第3版】1.0.3』をリリースしました。お使いの方は、アップデートをお願いします。

キーボードアクセサリによるピンインの声調の入力を、音節区分に変更しました

中日・日中辞典では、キーボード上部のキーボードアクセサリと呼ばれる領域で、ピンイン入力を補助するために声調を指定できるようになっています。1声(ā)とか2声(á)とかいうあれです。この声調の入力を、音節ごとに指定するよう変更しました。

たとえば、キーボードから「xi」と入力すると、次のように「xī」「xí」「xǐ」「xì」が指定できます。

または、キーボードから「pao」と入力すれば、「pāo」「páo」「pǎo」「pào」を指定できます。中国語の発音規則に従い、3文字目の「o」ではなく、2文字目の「a」に声調がつくようにしています。

旧来の数字で入力するスタイルとは異なり、声調をより自然な形で指定できるようになっています。

ピンイン入力の際に、数字による声調の入力に対応しました

旧来の数字入力による声調の入力にも対応しました。キーボードから「xi1」や「pao3」と入力することで、検索ができます。

安定性を向上させました

検索中に、突然アプリが終了する問題がありましたので、これを修正しました。

中日・日中辞典では、語句の検索/結果の表示を、ユーザの方にストレスを与えずに行うため、高度に処理を並列化しています。複数の処理を並列に走らせるには、スレッドプログラミングと呼ばれる技術に対応させる必要があります。

中日・日中辞典では、いくつかのオープンソースソフトウェアを利用しているのですが、その中に今回の使い方ではスレッドプログラミングに対応していないものがあります。具体的には、グローバル変数と呼ばれるどこからでもアクセスできる変数領域があり、これに複数スレッドから明確な制御なしにアクセスするため、問題が発生していました。開発の段階で、この問題に対応してスレッド化を行ったのですが、まだ抜けがあったことが分かりました。その修正を含めました。

『中日・日中辞典【第3版】』リリースおよび不具合に関しまして


『中日・日中辞典【第3版】』バージョン1.0をリリースしました。最新のユーザインタフェースと辞書データを備えた、次世代の中国語辞書です。

現在、バージョン1.0で、アプリ内課金の購入結果が、次回起動時に反映されないことがある不具合が確認されています。回避策として、購入画面で「購入履歴の復元」を選択してください。仮に、再度購入を選択してしまっても、二重課金が行われることはありません。

この不具合の修正を行なった、バージョン1.0.1を申請中です。ご迷惑をおかけしますが、いましばらくお待ちください。

iOSアプリ「中日・日中辞典【第3版】」もうすぐリリース!


HMDTで開発/配信しているiOSアプリ「中日・日中辞典」を、もうすぐ大幅アップデートします! リリース日は、8/22の予定。

アップデートの内容をざっくり紹介すると、最新辞書データである「第3版」に対応したのと、ユーザインタフェースがまったく新しい見た目に生まれ変わりました。

辞書データは小学館さんから提供してもらっており、収録語数が大幅に増えた第3版のデータが到着しましたので、それを組み込みました。中日辞典は収録語数10万語! 日中辞典は収録語数95,000語! 小学館さんと北京の商務印書館さんとの共同編集で、高信頼です。

ユーザインタフェースについては、正直なところ、いままでのが古すぎたんですね。本に似せたデザインで、とてもよく作り込んで好きだったんだけど、iOS 7以降のデザイントレンドから取り残されちゃってました。

さらに、iOSがアップデートするにしたがってiPadが本格的にマルチタスク対応していく中、柔軟性に欠けたものになっちゃってました。そんな問題を払拭する、大幅アップデートです。

このリリースにあわせて、Webページもリニューアルしました。詳しい説明は、そちらも見てください。Webページのデザインは、トラムさんにお願いしました。うちの事務所の近くにあるサイト制作会社さんです。

一週間後のリリースなので、よろしくお願いします。あ、もちろん、既存ユーザの方は無償でアップデートできますよ。

スタッフ募集で面接をたくさんしたこと


募集していたスタッフですが、どうにか決まりました。バイトとしての待遇だったので、マイナビバイトに広告出してみました。マイナビさんを使うのは初めてだったので、どうなるか心配だったんですけど、多くの方に興味を持ってもらって、最終的に20人弱の方に面接に来ていただきました。その中から、今回は2人を採用しました。イキのいいのが来ましたよ。よーし、イジメてやるぜ、まずはXcodeとSwiftの使い方をマンツーマンで叩き込むぞ、フハハハハ。

いろんな人が来ましたけど、やっぱり学生の方が多かったです。工学系の人もいたし、そうじゃない人も。みんな、IT業界に興味があるので経験してみたい、と言ってくれました。40代のおっさんとしては、そういう若い衆が増えてくれると嬉しいぞ。

募集は未経験歓迎でしたので、面接では「何ができるか」だけではなくて、「何をやりたいか」の話を聞きました。その上で、やりたいものをどうすれば実現できるのか、を説明できたらポイント高いです。具体的であれば具体的であるほどいい。できなくてもいいんですよ。学生レベルでの「できる」はそんなアテにしないし。どうすればできるのか、の道筋を明確に描けるかどうかです。

たとえば、いまどきであればAIに興味がある場合。

「AIに興味があります。」
「AIで何やりたいの?」
「、、、流行っているから?」
「ふーん、そうかぁ、ありがとう」

話、終わっちゃうよ!

「AIに興味があります。」
「AIで何やりたいの?」
「シンギュラリティが訪れて、AIに仕事が奪われる時代を迎える中、私たちはどういう職業を選択すべきか、、、」
「ふーん、もういいよ、ありがとう」

エンジニアリングじゃなくて、ネットメディアに行った方がいいね!

「AIに興味があります。」
「AIで何やりたいの?」
「いまの研究室がAIをやるみたいで。」
「どういう研究するの?」
「TensorFlow。」
「TensorFlowを使って何をやりたいの?」
「、、、カワイイ画像を見分ける?」
「ほぅ、それは面白いね、じゃあカワイイの定義は? キュートや綺麗とは違うの? カワイイ画像が見つかったらどうするの?」

具体的に、もっと具体的に!

「AIに興味があります。」
「AIで何やりたいの?」
「落し物を探します。」
「どうやって探すの?」
「探す対象の画像をテンプレートとして与えて、マッチングさせます。ここで学習を使います。」
「マッチさせる画像はどうやって作るの?」
「カメラで動画を撮影して、静止画を間引きます」
「カメラはどこにあるの?」
「ルンバの上にRaspberry Piを載せて、部屋中を走り回らせて、ホストコンピュータにWiFiで送信します。」
「そういうことね!」

ということで、やりたいことがあって、またはやるべき課題が与えられたとき、それを具体的な目標に落とし込み、実装するための手順をブレークダウンして描けるか、という能力がとても大切なのです。実際にできなくてもいいんです。こうすればできる(はず)というのを、人に説明できるように考えておく、ということが大事なのです。

そんなやりたいことを、熱く語ってくれた2人を採用しました。彼らはいくつかトライもしてたのですが、うまく動かなかったようです。それをちゃんと動かすとこまで持っていくのが、プロの仕事です。見せつけてやるぜ、プロの力。

スタッフの募集


HMDTでは、スタッフを募集します。今回は、主にDropTalkの開発を手伝ってくれる方、そしてDropTalkで使うキャンバスやシンボルを作ってくれる方です。

開発手伝いの方は、プログラミング仕事です。iOS、macOS、tvOS、Android、Windows (UWP)向けにプログラミングします。使う言語は、Swift、Java、C#です。

キャンバスやシンボル作成は、DropTalkで使うものを作っていただきます。デザインやイラストのスキルがあるといいです。障害児教育に興味のある方は、大歓迎です。

詳しくは、DropTalkのWebページを参照してください。

7/31 追記:募集は終了しました。

10周年のご挨拶


HMDTは、この4月2日で設立10周年を迎えました。よく10年もつ会社は6%程度とかいいますが、どうにか生き残ることはできました。

会社作ったのは10年前ですが、その前に個人事業主として独立しました。それが12年前かな。とにかくMacでプログラムを書く仕事がしたくて、それには独立しかなかったですよ、当時は。その2年後にiPhoneが登場してAppleを取り巻く状況がガラリと変わり、それからは怒涛の10年間でした。

IT系で独立した企業だと、ベンチャーとか、スタートアップとかと言われることがありますが、自分の10年間の軌跡を見ると、それらとは違うかなと思います。なんていうのがしっくりくるのかな。IT系零細企業かな?

まじめに考えると、エンジニアである私が、エンジニアとして生きていくために作った会社、でしょうか。最初に入った会社は大企業だったんで、エンジニアとしての能力、特にソフトウェアエンジニアとしての能力があまり要求されなかったですね。結構、欲求不満でした。自分で書きたいコードを書くには独立するしかないぜ、と思い込んで、29歳で辞めました。

独立してからは、必然的に経営や管理という仕事が発生してきます。そのあたりの知識や経験はまったくなかったので、体当たりで覚えていきました。でも自分がコードを書きたくて独立したので、どうしても経営にさく時間や熱量は低くなりがちでした。その辺り、うまく管理できなかったり、十分な給料が出せなかったりで、いままで働いてもらった人たちには不満があったと思います。振り返ると苦い思い出です。

そんな10年間の反省をふまえて、いま自分の気持ちを見直してみると、いちばんに出てくる思いは、やはりエンジニアとして生きたいな、ということです。コードを書くのが好きなんです。コードさえ書いていれば幸せなんです。じゃあ、どっかに就職すればいいんじゃないか、というとそうでもないことも分かってきました。

コードを書いていれば、もっとより良いコード、より良い設計、より良いインタフェースが浮かんできます。でもそれには、クラス構造を変えないといけないし、仕様を変更しないといけないし、ということはスケジュールも変えないといけないです。つまり、エンジニアリングサイドの要望に対してmake decisionを行う権限、つまり決定権が必要です。自由にコードを書くには、それを許容して責任を取れる権限が必要なんです。

そりゃこんなこと考えていれば、就職なんてできなくて独立してやるしかないですね。

というわけで、今日もたくさんコード書いています。コード書きと経営の比率は、8対2くらいでしょうか。1日に12時間コード書いて、ちょろっと経営の仕事するって感じです。

管理もどうにかできるようになってきました。重視しているのは、チームは少人数でいいことと、ゴールを共有することです。いま書いているアプリは、どういうものを目指しているのか。ユーザにどの機能を楽しんで使ってもらいたいのか。できあがったらどんな格好良い画面ができるのか。そんなことをこまめに話し合うようにしています。そうすると、書いているコードの方向性が揃ってくるんですよね。

ひとりのエンジニアとしても、成長できているかなと感じています。当方42歳ですが、ここだけの話ですが、コード書くのが上手くなってきました。一年前の自分より、半年前の自分より、ぜったい上手くなってるという実感があります。自分のコードを読み返して、うわダッサ、いまのおれの方が確実にうまいぜ、とブツブツ言いながら書き直してます。楽しいです。

そんなわけで、エンジニアとして楽しくコードを書くためにがんばってきた10年間でした。次の10年間もコードを書きますよ。あと、チームをもう少しだけ大きくしたいかな。

ちなみに弊社で開発したアプリ、『中日・日中辞典』と『大辞泉』が、4/8まで新生活応援キャンペーンで値下げセール中です。新生活で辞書が必要な方、ぜひこの機会にお求めください。

では、次の10年生き残ることを祈りながら、よろしくお願いします。

DropTalkのApple Pay対応の話:審査編


先日の投稿に書いたように、DropTalkをApple Payに対応させました。その時の流れを書いておきますね。

そもそも対応させようと思い立ったのは、去年の10月25日、Apple Payが日本でスタートした日。ご多分にもれず、私もそそくさと手持ちのiPhone 7にSUICAを登録しまして、これでオサイフケータイみたいなことができるぜ、へっへー、と早速コンビニでお昼ご飯を買ったりしてました。それを食べながらiPhoneで関連ニュースを眺めていると、なにやらApple Payをアプリに組み込むことができるらしいと。このときに初めて認識しました。ふーん、でもうちの会社には関係ないかなー、と一瞬思ったけど、そういやTシャツ売ってたや! これをネタに、Apple Pay対応しよう!

早速事務所に戻って社員の人と話して、ひとしきり盛り上がりました。よし、じゃ対応することで決定ね。とりあえず契約周りは私がやるから、実装の方はよろしく〜。ま、そんなに手間かからないでしょ。。。と、この時点では思ってたのですが、実際はストア画面(商品紹介、カートなど)を新規に作らないといけないので、結構な時間がかかりました。

契約の方は、決済サービスプロバイダーとしてPAY.JPを選択して、手続き開始。開発者登録はすんなりできて、どうやら本番申請というものをやらないといけないらしい。うーむ、よく分からんけど実装が終わってから申請するか、と考えてそのまま保留。今から考えると、この本番申請を早めにやっておけばよかったんだと思う。

で、実装が終わったのが11/11。よーし、本番申請するぞ! どうやら申請の手順は、

  1. VISA、MasterCardの審査
  2. 追加のカード会社(JCB、American Express、Diners Club、Discover)の審査
  3. Apple Payの審査

という流れになるらしい。なんでクレジットカード会社の審査が2つに分かれているのかは不明。Apple Payの審査が、その後になっている理由も不明。そもそも、審査で何を審査しているのかもよく分からない。こちらから提供する情報は会社の基本情報くらいで、アプリの提出とかそういったものはなし。

審査申請した後は、特にやることなしで待つだけ。11/21に、VISAとMasterCardの審査を通過したと連絡あり。続いて12/5に、残りのカード会社の審査を通過。そして12/21に、待ちわびたApple Pay審査通過のお知らせが! 申請してから一ヶ月と10日でした。

よーし、早速アプリ公開するぜ! と、思ったものの、12/23からiTunes Connectはクリスマス休暇で審査停止。さらに12/28からは弊社冬休みで業務休止。トラブった時のことを考えると、これは年明けの審査提出かねぇ、ということで少し待機しました。明けて翌年、無事アプリの審査通過して、1/5に公開できました。

ほんとはApple Payブームに沸いている最中に公開できればよかったけど、様々な審査が必要だったので、まぁ、こんなものでしょうか。審査自体は、こちらに何の連絡もなくて、何をやっているのか本当に不明。でも無事通過したので、簡単に固定料金なしでクレジットカード決済をやりたい会社さんにはオススメです。

DropTalkをApple Payに対応


iOS版DropTalkの新しいバージョンを公開しました。バージョン番号は3.1.4。マイナーバージョンアップに見せかけて、大きい機能追加があります。Apple Payに対応しました。

指先一つで決済できるApple Payは、SUICAとして電車に乗れるだけでなく、アプリに組み込むこともできます。これで、アプリ内部で様々な物販が行えるんですね。

いや、ちょっと待て。アプリの決済の仕組みって、In App Purchaseもあるよね? どう違う? これはAppleによれば、アプリ内で使うゲームのアイテムみたいなものや、機能制限の解除などは、In App Purchaseを使え。それに対して、物理的な何かを販売するときはApple Payを使え。と、いう住み分けだそうです。

DropTalkでは、今までWebサイトの方で、製本したマニュアルや、Tシャツなんかを販売していたんです。これらをApple Payで買えるようにしました。

新しく追加した、「ストア」タブから買えますよ。リンゴマークの「Pay」ボタンが眩しい。

アプリに組み込む場合は、Apple Payプログラミングに加えて、決済業者さんと契約をする必要があります。いくつかあるんですが、今回はPAY.JPさんにお願いしました。理由は、固定料金がかからないことと、ダッシュボート画面が綺麗だったから。開通までに時間はかかりましたが、特に大きなトラブルもなく開始できました。

Apple Payアプリだと、ネットでの買い物の手間が劇的に減りますね。確かにこれは革命的かもしれない。これで売り上げが少しでも伸びてくれるといいんだけど。

2017年仕事始め


あけましておめでとうございます。

2017年の仕事始めをやっております。去年は、DropTalkに始まりDropTalkに終わりましたが、今年もそんな感じの年になりそうです。

現在DropTalkはベラボーに対応プラットフォームを増やしていまして、リリース済みのiOSとAndroidに加えて、Windows 10、macOS、tvOSを開発中です。プログラム言語も、朝はSwift、昼はJava、夜はC#というように切り替えながら使っています。マルチリンガルな気分です。

なかなかこちらのブログの更新時間がとれないですが、弊社スタッフ三人でやいのやいのと楽しくやっております。では、今年もよろしくお願いします。

DropTalk 3をリリースしたので、プログラマ的に自慢してみる


HMDTでコツコツと開発を続けているVOCAアプリ、DropTalkの最新版であるDropTalk 3が公開されました! 今日のところはまずはDropTalkをリリース。DropTalk HDとDropTalk HD Freeはもう少しお待ちください。現在審査中です。DropTalk 3の詳しい情報は、こちらのDropTalkのページを参照してください。

DropTalk 3は、前のバージョンから大幅な機能アップをしました。すんごい大幅なんです。もちろんユーザにとって便利な機能を実装していったわけなんですが、結果的にプログラマとして大きいチャレンジになるものがいくつかあって、それらをガシガシと実現していきました。これが楽しかったんですよ。

ということで! HMDTのサイトでは、DropTalk 3におけるプログラマ的に注目してほしいポイントを紹介していきます。単なる自慢ですね、これは。

Finderライクなファイル管理

DropTalkではキャンバスと呼ばれるファイルを作るんですが、以前のバージョンではフラットにしか管理できなかったんです。当然、キャンバスの数が多くなると管理が困難になります。ユーザの方に聞くと、数十とか100とか平気で作ってしまうらしいんですよ。これはもう、フォルダを導入して階層管理にするしかないでしょう。

iOSでフォルダを利用した階層管理を実現しようとすると、問題になるのがユーザインタフェースです。UITableViewでチマチマやるのも格好悪いし。よーし、これを作ったれ! ということで、気合を入れてファイル管理ユーザインタフェースを作りました。

基本的な操作はドラッグアンドドロップです。ドラッグして、項目の並び替え、フォルダに入れる、といった操作ができます。上の階層に戻すときは、ナビゲーションバーにドラッグするようにしました。あと、メニューを使って、カット/コピー/ペーストもできるようにしました。Finderですな、こりゃ。

 

UICollectionViewの編集

UICollectionViewが大好きです。最近は、ほとんどのアプリのユーザインタフェースは、これで組んじゃいます。でも、使い込んでいくうちに欲しくなるのは、編集機能。UITableViewみたいに、行や列の追加や削除ができたり、並べ替えができたらいいのになー、と思ってました。

ないものは作ってしまえー、ということで作りました。UICollectionViewに編集モードを追加して、行や列を自在に編集しています。

これは特に難しいことをしているわけではなくて、ほぼ用意されているメソッドだけで作りました。insertItemsIndexPaths:とdeleteItemsAtIndexPaths:を駆使しています。難しくはないけど、泣きそうになるほどめんどくさかったです。

SVGレンダラの作成

DropTalkは、可愛らしいシンボルが魅力です。これはできるだけ綺麗に描きたいところ。が、年を追うごとにiPadの画面がどんどんでかくなってきて、リソースとして保持しているPNGファイルじゃ解像度が足りなくなってきました。iPad Proの画面サイズなんてどうすりゃいいのよ。もっと大きいPNGファイル作る? それだとアプリサイズがどんどんでかくなってしまいます。

これを解決するには、ベクタファイルに対応するしかないね! ということで、シンボル画像をSVGファイルに変換して、それを表示するためにSVGレンダリングエンジンを作りました。これなら、どれだけ画面が大きくなっても大丈夫です。iPad Proでもこの美しさです!

svg_renderer

 

 

こんな感じで、プログラマ的に面白いことを色々とやってみました。やりたいと思ったことに、チャレンジできる時間と技術の余裕があったのが嬉しかったですね。