「Unicode」を含む日記 RSS

はてなキーワード: Unicodeとは

2017-10-15

emoji の謎

日本の俗世に詳しくない外国人が、よくも 🍢 とか 🍘 とか 🗾 とか 🎌 とか 💢 とか 🎴 とかをUnicodeに格納したものだな!💩

2017-09-06

[] PBUH

Peace be upon him(彼の上に平安あれ)の略。

ムハンマド(彼の上に平安あれ)やイーサー(彼の上に平安あれ)といった預言者について言及する時には必ずこのような言い回しを用いて敬意を示さねばならない、というしきたりがイスラム法(フィクフ)に定められているのだが、正直みんなめんどくさいと思っているので英語圏の人はこのように略す。

当然ながら敬虔ムスリムには嫌われるが、フィクフの解釈は諸説あるので、現代カジュアル信者にはわりと許容されている。

Fight of Gods - General Discussions

「え、ムハンマド(PBUH)いねーの?」

ムハンマド(PBUH)はやべーだろムハンマド(PBUH)は」

なお言い回しバリエーションの一つ SAWS (Sallallahou Alayhe Wasallam) にはなんと一文字で表せる専用のUnicodeコードポイントが割り当てられていたりする。→ "ﷺ"

2017-06-10

PR

これで一文字作ってくんないかUnicodeさん。

付けたいとは思うけど、文字数食うの困るわ。

2017-05-30

BASP21で受信したメール添付ファイル名などが文字化けする問題対処ポイント

今時BASP21 DLLフリー版)でメール受信してどうのこうので困ってる人が世の中にどのくらいいるかどうかわからないけど、今日嵌ってググってもまともな答えが出てこなくて途方にくれたのでポイントメモっておく。

問題と原因

BASP21 DLLのRcvMailメソッドPOP3サーバから受信してReadMailメソッドメールの内容を取得すると、一部のメール送信者や添付ファイル名が文字化けして正常に取得できない。これはBASP21 DLLのReadMailメソッド最近普通に送信されるUTF-8メール対応していないため。

対処

RcvMailで受信したファイルをReadMailで読み込む前に直接開き、Base64エンコードされたUTF-8文字があったらデコードしてJISに変換してBase64エンコードして保存する。その処理したファイルをReadMailで取り扱うようにする。全部BASP21の機能でできる。

落とし穴

BASP21のKconvメソッドの第1引数のinstrに文字列を渡せるのはUnicode UCS-2のみの場合だけらしく、UTF-8文字列を渡しても正常に動作しない。なので、一旦テンポラリファイルに書き出しKconvFileメソッド使用して変換を行う必要がある。っていまドキュメント眺めてたら文字列バイト配列にするByteArrayというメソッドがあるみたいなのでこれをを使えばできるかもしれない。けどもう正直いじりたくないよ…。

2017-04-21

プログラム日本語で書けばいい気がするけど(追記した)

定期的に思うんだけどプログラムで無理な英語にせず日本語にすればいいのにって思う。

実践はしていない)

日本語で書ける言語使うんじゃなくて変数名や関数名がUnicode対応日本語書けるもの

日本語でいいと思う理由は主に2つ

○画面に表示する時

フレームワーク言語にもよるけど表示するとき英語名前から日本語名前に変換して表示って手間があるものがある。

最近見かけた例だと.NETプロパティ属性に表示名書いて表示するときに取り出していた。

最初から日本語だとそのまま表示でいいことが多くて一段手間が省ける

英語がわけわからん

まず自分英語化するとき

いい単語が出てこないとか、しょっちゅう

慣れが必要だし慣れてもなんかコレジャナイ感とかで苦戦する。

次に他の人の英語化したのを見る時。

その人の英語力にもよるけど、動詞名詞が変に混ざっていたり、sがついてたりなかったり、そもそもchildsみたいな謎の語があったり。

そこそこできる人同士でも、「私はニュアンス的にこっちの単語」「僕はこの単語のほうがいいと思う」とかある。

相手の書いたところがわかりづらいのはもちろんだけど、プログラム的に同じ意味なのにクラス関数によって呼び方違うと辛い。

かといって全員に日本語英語対応を先に渡しておいて統一しようというのは大変すぎる。

日本語だと仕様の時点で日本語で書いてるからまぁおかしなことにはそうならないはず)

そういうわけで日本語で書けば色々解決するのにって思う。

----

次にデメリット

軽く調べた感じ主にこの2つな感じ。

IME」「英語圏のものへの対応

IME

半角全角を打つのってめんどい

と思うけど、実際チャットやこういう文章書いてて英語が出るときに割りと頻繁に押してる。

ほぼ無意識でやってて意外と苦じゃない。

短いとF10変換で半角にすることもあるけど、キーボードタイプカウンタとか入れてみると半角全角キーはけっこう上位にいた。

それに、なんだかんだコメント日本語で書くことが多くて、他の人と作るのならこまめにコメント書いてる。

そうなると全角半角の切り替えは普段からあるもので、あんまり気にするほどじゃない気がした。

最近じゃIDEエディタの補完が優秀だし、日本語にするにしても「最初はjから始める」とかルール入れておけば「j」って打ってあとはスコープにあるいくつかの候補から選ぶだけで全角にしなくていいかもしれない。

英語圏への対応

githubで公開したりとかライブラリ再利用してもらうとき日本語じゃ使ってもらえない。ってことみたい。

私が日本語にすればいいじゃないって思ってるのは、ビジネスロジックというかそのアプリケーション固有名詞みたいなところ。

「足し算」って関数名は 「add」 でいいと思うし、配列のそれぞれは element とか item とかそういう一般的英単語でいいと思う。

具体例がいいづらいけど、業務システムで表示する金額名前とか、日本語独特なものとか、一般的単語じゃなさそうなの。

こういうのを日本語にしたいってわけなので、ライブラリ的な共通なところは英語で良いかgithubで公開する範囲英語のものでいいと思う。

