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


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

語釈表示画面に、ツールバーを追加しました

語釈表示画面では、画面上部のナビゲーションバーにあるアクションボタンから、各種操作が行えました。これに加えて、画面下部にツールバーを追加しました。ツールバーからワンアクションで、お気に入りやブックマークの追加ができます。

ブックマークの追加時に、ブックマーク情報画面を表示するようにしました

ブックマークに項目を追加する場合、今まではブックマークのルートフォルダに追加した後、ブックマーク画面で情報画面を開き、適時必要なフォルダに移動していました。

これを、ブックマークを追加するときに、情報画面を開いてその場でフォルダ移動を行えるよう変更しました。

追加時に情報画面を開くというアクションを起こしたくないときは、お気に入りに追加を使ってください。

ブックマーク情報画面に、見出し語が表示されないことのある問題を修正しました

ブックマーク情報画面において、表示領域の高さがわずかに足りないため、見出し語が表示されない問題がありましたので、これを修正しました。

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


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

表示するフォントサイズが大きい時、付録でコラム一覧が表示されない問題を修正しました

付録画面では、コラムの一覧を確認することができます。このとき、画面に表示するフォントサイズを大きめに設定しているとき、コラムのタイトルが表示されない問題がありました。これは、タイトルの表示領域が、フォントサイズの大きさを変更してもそれにあわせて広がらないことが原因でした。

タイトル表示領域を、フォントサイズにあわせて拡大することで、修正しました。

語釈中の「動作動詞」など、コラムへのリンクをタップしてもコラムに遷移しない問題を修正しました

語釈の文中に、関連するコラムへのリンクが埋め込まれている項目があります。このとき、リンクをタップしてもコラムの項目へと移動しませんでした。これは、コラムを表すリンクのアドレスを、適切に処理していなかったことが原因でした。

これを適切に解釈することで、修正しました。

『中日・日中辞典 3.1.2』をリリースしました


『中日・日中辞典 3.1.2』をリリースしました。新アプリではなく、旧版の方です。お使いの方は、アップデートをお願いします。

検索結果に語釈の一部を表示するオプションを追加しました

新アプリを使った方から、旧版でも検索結果と語釈の同時表示機能が欲しい、という要望がありましたので、対応しました。設定画面のオプションをオンにすると、語釈の一部が表示されるようになります。

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


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

安定性を向上しました

中日・日中辞典では、検索と表示の際にユーザ操作の妨げにならないように、多くのスレッドを並列に動作させています。スレッド間で排他処理を行うために、いくつかの箇所でバッファを用意しているのですが、その一部でスレッド情報の取り扱いに不具合がありました。その結果、見出し検索と用例検索を、30回程度切り替えながら検索すると、クラッシュするという問題が発生していました。これを修正しました。

「検索結果に語釈を同時に表示」をオフにしているとき、ブックマーク画面の表示が乱れる問題を修正しました

「検索結果に語釈を同時に表示」の設定をオフにしているとき、ブックマーク画面に見出し語が表示されない問題がありました。これを修正しました。

語釈の詳細表示画面で、ナビゲーションバーにタイトルが表示されないことがある問題を修正しました

詳細表示画面のタイトルが適切に表示されるように修正しました。

iOSアプリをWindowsに移植してみた


何度もここに書いてるけど、HMDTはDropTalkっていうアプリにかなり力を入れてやっています。もう、7年目になるのかな。最初はiPhone向けに開発して、iPadに移植してプチブレイクした。去年はAndroidにも移植したけど、これはぜんぜんダウンロード数伸びなかったねー。iPadの1/10以下で、誤差の範囲内でした。

で、今年はWindowsに移植しました。ずっと要望は多かったんですよ。ようやく出せました、という感じです。先週あたりからMicrosoftストアにも登場しています。ダウンロード数伸びてくれるといいんだけど。

今回、初めてiOSアプリをWindowsに移植してみたんで、そのときの技術的な話を書いてみたいです。

マシンと開発環境の整備

Windowsへの移植を始めたのは、ちょうど一年前くらいかな。2016年の12月あたりからです。まずヨドバシカメラにWindowsマシンを買いに行くことから始めました。個人で使うWindowsマシンを買うのは、初めての体験だった。キャーキャー言いながら悩んで、ASUSのノートPCに決めました。安かったから。15万くらいだったかな。一緒に行った社員の人は、Surface選んでました。

入っていたOSは、Windows 10。この年はWindows 10への無料アップグレードが終わるとかで、その告知が執拗に出てくることがニュースになってたので、噂では知ってたけど、触るのは初めてでした。これが10か、と感動することしきり。そういや、その前に触ったWindowsはなんだっけ? と、思い出してみたら、Vistaでした。Vista以来のWindowsになります。

続いて開発環境を整えます。IDEは、Visual Studioで決まり。フレームワークは何使えばいいのかな、と検索してみたら、なんかいっぱいあるのね。Win32とか、Windows Formとか、WFPとか、UWPとか。どれがどれで、何が何よ?! 調べれば調べるほどわからなくなるので、こっちの条件を羅列してみました。

  • 新規に作る(レガシーコードはない)
  • いわゆるネイティブアプリにする
  • ストアで配布したい
  • タブレットPCで動かしたい(タッチ必須)

以上の条件から絞り込むと、どうやらUWPになるらしいです。この中ではいちばんモダンになるのかな。Windows 10より前では動かないみたいだけど、うーん、まぁいいやということで決めました。ほんとは、DropTalkのターゲットは教育市場なので、Windows 10への移行はものすごく遅れているのでちょっと厳しいです。でも、これから5年とか10年とかサポートし続けていくものなので、中途半端なレガシーは切り捨てることにしました。

