タグ

プログラミングに関するyanokのブックマーク (42)

  • Javaと Pythonの識別子の仕様を比較する - yanok.net

    前の記事で,Pythonの識別子のUnicodeの扱いについて取り上げました。では,同じくUnicodeの様々な文字を識別子に使えるJavaとはどのように類似しているか,あるいは違っているでしょうか。 Javaの識別子の仕様 Javaは最初からUnicodeを前提に設計されており,変数名やメソッド名等の識別子にも世界の様々な文字を使えるようになっています。 識別子の仕様は言語仕様Java Language Specification 3.8. Identifiersに見えます。が,読んでみると実は,このセクションにはほとんど中身がなく,実質的にはJava APIのCharacterクラスの2つのstaticメソッド isJavaIdentifierStart(int) および isJavaIdentifierPart(int) にて,識別子に使える文字が規定されています。前者が識別子先頭,

  • Pythonの識別子における Unicode文字 - yanok.net

    プログラミング言語Pythonで,変数名のような識別子に使える文字の種類は何だったかなとウェブを検索したところ,出てきたページに,UnicodeのカテゴリMn (結合文字)が使えないという意味の説明がありました。おや,そんなことあるかな,とちょっと調べてみました。 カテゴリMnとは Unicodeは符号位置ごとに文字のカテゴリを属性として与えています。例えばラテンアルファベット大文字AであればUppercase Letter (Lu),ドル記号($)であればCurrency Symbol (Sc)などです。漢字や平仮名のように大文字小文字の区分のない文字はOther Letter (Lo)に分類されます。個々の符号位置のカテゴリはUnicode Consortiumが配布しているUnicodeData.txtに記されています。 これらのカテゴリのうち,結合文字はNonspacing Mar

  • 文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!|ハイクラス転職・求人情報サイト AMBI(アンビ)

    文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう! 文字コードには、どのような種類があり、それぞれどのような意味を持つのか、といった、文字コードの基的な概念、従来の文字コードを紹介し、現在のUnicodeの構成を概説し、プログラミングにおいて注意すべき箇所をいくつか取り上げます。 ソフトウェア開発に携わる方の多くは、何らかの形で文字コードに触れることがあるでしょう。文字や記号をコンピュータ上でデータとして扱うには、文字コードの知識が必要不可欠です。 稿では、書籍『プログラマのための文字コード技術入門』の著者である矢野啓介さんが、知っておきたい基礎知識を分かりやすく解説します。 文字コードとは? Unicode以前の文字コード Unicodeとその主な符号化形式 UTF-16 UTF-32 UTF-8 Webで文字コードを指定する仕組み

    文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • エンジニアHubにて「文字コード再入門─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!」公開 - yanok.net

    エンジニアHub」にて記事を執筆しました。「文字コード再入門 ─ Unicodeでのサロゲートペア、結合文字、正規化、書記素クラスタを理解しよう!」として公開されています。 若手エンジニア向けのWebメディアとのことで、プログラミング上の注意点にフォーカスした内容になっています。コード例にはJava, Python, Rubyを用いています。 拙著をすでにお読みの方には復習となる内容ですが、まだの方はこの機会に是非お読みいただければと思います。記事の最後に拙著『[改訂新版]プログラマのための文字コード技術入門 (WEB+DB PRESS plusシリーズ)』の版元へのリンクも設定されていますので、興味を持たれた方には書籍の方もお読みいただければ幸いです。 当記事編集担当の方には「とても品質の高い記事」とのことで感謝のお言葉をいただきました。読者のお役に立つことを願っています。

  • Unicodeエスケープまとめ: Java, Python, Ruby - yanok.net

    プログラムのソースファイルに文字を記すときに、キーボードから入力できなかったりフォントがなかったりといった理由で、Unicodeの符号位置を使って記したいことがあります。最近の言語では似た形式でそうしたUnicodeエスケープを記述できますが、微妙に違いがあります。ここではJavaPython, Rubyを比べてみます。 JavaのUnicodeエスケープ Javaではバックスラッシュ(\)とアルファベットのuに続けて4桁の16進数でUnicode符号位置を記します。 例えば、\u4e00 とすれば漢字の「一」を記したのと全く同じことになります。 JavaのUnicodeエスケープはコンパイルの初期段階で処理されるものなので、文字列リテラルの中で改行を意味する \n 等とは扱いが異なることに注意が必要です。このことは『プログラマのための文字コード技術入門』第7章に記しました。 '\u'

  • Go と Rustの文字列 - yanok.net

    Go言語における文字列はUTF-8のバイト列を保持します。また、Unicodeの1符号位置に対応するデータ型としてruneというものが用意されており、これは32ビット整数と同じものです。他の言語でいうchar型にあたります。 Rustでも類似の形です。つまり、文字列型はUTF-8のバイト列を保持し、Unicodeのスカラー値に対応する型としてcharが定義されています。(ここでわざわざ「スカラー値」といい「符号位置」としていないのはRustのドキュメントがそうしているせいで、まあほぼ同じようなものですが、サロゲート上位下位の範囲の値を含まない点だけが違います) こうなるとUTF-16の出る幕がない感じになってきます。今後、JavaやC#のように「文字列はUTF-16、char型は16ビット」というものから、こちらの方式へシフトしてくるのでしょうか。JavaなどはUnicodeのBMPにしか

  • Java 9 でようやくResourceBundle のデフォルト文字コードが UTF-8に - yanok.net

    Java 9では国際化機構で用いられるリソース文字列のファイル表現の文字コードとしてUTF-8がデフォルトで使用されることになるそうです。従来、ISO/IEC 8859-1がデフォルトであるためにUnicodeエスケープが必要となり、外部ツールで日語テキストを「\u3042」のようなエスケープ文字列に変換する煩わしさがありましたが、ようやく解消されることになります。 Java SE 9、API以外の新機能で知っておきたいこと (2017/7/20, ITproの記事) Javaには古くから国際化のための枠組みが用意されています。その最も基的な機構となる、多言語のメッセージ文字列を用意する仕組みとしては設定ファイルなどに用いるプロパティファイルという形式が用いられています。ところがこのファイルはデフォルトの文字コードがISO/IEC 8859-1という西欧向けの1バイトコードなのでした。

  • プログラマのための文字コード技術入門 | Gihyo Digital Publishing … 技術評論社の電子書籍

    WEB+DB PRESS plus プログラマのための文字コード技術入門 著者 矢野啓介 著 発売日 2014年12月10日 更新日 2014年12月10日

    プログラマのための文字コード技術入門 | Gihyo Digital Publishing … 技術評論社の電子書籍
    yanok
    yanok 2016/10/28
    「本書では,文字そのものと,文字コードの歴史を少しずつ解きほぐしながら,文字コードの原則,変遷,おもな規格の要点をはじめとした基礎知識を丁寧に解説」
  • データベースの内部動作を知る

    SQLのプログラミングは奥が深い。特にパフォーマンスの観点から、そう言えるだろう。 みなさんご承知の通り、同じ結果を出すプログラムでも、SQLの書き方次第で処理時間に何倍もの差が生じ得る。効率の悪いSQLを書いてしまう原因は、多くの場合、リレーショナルデータベースの内部動作やアプリケーションに関する理解不足である。両者をよく知った上で最適なSQLを書けるようになることは、システムエンジニアとしての重要なスキルの一つである。 特集『基礎から理解するデータベースのしくみ』では、リレーショナルデータベースの内部動作について、基的な部分を分かりやすく解説している。SQLプログラミングに役立つことはもちろん、SQLチューニングやデータベース設計のための基礎知識としても不可欠だ。 イントロダクション ブラックボックスのままでいいの? Part 1:SQL文はどのように実行されるのか SQL実行までの

    データベースの内部動作を知る
  • るびま

    『るびま』は、Ruby に関する技術記事はもちろんのこと、Rubyist へのインタビューやエッセイ、その他をお届けするウェブ雑誌です。 Rubyist Magazine について 『Rubyist Magazine』、略して『るびま』は、日 Ruby の会の有志による Rubyist の Rubyist による、Rubyist とそうでない人のためのウェブ雑誌です。 最新号 Rubyist Magazine 0058 号 バックナンバー Rubyist Magazine 0058 号 RubyKaigi 2018 直前特集号 Rubyist Magazine 0057 号 RubyKaigi 2017 直前特集号 Rubyist Magazine 0056 号 Rubyist Magazine 0055 号 Rubyist Magazine 0054 号 東京 Ruby 会議 11 直

  • RubyのPDF生成、Prawnを使って簡単かつきれいに

    Ruby(とRails)でPDFを生成する方法は(リンク)現在、数種類存在する。既存のソリューションに不満のあるGregory Brownは、DSLアプローチを使って独自のライブラリを設計することに決めた。Prawnは(リンク)また他のRubyPDFライブラリより、速度でも上を行くはずである。 インストールを完了すると、DSL風のアプローチを使って簡単にPDFを生成できる(Prawnのサンプルから例を引用)。 Prawn::Document.generate("image.pdf", :page_layout => :landscape) do text 'Welcome in Prawn!', :at => [50,525] pigs = "data/images/dice.png" image pigs, :at => [50,450], :scale => 0.5 ruport =

    RubyのPDF生成、Prawnを使って簡単かつきれいに
  • 「Java SE 6完全攻略」第81回 JAX-WS その1

    先月まで,Java SE 6のXMLに関する新機能ということで,StAXとJAXBを紹介してきました。今月からは,XMLに関連するWebサービスの機能を紹介していきます。Webサービスを扱うためのAPIであるJAX-WSです。 JAX-WS (Java API for XML-Based Web Services)は主にSOAPを使ったWebサービスを扱うためのAPIで,以前はJAX-RPC (Java API for XML Based RPC)と呼ばれていました。JAX-RPCは名前のとおり,リモートプロシジャーコールを主眼においていました。ところが,WebサービスはRPC以外に,メッセージングでやり取りをおこなうことも多くあります。 そこで,メッセージングを含めたWebサービスを扱うため,JAX-RPCではなくJAX-WSとして衣替えしたのです。そのため,JAX-WSのバージョンには

    「Java SE 6完全攻略」第81回 JAX-WS その1
  • Software Design 2008年2月号 「Emacsマスターへの道」 原稿 — ありえるえりあ

    You are here: Home → 原稿・資料 → Software Design 2008年2月号 「Emacsマスターへの道」 原稿

  • GoogleのMapReduceアルゴリズムをJavaで理解する

    GoogleMapReduceアルゴリズムをJavaで理解する:いま再注目の分散処理技術(前編)(1/2 ページ) 最近注目を浴びている分散処理技術MapReduce」の利点をサンプルからアルゴリズムレベルで理解し、昔からあるJava関連の分散処理技術を見直す特集企画(編集部) いま注目の大規模分散処理アルゴリズム 最近、大規模分散処理が注目を浴びています。特に、「MapReduce」というアルゴリズムについて目にすることが多くなりました。Googleの膨大なサーバ処理で使われているということで、ここ数年の分散処理技術の中では特に注目を浴びているようです(参考「見えるグーグル、見えないグーグル」)。MapReduceアルゴリズムを使う利点とは、いったい何なのでしょうか。なぜ、いま注目を浴びているのでしょうか。 その詳細は「MapReduce : Simplified Data Proc

    GoogleのMapReduceアルゴリズムをJavaで理解する
  • パッチの作り方と当て方はこうするもんね - 檜山正幸のキマイラ飼育記 (はてなBlog)

    パッチの作り方/当て方を毎回忘れる。だからメモしておこう、っと。単にコマンドのオプションだけでなくて、ファイル/ディレクトリ名とかカレントディレクトリをどこにするかとかで悩むから、これも約束事として決めてしまえ! 例 foo.txt 変更前: first line second linefoo.txt 変更後: first line 2nd line third line hoge/ 変更前: hoge/ +--- foo.txt hoge/ 変更後: hoge/ +--- foo.txt (変更) +--- bar.txt (新規) 単一ファイルのパッチ オリジナルファイルには接尾辞".orig"を付けておく。 パッチを作るときも当てるときも、そのファイルがあるディレクトリで作業。 パッチファイル名は、当該ファイル名.日付.diff。 パッチ作成: > diff -u foo.txt.o

    パッチの作り方と当て方はこうするもんね - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 第16回 すべてのものは関数である

    すべてのものは…である SmalltalkやRubyなど,いわゆる生粋のオブジェクト指向言語では,「すべてのものはオブジェクトである」(everything is an object)と言われることがある。JavaC++などと異なり,整数の「123」や浮動小数の「4.56」といった,基データ型の値もオブジェクトとして扱うことができるからだ(ちなみに,現在のJavaには自動ボックス化という機能があり,基データ型からオブジェクト型への変換が自動で行われる場合も多い。しかし,両者の差異が全くなくなったわけではない。例えば123.toString()のようなメソッド呼び出しはできない)。 では,オブジェクト指向言語のまねをして,関数型言語において「すべてのものは関数である」と言うことはできるだろうか? もちろん,オブジェクト指向と違って,関数型プログラミングはあくまで「数学的な(=副作用のな

    第16回 すべてのものは関数である
  • まつもと直伝 プログラミングのオキテ 第18回 プログラムを高速化する(その2):ITpro

    プログラムの高速化については連載の第13回で紹介しています。プログラム中のどの部分を高速化すべきなのか,どのように効果を測定するのか,そもそも高速化が必要なのかを考察しました。今回は実際に高速化を試みます。 今回はプログラム高速化の実践編として,ある程度の大きさの具体的なプログラムを段階的に高速化しながら,実践的なテクニックを学ぶことにしましょう。 例題はマンデルブロ集合*1の計算プログラムです(図1)。マンデルブロ集合は非常に美しい集合ですから,当はグラフィックス表示が好ましいでしょう*2。しかし,GUIを使うと,特定のGUIライブラリ(グラフィックス・ルーチン)に依存したコードが大量に必要です。今回のテーマは「高速化」ですから,直接関係のないGUIコードはできるだけ省くため,キャラクタ(英文字)で図形を表現することにしました。 1 require 'complex' 2 3 def

    まつもと直伝 プログラミングのオキテ 第18回 プログラムを高速化する(その2):ITpro
  • 第3回:C#プログラムでサロゲート・ペアの動作を検証する(後編)

    ×がつくのは,引数で文字列の一部を指定する際に,インデックスを指定するメソッドである。これらのインデックスは,charオブジェクト単位である。もし,「文字数」という単位でインデックスを指定する必要があるのなら,そのまま引数に指定して,利用してはならない。 しかし,文字列の操作全般にわたり,インデックスがchar単位であるという一貫性が保たれているので,かえって好都合な場合もある。リスト7のInsertMyData1メソッドとInsertMyData2メソッドでは,簡単な文字列の加工を行うもので,どちらも,特定の文字を検出して,その直前に文字列を追加している。前者のメソッドでは,IndexOfメソッドとSubstringメソッド,後者のメソッドではIndexOfとInsertメソッドを使用している。 リスト7:char単位のインデックスを指定して文字列の加工 // 検証用メソッド char型

    第3回:C#プログラムでサロゲート・ペアの動作を検証する(後編)
    yanok
    yanok 2008/01/17
    要するに文字列中の位置を指すインデックスを使うメソッドは駄目ということらしい。哀れなUTF-16なんか使うから…。
  • 第2回:C#プログラムでサロゲート・ペアの動作を検証する(前編)

    .NET Framework対応のアプリケーションが扱う文字列に,4バイト長で1文字を表す「サロゲート・ペア」が含まれる場合,文字列操作にどのような影響があるだろうか。.NET Frameworkの文字列操作には,ユーザー・インタフェースやファイル操作,プログラム内部での処理など様々な形態が考えられる。ここでは,基的な振舞いを見極めるために,文字列処理において最も基的で頻繁に利用されるStringクラス(Stringオブジェクト)に着目し,2回に分けて検証する。 Stringクラスには,メソッドやプロパティなどの構成メンバーが,50個くらい定義されており,それを一つひとつ詳細に解説するのはきりがない(注1)。ここでは,今後皆さんが,.NET Framework環境でサロゲート・ペアに対応したアプリケーションを構築する際にヒントや留意点を導き出せるように,Stringクラスの代表的な機能

    第2回:C#プログラムでサロゲート・ペアの動作を検証する(前編)
    yanok
    yanok 2008/01/16
    .NET Frameworkでのsurrogate pairの扱い
  • 「Java SE 6完全攻略」第56回 文字列の正規化

    世界中のさまざまな文字を符号化しているUnicodeには、さまざまな特徴があります。 その特徴の1つに結合文字があります。 たとえば、「が」は「か」を表すU+304bと濁点を表すU+3099を用いて、U+304b U+3099と表すことができるのです。 これ以外にも半濁点や、ドイツ語のウムラウトなども同じように結合文字で表すことができます。 「が」を表すU+304cと、「か」+濁点のU+304b U+3099を表示しても、外見上の違いはありません。問題は結合文字ともともとの文字を同じものとして扱えるかどうかということです。 このような結合文字はコードとしては同じではありませんが、文字の扱いとしては同じものとして扱うことができます。これを等価(Equivalance)といいます。特に結合文字などの合成列の場合、同一視することが可能です。このような文字を正規等価(Canonical Equiv

    「Java SE 6完全攻略」第56回 文字列の正規化
    yanok
    yanok 2007/12/10
    「文字列を比較する場合でも、必要に応じて正規化することを心がけるようにしましょう」そんなおっかないことを言うのか…。