ただ、最近はやってるマストドンとか、ライブラリ的なものじゃなくアプリケーション自体githubで公開する場合はできない気がする。

でも、海外対象にしてるものだと日本語特有なせいでわかりづらい英語になる苦労とか少なそうだしそういうのだと英語いいんじゃないかな。

----

長くなったけど、まとめると、

業務システム固有名詞とか日本語特有ものとか無理に英語化してよくわからないことになってり、見づらくなるくらいなら日本語使えばいいんじゃないかな

ということ。

まあ思ってる割には実践してないので、やってる人がいたら良かった・悪かったとか聞きたいなと思ったのが書いた理由

追記


帰ってきたらすごいブクマついてた。

色々意見あってとりあえず感謝

絶対自分でやってから言えよ」みたいな意見来るだろうと思って今日の空き時間日本語行ける言語調べたり軽く日本語使ってコード書いてみたので、そのあたりと目についたコメに答えてみる。

まず、思いの外日本プログラミング言語上げてる人がいたので、うまく伝わってなかったぽい。

具体例上げずにサッと書いたらからかな。

あと自分もわりとするけどタイトルだけ見て中身見ずにコメントしてた人もいるだろうなー。

日本語で書ける言語使うんじゃなくて変数名や関数名がUnicode対応日本語書けるもの

これが、などしこやひまわりや、BF系のmisaやら北斗のあれやらうにゃーとか色々な「構文など最初から日本語を前提とした言語」ではないってこと言ってた。

---

日本語かえる言語

最近の主要な言語ならだいたい Unicode 対応でしょと思って環境があった言語を試した結果はこうだった。

JavaScript/Python/PHP/Scala/Kotlin/C#/Go/Swift

これらは日本語変数作れた。

rust と Lua は無理だった。

rust は確か前に、変数名が ascii 文字だけなことに日本以外のどこかの国からUnicode対応にしてって多くの要望あったみたいな記事があったし将来的に対応するんじゃないかなって思ってる。

実際に今どんな状態かは知らない。

その記事コメントとかでみたけど、日本語以外は割りと自国言葉を使ってたりするっぽいね

(正確なデータはないか信憑性はあるとはいえないけど)

VBA を上げてる人がいたけど、私はそこまでのはみたことない。(幸せ者っぽいな)

稀にエクセルマクロいじるときに使い方ググってて出て来る、解説してるページで関数名が日本語なのをたまに見るくらい。

パット見なんか気持ち悪い感はあるけど、読んだときのわかりやすさはけっこう大きい。

---

○使ってみて

大規模案件に使ってみてこその問題もあるだろうけど、簡単スクリプト程度のを日本語にしてみて気づいたこと。

割といける。

全角半角キーPHP の $ より楽。

PHP言語変数は全部$からはじめないといけない欠陥言語

まあ変数のみのgrepのしやすさや予約語キーワード変数名に使えるからメリットもある。

だが、$って打ちづらい。

Shift+4ってすごいつらい。

に比べて全角半角キーってちょい遠いけどそこまで苦痛じゃない。

ふだんから多用してるキーなわけだし。

ただPHP日本語の組み合わせは相性悪い。

$は半角でその後に日本語から手間が多すぎる。

それ以外の言語だと、IMEのおかげでかなり楽。

GoogleIMEだけど、多少のタイプミスは補完で修正してくれるし、予測変換が優秀だし。

IDEいから補完機能のない軽いエディタで書くようなときなら、IMEのおかげで英語変数名で書くより速度は早いと思う。

---

少し前に知人から言われた日本語デメリットを思い出したのでそれも触れとく。

仕様変更言葉変わったとき日本語だと全部書き換えないといけないよ。英語だと別にそのままでいいし。」

英語からない人が、英語言葉とみなさずただの記号として考えてるから、っていうような発言

仕様変わって変数名まで変えるのは面倒なのはわかるけど、あとからコード読む人が英語で見て意味不明になる。

英語日本語対応コメントに書いたとしても、全然意味の違う英語があるのは混乱でしかない。

こういう考えの人がいたら本当にやめてほしい。

---

あとは気になったコメントについて書いてく。

表記ゆれとか方言とか言い回しなどについては、全部日本語にするとあるだろうけど、私が想定してるのは直感的に英語にならないような固有名詞とか。

DBの項目名日本語っていうのは私の思ってるのと近い。

年金の例も○○年金というのがいろいろあって、全部英語だと嫌になってくるしよくわかる。

こういうのを日本語にしたい。

なので年金額を取得する関数で「年金額を取得する」「年金額を取得」「年金額を取り出す」とかの表記を迷うんじゃなくて「get年金額」でいいと思う。

こういう単語だけだと表記はそれなりに揃うと思う。

特にDBにある項目だと仕様とかで先に言葉が決まってることが多いだろうし。

---

見た目について。

見た目が残念とか見づらいというのは同意

ただそれ以上に読んだときのわかりやすさが大きいと思う。

見た目が悪いというのも全部英語っていう前提があるからで1ヶ月も日本語コード見ればなれるんじゃない?って思う。

---

へとヘ

これはありそうな問題

ただ、IDEを使う前提なら未使用変数エラーとか、選択したときに色が変わってないとか、割と気づけると思う。

lとIとかアルファベットでもあるけど、IDEや高機能エディタ使うと困ることはほぼなくなった。

---

ローマ字

私が日本語にしたいような固有名詞ローマ字化してるプロジェクトにであったことはある。

やすい語は見やすいけど、見づらい語は圧倒的に見づらい。

それにローマ字のほうが「ん」でnは1つか2つかや、ヘボンorローマ?という日本語より表記が揃わない問題ある。

特にローマ字場合自分キーボードで打つ方じゃないと書きづらいのでそろえてもらうのに抵抗がある。

---

ラバゴス化・日本が遅れる