ちなみに、Xamarinは最初から選択肢に入ってませんでした。クロスプラットフォームは幻想だと確信してるので。

プログラミング言語

プログラミング言語は、C#にしました。ずっとC言語由来の言語ばっかり触っているので、C#も30分程度勉強したら書き始めることできました。印象としては、モダンさの度合いとしては、Objective-C以上Swift以下ってとこですか。ラムダ式とかLINQとか使い出したら楽しくなってきた。でも余計な記述が多くなって、言語全体が古臭くなって来ている感は否めないですね。そろそろ、後継言語が欲しいです。SwiftやKotlinレベルのものを。C##とかいう名前になるのか。それか、KotlinをUWPに対応させた方が速いのかも。

UWP

GUIフレームワークとしてのUWPは、最初はとにかくXAMLにとまどいました。ユーザインタフェースは、XMLベースのXAMLっていうフォーマットで記述します。Visual Studioに付属するビジュアルエディタを使おうとしたのが失敗でしたね。Interface Builderみたいなものかと期待したけど、ぜんぜんダメだった。XML直接手書きに切り替えてからは、サクサクと開発進むようになりました。

あと、見た目のカスタマイズが厄介ですね。UWPでは、見た目のかなりの部分まで、XAMLで記述されています。だから、このXAMLを変更することにより、柔軟に、そしてコーディングなしでカスタマイズできる、ってのが売りです。でも、なんでもできるってことは、やらなきゃいけないこともたくさんある、ってことにつながります。ちょっとした変更をするにも、なかなかに記述量が多くて大変でした。

もうひとつとまどったのは、View Model。UWPは全体的に、データはView Modelの形式で与えることになってます。Cocoaでいうと、Bindingみたいなもんですね。モデルを管理すれば、ビューの更新は自動的に行われる、素晴らしい仕組みです。でもこれ、便利なのはその仕組みの枠内だけで使っているときだけなんですよ。ビューの表示の仕方をちょっと変えようとすると、とたんにイバラの道が待っています。できないわけじゃないんだけど、書き換えないといけないところが多すぎる。これだったら、View Model使わないで、ベタにViewを触った方が圧倒的に速いよ、ってのがしょっちゅう出てくる。

というわけで、UWPはXAMLとかView Modelとか、かなり洗練されたアーキテクチャを備えるんだけど、その仕組みから外れると途端に使いにくくなります。UWPの枠内で、素早く簡単なアプリを作りたいときにはこれでいいんですよ。でも正直なところ、それで収まるアプリなんてほとんどないです。結局、XAMLやView Modelの枠に縛られないようにプログラムを書いていきました。なんだかなー。高度に統合されたものよりも、緩やかに連携するものの方が、アプリ作る上では使いやすいんだよね。

AFTERWARD

そんなことで、どうにかリリースできるものを作り上げました。思ったより楽しかったです。違う世界を体験すると知見が広がるので、iOSアプリを作っている人もトライしてみるといいと思います。

ただね、いまどきWindows PCで何かやりたい人は、かなり少数派だよね。iPhoneとiPadの方が高機能で高効率になっちゃったから。DropTalkは、いまだ教育分野ではWindows PCを使っているという背景があるから移植したけど、それ以外の分野では必然性が薄いよね。そこがいちばんの問題かな。

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


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

関連語としてコラムが表示される時、操作不能になることがある問題を修正しました

中日・日中辞典では、検索した語句の詳細を表示する時、関連語句も同時にその下に続けて表示します。これにより、説明文内部にあるリンクを一つずつタップしなくとも、一目で確認することができます。

この関連項目にコラムが含まれている時、1.0.3では操作が不能になる不具合が確認されていました。これは、コラムの項目を検索する際に不具合があり、検索が永遠に繰り返されるために発生していたものでした。コラムの検索に関する不具合に対応することで、修正を行いました。

関連語としてコラムが表示される時、表示領域が意図したものよりも大きくなることがある問題を修正しました

上述のように、中日・日中辞典では関連語句をまとめて表示するのですが、これは開始の数行を抜粋した形で行なっています。多くの項目をまとめて閲覧できるようにするためです。

ですが、1.0.3ではコラムの関連項目で、意図したものより大きく表示されることがありました。これは、画像を含むコラムで発生していました。画像を含むテキストに対して、抜粋の処理に不具合があったためです。これを修正しました。

ピンイン入力時に、一部の音節で声調が適切に表示されないことがある問題を修正しました

中日・日中辞典では、ピインイン入力を補助するために、音節ごとに声調を指定することができます。音節は400以上あるのですが、この区切りに一部不適切なものがありました。具体的には、次の音節となります。

  • ao
  • ou
  • rua
  • tui
  • tong
  • xiao

これを修正しました。

量詞を表すアイコンを追加しました

見出し語に対して量詞が使われる場合は、これを記述しています。この量詞に対して、アイコンを付加して見やすくしました。

ちなみにこの量詞のアイコンは、フォントとして実装されています。新規にグリフをデザインして、本文中に組み込んでいます。画像ファイルではないので、大きさや色を自在に変更できるのが利点です。

『中日・日中辞典【第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人を採用しました。彼らはいくつかトライもしてたのですが、うまく動かなかったようです。それをちゃんと動かすとこまで持っていくのが、プロの仕事です。見せつけてやるぜ、プロの力。