海外向けとか海外の人と一緒に作る系なものって最初から英語で困らない単語ばかりだと思う。

そういうのは対象外

今回いいたいのは、元から日本しか対応してないような業務システムなど。

そういったところの固有名詞日本語になったからって、困ることはないはず。

もともとガラバゴスなわけだし。

日本しか使われないもの海外向けにするにしてもフルスクラッチで作り直すことになるようなもの

こういうのは日本語化いいんじゃないかと思う。

---

テスト

テストだと日本語が使ってる人多いのかな?ブコメスタートップだし。

とりあえずはテストから使い始めてみようと思う。

---

長くなったけど参考になる意見もいろいろあって助かった。

2017-01-23

http://anond.hatelabo.jp/20170123101956

弊社が設計しているシステムは、全角半角どちらでもOKな上に、内部では半角で処理するように統一してます

お客様にも意識せずに使えるようになって喜ばれていると自負しておりますが…

このシステム問題点は、文字コード体系の変更に弱い点が挙げられます

今は、 「s/1/1/」みたいな命令で全角数字の1を半角数字の1 に変更している実装ですが、

この部分が未来永劫動作する保証が無いのです。

Unicode拡張によって「1」に部分的マッチしてしまう新しい漢字が登場したら、相応の処理を追加しなくてはなりません。

予算的にその保守可能であれば問題無いですが、そうでなければいつか使えなくなる可能性が残ります

2017-01-12

http://anond.hatelabo.jp/20170112132301

カレンダー業界祝日変更にも対応しないとあかん

Unicode業界。何をとちくるったのか、「昭和」や「平成」を1文字表記できる新文字を作っちゃったので、新元号で1文字作る必要がある。

2016-06-17

1.0から学ぶJava

タイトルを見て釣られクマーな皆さんこんにちは

ホッテントリメーカーで作るような煽りタイトルって、みなさんもう見飽きてると思うんですよね。

今調べたらホッテントリメーカー2008年だそうで。どうりでねー。古臭いなーと思いましたよー。

「一から学ぶJava」ってのをね、1.0にするだけでこんなに素敵なタイトルになるんだから面白いですねー。

タイトルを思いついただけだったんですけど、思いついたらやっぱりちゃんと中身も書かないと行けないじゃないですか。やだー

面倒くさいんですけどね。ちょっと1.0から学んでみましょうか。

Java 1.0 1996年1月23日

Javaの1.0がリリースされたのは1996年1月23日ですね。発表されたのが1995年5月23日でJavaの誕生日といった場合にどちらを取るかで揉めることがあります。

かれこれ20年前なわけで、当時のパソコンというとハードウェアはCPU が Pentium 133MHz メモリ16M とかそんな感じだったかなあ。今どきの携帯電話の例としてiPhone 6sを挙げるとCPUが1.85GHz メモリ 2G ってんだから凄いですね。OSは1995年11月23日リリースされたWindows95とかそんな時代背景です。インターネットがようやく一般に普及し始めたところでしょうか。

今から思うと相当弱いハードウェアですけども、そろそろVM方式を採用しても良さそうな、そんな時代でした。インタープリタだと流石に遅い、でもC言語のようなコンパイル言語だと"Write once, run anywhere"とはいかない、という判断もあったのだろうと思います。Javaが純粋なオブジェクト指向言語ではなくintなどのプリミティブ型を持つというのは、当時のマシンスペックを考えた場合、ある程度妥当な判断だったと言えるでしょう。これが後々苦しくなってくるわけなのですが。

Javaを作った会社はSun Microsystems(サン・マイクロシステムズ)というアメリカの会社で、2010年1月27日オラクルにより吸収合併され今はありません。SolarisというOSとSPARCプロセッサでUNIXサーバーの販売で90年代後半までは一人勝ちのような状況だったと聞きます。当時にすでに「ネットワークこそがコンピュータ」(The Network is the Computer)というモットーを掲げてたんだからおかしい。1996年リリースのJavaが標準でネットワーク機能を備えていたのもこのあたりの思想から来ているのかもしれませんね。

当時のプログラミング言語としてC++が挙げられますが、C++でのプログラマへの負担といいますか、ヒューマンエラーの起きやすさといいますか、その辺を改善する目的で開発されたのがJavaだったわけです。

1996年の時点にこんな言語が登場したのですから革新的でした。

いろんな企業がJavaに賛同します。その中にはMicrosoftもありました。この時期、Microsoftは次期のWindows開発用のプラットフォームにJavaを据えようと考えていました。その後、袂を分かつことになるのですが……。

プログラム言語として構文などを見ると、C++を強く意識した構文なのは間違いなく、しかしポインタ演算を廃してポインタを機能を限定した「参照」に置き換えるなど簡素化が多く見られます。C++からはいろんな機能が削られています。関数ポインタ、構造体、演算子オーバーロードテンプレート((テンプレートについては実装が間に合わなかったという話を聞きます))などなど。そのためC++の劣化であるように揶揄する人もいますが、こうしたものを捨てて言語仕様を比較的小さくシンプルに抑えた点は評価に値すると思います。しかし、今でもこうした削減された機能を愛する人からはJavaを腐す要素として挙げられてしまうのでした。

Java 1.1 1997年2月19日

Wikipediaからピックアップすると1.1での大きな機能追加は

といったところです。当初よりJavaの内部文字コードUnicodeで文字を表すchar型は16bitで設計されていました。Unicodeは当時それほど普及しておらず、Unicode対応のテキストエディタさえ少なかったと記憶しています。時代を先取りしていると言えますが、大きな誤算はUnicodeが当初16bitのコードポイントに世界のあらゆる文字を格納しようとしていたことで、漢字圏の我々からすると16bit=65,536程度の空間に文字が全部入るわけないだろ!というものだったが故に早々に破綻し、Unicodeは21bitのコードポイントに拡張されることになるのです。これはまた後の話。

なんにせよ、日本語が対応されたのは1.1からで、日本でのJavaの採用が始まったのはこの頃からと言えましょう。

当時のJavaのGUIはAWTというものでしたが、これを用いたGUIの開発は当時は結構行われていたイメージですね。Visual BASIC でGUIを作るプロダクトも結構あったと思います。GUIのためのオブジェクト指向言語としてJavaが使われていたイメージがありますね。JavaBeansもそのための仕様でした。件のsetter/getterの話題に繋がっていくのですが。

JDBCはJavaとデータベースをつなぐインターフェースです。RMIではあるJava VMから別のJava VMにオブジェクトを送って実行する、といったことができます。こうした機能が用意されたことで、ソフトウェアフロントとしてのGUI、裏方の実装のためのネットワーク機能、データベース機能、さらにはソフトウェアを配布するためのJava Appletという布陣でJavaでのソフトウェア開発が加速していた時代といえます。

Microsoft Visual J++ もこの時代ですよ。

Java 1.1以降のバージョンのものは互換性確認のためにOracle Java Archiveからダウンロードすることができ、今でも入手することができます。もちろん、Java7ですら2015年4月にEOL(End of Life,サポート終了)となっているので、通常利用するのはJava8としてください(本稿執筆時点)。

当時のドキュメントを見るのも一興です。現在と比べると標準APIがかなり小さい。なお、当時のjavadocは今とはデザインが大きく異なります。

  • java.applet
  • java.awt
  • java.awt.datatransfer
  • java.awt.event
  • java.awt.image
  • java.beans
  • java.io
  • java.lang
  • java.lang.reflect
  • java.math
  • java.net
  • java.rmi
  • java.rmi.dgc
  • java.rmi.registry
  • java.rmi.server
  • java.security
  • java.security.acl
  • java.security.interfaces
  • java.sql
  • java.text
  • java.util
  • java.util.zip

この時代であれば、全パッケージを舐めて標準APIを学ぶこともそう難しくはありませんでした。この時代から触っている人間は新バージョンが出るたびに増えるAPIを順に学んでいけたのです。しかし、現代にJavaを学ぶ場合、どのバージョンでは何があって……というのをいちいち学ぶ必要はほぼありません。Java5以前は一緒くたでいいと思いますし、一部のAPIで歴史的経緯があってねーというのを知っていればおそらく十分ではないでしょうか。

Java 1.2 1998年12月8日

strictfpキーワード浮動小数点演算をやる人は覚えておきましょう。JavaはパフォーマンスのためにCPUの浮動小数点演算を扱うことが許されており、そのため実行するCPUによって精度が異なることがあるんですね。まあ今時のCPUだと大丈夫だとは思うんですが。

リフレクション機能ではJavaのクラスを抽象的に扱うことができます。設定ファイルに書かれたクラス名のclassロードして実行する……みたいなことができるんですね。フレームワーク的なものを作る場合には多用することになります。

1.2からは新しいGUIのSwingが採用されました。AWTがOSごとのGUIパーツを用いていたためデザインに違いがあったのに対し、Swingでは統一的なルック・アンド・フィールが用いられるようになりました。まぁ今ならJavaFXを使うのが良いと思います。

初期のJavaはやはりVM方式の実行速度の遅さが指摘されていました。実行時の構文解析を伴わないだけインタープリタよりは早いものの、実行バイナリを作るC/C++よりは遅い、そうした評価です。ここではサン・マイクロシステムズのVMにJIT(ジャストインタイムコンパイラ)が乗ったことが挙げられていますが、JIT自体は別の会社が先駆けて開発していたことは記しておきたいと思います。

JITコンパイラは実行時にJavaのバイトコードを環境のネイティブコードコンパイルして動かす技術です。この後、JITコンパイラ、動的再コンパイル技術、世代別ガベージコレクションを備えたHotspotといった様にJavaVMは進化していきます。現代では実行時の最適化が進み、大きなスケールで見た場合、Javaの実行速度はC/C++での実装と比べてそれほど遅れるものではありません。遅くても倍の時間は掛からない程度といったところでしょうか。

あとは特記すべきはコレクションフレームワークです。皆が多用しているであろうjava.util.Listやjava.util.Mapといったライブラリが整備されたのがこの時なのです。それ以前はjava.util.Vectorやjava.util.Hachtableというクラスが可変長配列の機能を一手に担っていました。今ではVectorやHashtableは使うべきではありません。

Microsoft 離反

Java の開発はSun Microsystems が主導していたけども、すべてがSunのものだったというわけでもなく。Javaには多くの会社が出資していてその中のひとつMicrosoftだったわけですね。

Microsoft の Visual J++ では delegate とか独自機能拡張もありましたけど、裁判で問題になったのは J++ でコンパイルしたclassファイルMicrosoftのVMでしか動かないという部分ですね(他社製のVMで動くclassファイルを作ることもできる)。classファイルがどこのVMでも動くの大事だろ、"Write once, run anywhere"だろ、お前何してくれてんの!と喧嘩になったわけです。当時のMicrosoftブラウザまわりでも独自拡張がやりたい放題、標準規格?なにそれ美味しいの?みたいなスタンスをあちこちで見せていたものです。

結局、この事件でMicrosoftのJavaはバージョン1.1相当でストップ。好き勝手にやれないなら独自に言語作るわーとばかりに.NET フレームワークと C# といった方向に舵を取ります。

JavaがPC上でのUI開発の主力になろうとした勢いはここで潰えます。

Java EE

Java SE とは別にこの時代に Java EEリリースされていることは特記しておきたいですね。これ以後、それまでのCGIに取って代わって、JavaはWebサービスの開発のプラットフォームとして多用されるようになります。

2000年あたりからはJavaはGUI開発というよりは、Webサービスの開発が主流という流れになっていきます。インターネットサービスが非常に発達していった時代、背後ではとてつもない量のJavaのプログラムが支えていたわけです。ただまあ、こうした産業利用は一般的ユーザーの目にはあまり入らないわけです。一般人からすればJavaといえばJava Appletみたいなイメージはずっと残っていたでしょうが、実体としてはJavaといえばServletという時代になっていたわけです。

企業で用いられる社内システムにもServletは多く採用されました。

理由はいろいろ挙げれると思うのですが

というのが大きな理由だろうと思います。JSPというテンプレートエンジンを用いてHTMLを整形してWebページを作り出す、というアーキテクチャある意味では便利で簡単でした。

もっともHTMLの表現力に足を引きずられるため、GUIの機能性という点では後退したわけなのですが。それでもメリットが大きいと判断されたのでしょう。というか、まともにGUIを組めるプログラマがほとんどいないから、GUIのシステム開発がなかなか成功しないってのもあったんでしょうけどね。

iアプリ Javaアプリ EZアプリ

2000年あたりというと携帯電話の普及も取り上げなければなりません。現代のスマホガラケーに比べれば非常に機能は貧弱で、まさに携帯「電話」でした。要するに電話とメールぐらいしかできなかったんですね。

そこにdocomoiアプリJフォン(ボーダフォンを経て現ソフトバンク)のJavaアプリ、auのEZアプリという携帯電話上でちょっとしたアプリが動くよ!というのが乗るようになってきたんです。これがJavaを組込み用途にコンパクトにしたJava MEというものが土台となっていて(正確にはiアプリちょっと違う)Servletと並ぶJava言語の大きなもうひとつの領域となっていました。

iアプリは当初は容量が10k byteまでといった制約があり、容量制限が非常に厳しかったのですが、新機種が出るたびに容量は緩和されていきました。

docomoiアプリ含めiモードによって一世を風靡します。こうした土台を作ると、その上で商売をしたい人がたくさんやってきて、勝手にコンテンツを作ってくれる。docomoはそれらから手数料を取るので労せずして大金を稼げるというわけです。賭場の胴元というわけです。

この賭場が、将来にAppleiPhone, GoogleAndroidに荒らされることになります。docomoがなかなかiPhoneを出さなかったのもiモードという自前の賭場を失うことを良しとしなかったためです。金づるを失ったdocomoSamsungと組んで独自の携帯向けOSであるTizenの開発に乗り出します。そんなTizenですが鳴かず飛ばず。噂ではインドあたりではリリースされたとか、なんとか。

RIA時代

話を2001年に戻しましょう。

Microsoft離反でGUIのプラットフォームとしてのJavaというものは存在感を弱めていました。この分野の復権に寄与したのはJava 1.4 (2002年2月6日)で導入されたJava Web Startです。

Java Appletブラウザ埋め込みで動作したのに対し、Java Web Startではブラウザから起動しつつも独立したアプリとして起動するのです。

Webシステムが企業の社内システムに採用された話は先に述べたとおりですが、やはりWebシステムのGUIというのはHTMLに引きずられて貧弱だったんですね。

端的に言えば入力値が数字かどうか?みたいなチェックがなかなか難しい。HTML上でJavaScriptでやるわけなんですが、なかなか気持よく入力できるような感じにはならなかったんですね。

また、Ajaxによるブラウザのページ遷移を伴わない通信というのが出てきたのも2005年ぐらいなので、入力値に対してサーバ問い合わせするようなことはできなかった。当時だと一旦画面遷移させないとできなかったわけです。

こうした事情から、クライアントサイド、要するにPC側でもっとリッチなUIが使いたい!という要望があったわけです。Webシステム使いにくい!という不満の噴出と言ってもいい。そこで出てきたのがRIA (Rich Internet Applications)というわけです。

Javaは1.0時代のAppletからそうですが、ネットワークを介して別のPCにプログラムを送り込み、そこで動作させるという能力を持っていました。それこそまさにRIAに求められる機能性だったわけですね。

RIAの代表とされるのは

あたりです。三つ巴の戦い、どこに軍配が上がるのか!?と注目されましたが、勝利したのはHTML / JavaScriptでした。

Google MAP で注目を浴びたAjax技術、それまでブラウザでは不可能と思われていた高級なGUIをHTML / JavaScriptで実現させました。もうやめて欲しいですよね。せっかく脱ブラウザの流れが来たと思ったのにまたWebシステムに逆戻りですよ。

RIAが失速した理由として考慮して置かなければいけないのはスマートフォンの台頭です。RIAでは端末を選ばずどこでも同じアプリが動かせる点がポイントひとつでしたが、スマートフォンではそうは行かない。"Write once, run anywhere"を破壊したのはスマートフォンだったというわけです。

しかし、先日インストールなしでアプリを実行するAndroid Instant Appsが発表されたりしまして、結局RIAの思想といいますか、要求というのは今でも息づいているのだなと思った次第です。

Java 5 (2004年9月30日)

1.3 / 1.4 では機能追加はあっても言語構文が大きく変わることはありませんでした。大きく変わったのはJava 5です。この時からバージョニングが変わって1.5ではなく5と表記されるようになりました。

Java5の特徴はなんといってもジェネリクス。それまでjava.util.Listにデータを出し入れするのにはキャストが必須だったわけですが、ようやくキャストから開放され型の安全度がぐっと高まりました。その他に以下のような変更があります。

言語としては随分変わっったわけですが、もうかれこれ10年以上前のことですからこれらの機能が「Java5から導入された」という知識は今となってはあまり必要とされません。これらの機能が使えないJava 1.4で開発をする事案が殆ど無いからです。0ではないのが悲しいところではありますが。

その後

Java 6 (2006年12月11日)がリリースされた後、Java 7 (2011年7月28日) が出るまでJavaは停滞してしまいます。その間にSun Microsystemsという会社がなくなってしまったためです。

Sun Microsystems の経営状況が悪化しており、ついに身売りをすることになりました。身売り先はIBMともGoogleとも噂されましたが結局2010年1月27日オラクル吸収合併されました。

Javaの停滞中にはJava VM上で動く非Java言語も台頭してきました。Scalaなどですね。

やや戻って2007年Androidが発表されます。Androidの開発言語にはJavaが採用されていますが、実行環境はJava VMではなく、ライセンス的な事情でJava(TM)は名乗らない微妙な位置関係にあります。

Java 5 以降で大きく言語仕様に手が入るのは Java 8 (2014年3月18日)です。並列処理を行うためのStream APIと、そのために簡易に関数を定義するためのラムダ式が導入された点が大きいですね。日付APIも刷新されました。

このように、Javaは1.1の黄金時代から今に至るまで利用ジャンルを転戦しながら産業の土台となって支えてきた歴史があります。ジャンルの趨勢により浮き沈みもあります。今後についても決して楽観視はできないでしょう。Javaを学ぶことはプログラミングを学ぶステップとしては意義はあると思いますが、Javaを学べばゴールというわけではありません。プログラム言語次世代へと移りつつあります。業界動向には注視していきましょう。

2015-09-19

Webページって半角か全角かをどうやって判別してんの?

http://anond.hatelabo.jp/20150918235439

ググってみたら


そもそも半角と全角とを区別する必要が既に失われているような気がしてならん。

たとえば

2015-05-28

僕の鉄壁iPhone

effective.
Power
/*unicode strings*/
冗

件のiPhoneクラッシュメッセージだけど、僕のiPhoneはまだ無事だ

きっとこれからも無事だろう。なぜならこのメッセージが僕のiPhoneに届くことはないから

ただし可能性はゼロじゃない。僕が僕自身にこのメッセージを送ることもできる

2015-03-17

http://anond.hatelabo.jp/20150316195608

過去Unicode文字列扱う必要があったことから Mery を知ってそれ以来 Mery を使っている。

それまでは NoEditor とか UnEditor 使ってた。

仕事で巨大なテキストファイルを扱う必要があるときEmEditor(無料版) にご登場頂いている。

2014-11-05

Unicode 8.0ドラフト案出しなう

Unicode 8.0のドラフトみて面喰った。

もはや"「文字」コード"でもなんでもねー。

ただでさえ複雑怪奇なのにまたややこしいことを。

この調子だと「Unicode8.0は超面倒なので対応しません。色コード部分は豆腐になるけど仕様です」なんてソフトウェアも出てくるんじゃないかな。

最悪「絵文字肌色問題対応したいけど、Unicode8.0は超面倒なので絵文字豆腐します」なんてところも・・・

そんなベンダーはいないと思いたいけど、対応コストが高くつきそう・・・

それにしても、昔を思い出す。

昔:65536文字で足りる!任せろ → 文字よこせ(CJKなどアジア中心に) → 無理でした。サロゲートペアやります

今:絵文字入れたぜ! → 人種差別だコノヤロー → 色コードつけま

これからUnicodeにどのようなネタを仕込んでくれるのか、期待してますよ。

2014-09-05

http://anond.hatelabo.jp/20140905152346

http://anond.hatelabo.jp/20140905152302

あ、いや、全然上級なことはなくて。

単に「社内にある昔ながらのモノ」を使わないといけないというだけで・・・

今どき代表FTPしかftpsでとか。一社に一台Windows Active Directoryとか。

特にAD、つなぐのにldap://ではNGldaps://じゃないとダメ(書いてねーぞ!)とか、

 my $charmap = Unicode::Map8->new('latin1') or die;

 my $uniPass = $charmap->tou('"' . $password . '"')->utf16le();

とかPerlに慣れてもイミフな事しないとダメとかね・・・

で、Active Directoryのついでに、データベースグループウェアとレン鯖のメールアカウントも同時に登録しないといけない。

零細企業でよくありそうなカオス管理者業務ですね。

共感かいらないです。もう、ただの愚痴だったと思って下さい。Rubyから始めていたら挫折したに違いない・・・ただそれだけです。

すみません

2014-06-24

SQLSERVER テーブルのXML型の列へ XMLファイルから取り込む一例

  1. XML宣言のエンコーディングを "utf-16" にする
  2. BOMつきのUTF-16(Unicode)でファイル保存する
  3. 次のようなSQL文を流す

INSERT INTO TBL SELECT TBL.COL FROM OPENROWSET(BULK 'filepath', SINGLE_NCLOB) AS TBL(COL)

他の方法もいろいろあるだろう。ただ、文字コードに関して言及すると、SQL SERVER の内部データUCS-2UTF-16のサブセット)なので、合わせておいたほうが無難UTF-16以外で取り込もうとすると、日本語付近で "XML 文字が無効です" などとエラーになる場合が多い(もちろん原因は何かあるのだろうが、調べてもさっぱり私には見当がつかない。時間の浪費はいやずら)。

'filepath'は、SQL SERVERインスタンスが動いているマシンにとってのファイルパスね。'E:\???\???.xml'や'\\filesvr01\shared\data\???.xml'とか。

SELECT COL.query('/ELEM/NODE') FROM TBL など、あとはいろいろクエリーしてみてくれ。

感謝

SQLSERVER:OPENROWSET SINGLE_NCBLOB は BOMつきで

UNICODE (UTF-16)で保存しても、BOMをつけていないと

「SINGLE_NCLOB には UNICODE (widechar) 入力ファイル必要です。指定されたファイルUnicode ではありません。」

とはじかれる。ビッグエンディアンでもリトルエンディアンでもOK。

もちろん、UTF-8 ではBOMがあろうとなかろうとだめだ。

2014-06-04

apple策定した新プログラミング言語Swift」では、変数名にunicodeが使えるらしい

これってつまり

プログラム学習の大きな障害となっていた「意味効果が結びついていない変数名」の発生を抑制でき、

なおかつ非英語圏での準プログラマらの練度を底上げできることに繋がるのではないか?

(いやまあ変数名に全角使える言語結構あるけど)

ってか、調べてみたらほとんどの言語日本語コード書けるのな。

いっそのこと自分セルフコーディングに関しては全角用いるようにしてみるかしら。

2013-11-11

Writebox便利

 Chrome拡張機能テキストエディタ

 書いたファイルDropboxGoogle driveにプレーンテキスト(UTF-8)として保存する。

 上記オンラインストレージへのオートセーブ機能はないが、データローカル自動保存されるため、ブラウザクラッシュしても大丈夫

 欲を言えば、Shift_JISでの保存にも対応してほしい。Chrome環境じゃ無理か。Unicodeデフォだもんな。

2013-01-13

http://anond.hatelabo.jp/20130113085427

話ずれるけど「出口」に「出口」とか併記してたりするの、シュールだし無駄感つよい。

無駄感は強いけど、愚直に併記した方がいいと思う。

変にまとめようとすると、Unicodeの「高」と「はしご高」みたいに

「これとこれは同じ表記だからまとめていいよね」

「いや、微妙に違う!違和感あって気持ち悪い」

「いやいや、同じでしょうよ」

「違うだろう!まったくこれだから・・・

あぁ!?何だと!?

みたいに収拾がつかなくなりそう。

2011-12-20

RegQueryValueEx REG_SZ UNICODE版とANSI

値はLPBYTE 型のバッファに返されるが

RegQueryValueExAやRegQueryValueExWと、

ANSI版かUNICODE版かを明示しなければ

UNICODEANSIとして文字列を返してくれるようだ。

AとW の違いは引数パス指定だけではない。

LPBYTEだから

文字列気遣いしてくれなくて ANSIで帰ってくるかなと勝手に思い込んで

MultiByteToWideChar を呼んで余計な変換を増やしてうまくいかなかった。

2011-11-08

Thunderbird から Outlook 2007 にメールを移行

やー。面倒でした。

古い情報だと Outlook Express を経由しろと書いてあるので、後継であるらしいWindows Live Mail を経由して(Windows Live Mail からエクスポートする方法で)

Outlook に移行したのだが、どういうわけか宛名が文字列として移行されてしまい、xxx@example.com というメールアドレスの移行ができなかったんです

で eml → msg もしくは pst 形式への変換ソフトを探すのですが、無料ものが見つからなくてあんまり情報もありませんでした。が、ありましたよ!お兄さん。

これなら、msg ⇔ eml の相互変換ができますです

MrMAPI.exe

http://mfcmapi.codeplex.com/

ヘルプはっときますね。

====

MAPI data collection and parsing tool. Supports property tag lookup, error translation,
   smart view processing, rule tables, ACL tables, contents tables, and MAPI<->MIME conversion.
MrMAPI currently knows:
  3916 property tags
   801 dispids
    35 types
    58 guids
   148 errors
    27 smart view parsers

Usage:
   MrMAPI -?
   MrMAPI [-Search] [-Dispids] [-Number] [-Type <type>] <property number>|<property name>
   MrMAPI -Guids
   MrMAPI -Error <error>
   MrMAPI -ParserType <type> -Input <input file> [-Binary] [-Output <output file>]
   MrMAPI -Flag <flag value> [-Dispids] [-Number] <property number>|<property name>
   MrMAPI -Rules [-Profile <profile>] [-Folder <folder>]
   MrMAPI -Acl [-Profile <profile>] [-Folder <folder>]
   MrMAPI [-Contents | -HiddenContents] [-Profile <profile>] [-Folder <folder>] [-Output <output directory>]
          [-Subject <subject>] [-MessageClass <message class>] [-MSG] [-List]
   MrMAPI -ChildFolders [-Profile <profile>] [-Folder <folder>]
   MrMAPI -XML -Input <path to input file> -Output <path to output file>
   MrMAPI -FID [fid] [-MID [mid]] [-Profile <profile>]
   MrMAPI -MAPI | -MIME -Input <path to input file> -Output <path to output file> [-CCSFFlags <conversion flags>]
          [-RFC822] [-Wrap <Decimal number of characters>] [-Encoding <Decimal number indicating encoding>]
          [-AddressBook] [-Unicode] [-Charset CodePage CharSetType CharSetApplyType]

All switches may be shortened if the intended switch is unambiguous.
For example, -T may be used instead of -Type.

   Help:
   -?   Display expanded help.

   Property Tag Lookup:
   -S   (or -Search) Perform substring search.
           With no parameters prints all known properties.
   -D   (or -Dispids) Search dispids.
   -N   (or -Number) Number is in decimal. Ignored for non-numbers.
   -T   (or -Type) Print information on specified type.
           With no parameters prints list of known types.
           When combined with -S, restrict output to given type.
   -G   (or -Guids) Display list of known guids.

   Flag Lookup:
   -Fl  (or -Flag) Look up flags for specified property.
           May be combined with -D and -N switches, but all flag values must be in hex.

   Error Parsing:
   -E   (or -Error) Map an error code to its name and vice versa.
           May be combined with -S and -N switches.

   Smart View Parsing:
   -P   (or -ParserType) Parser type (number). See list below for supported parsers.
   -B   (or -Binary) Input file is binary. Default is hex encoded text.

   Rules Table:
   -R   (or -Rules) Output rules table. Profile optional.

   ACL Table:
   -A   (or -Acl) Output ACL table. Profile optional.

   Contents Table:
   -C   (or -Contents) Output contents table. May be combined with -H. Profile optional.
   -H   (or -HiddenContents) Output associated contents table. May be combined with -C. Profile optional
   -Su  (or -Subject) Subject of messages to output.
   -Me  (or -MessageClass) Message class of messages to output.
   -Ms  (or -MSG) Output as .MSG instead of XML.
   -L   (or -List) List details to screen and do not output files.

   Child Folders:
   -Chi (or -ChildFolders) Display child folders of selected folder.

   MSG File Properties
   -X   (or -XML) Output properties of an MSG file as XML.

   MID/FID Lookup
   -Fi  (or -FID) Folder ID (FID) to search for.
           If -FID is specified without a FID, search/display all folders
   -Mid (or -MID) Message ID (MID) to search for.
           If -MID is specified without a MID, display all messages in folders specified by the FID parameter.

   MAPI <-> MIME Conversion:
   -Ma  (or -MAPI) Convert an EML file to MAPI format (MSG file).
   -Mi  (or -MIME) Convert an MSG file to MIME format (EML file).
   -I   (or -Input) Indicates the input file for conversion, either a MIME-formatted EML file or an MSG file.
   -O   (or -Output) Indicates the output file for the convertion.
   -Cc  (or -CCSFFlags) Indicates specific flags to pass to the converter.
           Available values (these may be OR'ed together):
              MIME -> MAPI:
                CCSF_SMTP:        0x02
                CCSF_INCLUDE_BCC: 0x20
                CCSF_USE_RTF:     0x80
              MAPI -> MIME:
                CCSF_NOHEADERS:        0x0004
                CCSF_USE_TNEF:         0x0010
                CCSF_8BITHEADERS:      0x0040
                CCSF_PLAIN_TEXT_ONLY:  0x1000
                CCSF_NO_MSGID:         0x4000
                CCSF_EMBEDDED_MESSAGE: 0x8000
   -Rf  (or -RFC822) (MAPI->MIME only) Indicates the EML should be generated in RFC822 format.
           If not present, RFC1521 is used instead.
   -W   (or -Wrap) (MAPI->MIME only) Indicates the maximum number of characters in each line in the
           generated EML. Default value is 74. A value of 0 indicates no wrapping.
   -En  (or -Encoding) (MAPI->MIME only) Indicates the encoding type to use. Supported values are:
              1 - Base64
              2 - UUENCODE
              3 - Quoted-Printable
              4 - 7bit (DEFAULT)
              5 - 8bit
   -Ad  (or -AddressBook) Pass MAPI Address Book into converter. Profile optional.
   -U   (or -Unicode) (MIME->MAPI only) The resulting MSG file should be unicode.
   -Ch  (or -Charset) (MIME->MAPI only) Character set - three required parameters:
           CodePage - common values (others supported)
              1252  - CP_USASCII      - Indicates the USASCII character set, Windows code page 1252
              1200  - CP_UNICODE      - Indicates the Unicode character set, Windows code page 1200
              50932 - CP_JAUTODETECT  - Indicates Japanese auto-detect (50932)
              50949 - CP_KAUTODETECT  - Indicates Korean auto-detect (50949)
              50221 - CP_ISO2022JPESC - Indicates the Internet character set ISO-2022-JP-ESC
              50222 - CP_ISO2022JPSIO - Indicates the Internet character set ISO-2022-JP-SIO
           CharSetType - supported values (see CHARSETTYPE)
              0 - CHARSET_BODY
              1 - CHARSET_HEADER
              2 - CHARSET_WEB
           CharSetApplyType - supported values (see CSETAPPLYTYPE)
              0 - CSET_APPLY_UNTAGGED
              1 - CSET_APPLY_ALL
              2 - CSET_APPLY_TAG_ALL

   Universal Options:
   -I   (or -Input) Input file.
   -O   (or -Output) Output file or directory.
   -F   (or -Folder) Folder to scan. Default is Inbox. See list below for supported folders.
           Folders may also be specified by path:
              "Top of Information Store\Calendar"
           Path may be preceeded by entry IDs for special folders using @ notation:
              "@PR_IPM_SUBTREE_ENTRYID\Calendar"
           MrMAPI's special folder constants may also be used:
              "@12\Calendar"
              "@1"
   -Pr  (or -Profile) Profile for MAPILogonEx.
   -M   (or -MoreProperties) More properties. Tries harder to get stream properties. May take longer.
   -No  (or -NoAddins) No Addins. Don't load any add-ins.
   -On  (or -Online) Online mode. Bypass cached mode.
   -V   (or -Verbose) Verbose. Turn on all debug output.

Smart View Parsers:
    1 Additional Ren Entry IDs Ex
    2 Appointment Recurrence Pattern
    3 Conversation Index
    4 Entry Id
    5 Entry List
    6 Extended Folder Flags
    7 Extended Rule Condition
    8 Flat Entry List
    9 Folder User Fields Stream
   10 Global Object Id
   11 Property
   12 Property Definition Stream
   13 Recipient Row Stream
   14 Recurrence Pattern
   15 Report Tag
   16 Restriction
   17 Rule Condition
   18 Search Folder Definition
   19 Security Descriptor
   20 SID
   21 Task Assigners
   22 Time Zone
   23 Time Zone Definition
   24 Web View Persistence Object Stream
   25 Nickname Cache
   26 Encode Entry ID
   27 Decode Entry ID

Folders:
    1 Calendar
    2 Contacts
    3 Journal
    4 Notes
    5 Tasks
    6 Reminders
    7 Drafts
    8 Sent Items
    9 Outbox
   10 Deleted Items
   11 Finder
   12 IPM_SUBTREE
   13 Inbox
   14 Local Freebusy
   15 Conflicts
   16 Sync Issues
   17 Local Failures
   18 Server Failures
   19 Junk E-mail

Examples:
   MrMAPI PR_DISPLAY_NAME

   MrMAPI 0x3001001e
   MrMAPI 3001001e
   MrMAPI 3001

   MrMAPI -n 12289

   MrMAPI -t PT_LONG
   MrMAPI -t 3102
   MrMAPI -t

   MrMAPI -s display
   MrMAPI -s display -t PT_LONG
   MrMAPI -t 102 -s display

   MrMAPI -d dispidReminderTime
   MrMAPI -d 0x8502
   MrMAPI -d -s reminder
   MrMAPI -d -n 34050

   MrMAPI -p 17 -i webview.txt -o parsed.txt
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん