SlideShare uma empresa Scribd logo
1 de 123
Baixar para ler offline
A reintroduction to Ruby M17N,[object Object],NARUSE, Yui,[object Object]
序,[object Object],今日はみなさんに日本を生まれた事を後悔してもらいに来ました,[object Object],の、つもりだったのだが……,[object Object],「地球に生まれた事に」になってしまった……,[object Object]
話す事・話さない事,[object Object],話す事,[object Object],文字コード,[object Object],Ruby M17N,[object Object],話さない事,[object Object],メッセージの切り替え,[object Object],時刻・時間とか通貨とか,[object Object]
コンピュータで文字を扱う,[object Object],表示・印刷,[object Object],字形 (グリフイメージ),[object Object],字体 (グリフ),[object Object],書記素クラスタ (grapheme cluster),[object Object],コードポイント 符号化文字集合,[object Object],(コードユニット) (UTF-16/32),[object Object],バイト 文字符号化方式,[object Object],処理・格納,[object Object]
「文字コード」とは,[object Object],「文字」をコンピュータで扱う仕組みのうち、比較的低層の部分,[object Object],つまり、グリフやフォントよりちょっと下まで,[object Object],扱う文字を決め、番号を振る,[object Object],文字列を番号列、バイト列、ビット列にする,[object Object]
文字集合,[object Object],Abstract Character Repertoire,[object Object],どのような文字を扱うか,[object Object],ある文字とある文字が同じか違うかの決定,[object Object],何文字扱うか、扱えるか,[object Object],必要な文字 vs. メモリサイズ・性能,[object Object]
何を扱うか,[object Object],アラビア数字,[object Object],アルファベット大文字 ― 6bit,[object Object],アルファベット小文字 ― 7bit,[object Object],カタカナ ― 8bit,[object Object],ひらがな,[object Object],漢字,[object Object],絵文字,[object Object],など ― 16bit,[object Object],などなどなど ― 21bit,[object Object]
文字の同定,[object Object],ある文字とある文字が等しいかどうかの決定,[object Object],包摂規準 (その文字の射程範囲の決定),[object Object],何が一文字か e.g. リガチャ「ffi」,[object Object],典拠の確保―いい加減だと幽霊文字が混じったり、重複したり,[object Object],e.g. 妛𡚴 「あけんばら」で検索,[object Object]
字形の違い,[object Object],色々な「フォント差」「書体差」,[object Object],aaaaaaaaa,[object Object],「g」「g」メガネg「l」「l」ループL,[object Object],言 言言,[object Object]
字体の違い,[object Object],JISでは同じだがUnicodeでは別,[object Object],「高」と「髙」 「吉」と「𠮷」,[object Object],JISでもUnicodeでも同じコードポイント,[object Object]
符号化文字集合,[object Object],CCS / Coded Character Set,[object Object],文字集合を構成する「文字」、一つ一つに番号を振ったもの,[object Object],一般にはこの番号を「コードポイント」,[object Object],Unicode の場合,[object Object],「Unicode Scalar Value」,[object Object],「あ」->U+3042 (Unicode),[object Object],JIS X 0208,[object Object],「ビット組合せ」や「区点コード」,[object Object],「あ」->04区02点 (JIS X 0208),[object Object]
符号化文字集合の例,[object Object],ASCII 英数記号,[object Object],ISO/IEC 8859-1 アクセント付き文字,[object Object],JIS X 0201 いわゆる半角カナ,[object Object],JIS X 0208 第一・第二水準漢字など,[object Object],JIS X 0212 補助漢字など,[object Object],JIS X 0213 第三・第四水準漢字など,[object Object],Unicode いろいろ,[object Object]
JIS X 0208,[object Object],http://www.kanji.zinbun.kyoto-u.ac.jp/~yasuoka/kanjibukuro/japan.html,[object Object]
文字符号化方式,[object Object],CES, Character Encoding Scheme,[object Object],符号化文字集合の番号をバイト列に変換する方式,[object Object],Shift_JIS,[object Object],「あ」 -> 04区02点 -> "82¥xA0",[object Object],「い」 -> 04区04点 -> "82A2",[object Object],UTF-8,[object Object],「あ」 -> U+3042 -> "E38182",[object Object],「い」 -> U+3044 -> "E38184",[object Object]
エンコーディング,[object Object],encoding (W3C),[object Object],charset (IETF),[object Object],あるバイトデータを解釈するには、「文字符号化方式」と「符号化文字集合」を共に特定する必要,[object Object],Shift_JIS,[object Object],"82¥xA0" -> 04区02点 -> 「あ」,[object Object],UTF-8,[object Object],"E38182" -> U+3042 -> 「あ」,[object Object]
IANA Charset,[object Object],各々のエンコーディングに名前を付けて登録管理,[object Object],インターネット上に流すデータは登録されてる必要,[object Object],一部のエンコーディングは実態と乖離も,[object Object],http://www.iana.org/assignments/character-sets,[object Object],ISO-2022-JP,[object Object],EUC-JP,[object Object],Shift_JIS,[object Object],Windows-31J,[object Object]
用語の整理,[object Object],charset,[object Object],Character setが由来と思われるため、「文字集合」の意味に感じられるが、用法としてはencodingと同じ,[object Object],文字コード,[object Object],文字集合,[object Object],encoding,[object Object],ある文字のコードポイント,[object Object]
Unicode用語集,[object Object],UCS-2は文字集合ではなくencoding,[object Object],ISO/IEC 10646の定義13.1 Two-octet BMP form (UCS-2),[object Object],This coded representation form permits the use of characters from the Basic Multilingual Plane with each character represented by two octets.,[object Object],Unicodeの定義,[object Object],“UCS-2. ISO/IEC 10646 encoding form: Universal Character Set coded in 2 octets, limited to the Basic Multilingual Plane.”,[object Object],http://www.unicode.org/glossary/#UCS_2,[object Object]
History of I18N,[object Object],Internationalization, 国際化,[object Object],I .{18} N,[object Object],I18N,[object Object],S12N (Scherpenhuizenさんが元祖),[object Object],http://blog.miraclelinux.com/yume/2007/01/i18n_8bc0.html,[object Object]
略語解説,[object Object],L10N (Localization) (地域化),[object Object],それぞれの地域・言語に適したようにすること,[object Object],ある言語に対応すること,[object Object],cf. nls (national language support),[object Object],I18N (Internationalization) (国際化),[object Object],地域化しやすいように、あらかじめソフトウェア側を抽象化しておくこと,[object Object],言語を切り替えて使用できるようにすること,[object Object],M17N (Multilingualization) (多言語化),[object Object],複数の言語などで利用するためにローカライズ,[object Object],同時に複数の言語を扱えるように (Ruby),[object Object]
国際化というからには,[object Object],元は国際対応じゃない,[object Object],最初はどうだったのか?,[object Object]
始まりはASCII,[object Object],1970年頃,[object Object],ASCII以前から文字コードはあった,[object Object],ASCIIは電信の遺産を継承している,[object Object],まぁ情報通信的にはASCIIから始まる,[object Object],ていうかISO/IEC 646でしょ,[object Object],EBCDICのことを忘れないでください,[object Object]
http://www.ecma-international.org/publications/standards/Ecma-006.htm,[object Object],ECMA-6 IRV(≒ ASCII),[object Object]
ASCIIに含まれる文字種,[object Object],アラビア数字,[object Object],アルファベット大文字,[object Object],アルファベット小文字,[object Object],記号,[object Object],全94文字,[object Object]
文字が足りない,[object Object],アクセント付きアルファベット(ISO 8859シリーズ) 577文字,[object Object],いわゆる半角カタカナ(JIS X 0201) 56+7文字,[object Object],漢字など(JIS X 0208) 6355+524文字,[object Object]
ASCIIを拡張しよう,[object Object],JIS X 0201 (ASCII 亜種・8bit化),[object Object],ISO-8859-1 (8bit化),[object Object],ISO-2022-JP (エスケープシーケンス),[object Object],SJIS / EUC / UTF-8 (マルチバイト),[object Object],UTF-16 (16bit化),[object Object],UTF-32 (32bit化),[object Object]
拡張したよ!,[object Object],ASCII-8BIT, UTF-8, US-ASCII, Big5, Big5-HKSCS, Big5-UAO, CP949, Emacs-Mule, EUC-JP, EUC-KR, EUC-TW, GB18030, GBK, ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16, KOI8-R, KOI8-U, Shift_JIS, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, Windows-1251, IBM437, IBM737, IBM775, CP850, IBM852, CP852, IBM855, CP855, IBM857, IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM869, Windows-1258, GB1988, macCentEuro, macCroatian, macCyrillic, macGreek, macIceland, macRoman, macRomania, macThai, macTurkish, macUkraine, stateless-ISO-2022-JP, eucJP-ms, CP51932, GB2312, GB12345, ISO-2022-JP, ISO-2022-JP-2, CP50221, Windows-1252, Windows-1250, Windows-1256, Windows-1253, Windows-1255, Windows-1254, TIS-620, Windows-874, Windows-1257, Windows-31J, MacJapanese, UTF-7, UTF8-MAC,[object Object],Ruby 1.9.2 サポート予定分,[object Object]
どうしてこうなった?,[object Object],制約の中でベストを尽くそうとするため,[object Object],メモリ容量,[object Object],処理速度,[object Object],プログラミングの複雑さ,[object Object],必要な文字の違い,[object Object],ベンダ間の調整不足,[object Object],結局、ほっとけば文字コードは増える,[object Object],->統一への努力,[object Object]
どうしよう……?,[object Object],敵を知るしかない,[object Object],知った上で個別撃破,[object Object],たいていの罠は「歴史的経緯」,[object Object],歴史を知る事が重要,[object Object]
ISO 646―分裂の始まり,[object Object],ISO/IEC 646,[object Object],ASCIIのISOバージョン,[object Object],一部の文字の置き換えを認めている,[object Object],択一 #/£ $/¤,[object Object],任意 [ \ ] ^ { | } ~,[object Object]
ISO 646の各国ごとの違い,[object Object],http://ja.wikipedia.org/wiki/ISO_646,[object Object],http://en.wikipedia.org/wiki/ISO/IEC_646,[object Object]
ISO 646 文字の意味論の違い,[object Object],赤字は文字合成を許すもの。例: <A BS “>-> Ä,[object Object]
まだまだ足りない,[object Object],アクセント付きアルファベット(ISO 8859シリーズ) 577字,[object Object],いわゆる半角カタカナ(JIS X 0201) 56+7字,[object Object],漢字など(JIS X 0208) 6355+524字,[object Object]
ISO/IEC 2022,[object Object],Character Code Structure andExtension Techniques,[object Object],ISO 646を拡張した文字コードの作り方を定める,[object Object],具体例,[object Object],ISO 8859シリーズ (8bit化),[object Object],ISO-2022-JP (エスケープシーケンス),[object Object],EUC系 (多バイト),[object Object],シフトJISやUTF-8などは違う,[object Object]
http://www.ecma-international.org/publications/standards/Ecma-035.htm,[object Object],ECMA-35(≒ ISO/IEC 2022),[object Object]
ISO/IEC 2022の構造,[object Object],20,[object Object],|,[object Object],7F,[object Object],A0,[object Object],|,[object Object],FF,[object Object],A,[object Object],ESC ( BA,[object Object],漢,[object Object],ESC $ B 4A,[object Object],8E (SS2),[object Object],JIS X 0208,[object Object],US-ASCII,[object Object],EUC-JP G1,[object Object],EUC-JP G2,[object Object],JIS X 0212,[object Object],EUC-JP G3,[object Object],JIS X 0201,[object Object],ローマ字,[object Object],JIS X 0201,[object Object],片仮名,[object Object],JIS X 0213,[object Object]
ISO 2022のバイト列,[object Object],どの文字集合を使うか指定,[object Object],バッファへの指示 (stateful),[object Object],バッファからの呼び出し,[object Object],シングルシフト,[object Object],ロッキングシフト(stateful),[object Object],その文字集合のどの文字を使うか指定,[object Object]
ISO/IEC 2022系の欠点,[object Object],状態を持つ事 (持たないものもあるが),[object Object],文字コードがどんどん増える,[object Object],文字コードごとに別のコードが必要になる,[object Object],規格が複雑になってしまった,[object Object]
Unicode,[object Object],1986年頃からXeroxとAppleが始める,[object Object],1988年ISOにUnicode 88を持ち込む,[object Object],1991年1.0 (漢字なし), 1992年1.0.1,[object Object],1993年1.1でISOと同期,[object Object],1996年2.0, UTF-8とUTF-16登場,[object Object],2002年3.2でJIS X 0213対応,[object Object],2010年末6.0で絵文字対応?,[object Object]
Design Of Unicode,[object Object],文字コードから地域・言語を分離,[object Object],1つのUnicode文字列には複数の言語を混ぜられない,[object Object],フラットな空間に全ての文字を入れる,[object Object],16bit -> 32bit,[object Object],UTF-16の制限から1,114,112文字種,[object Object],用字系が同じならば文字統合,[object Object]
漢字統合,[object Object],plaintext+encodingからフォントを決定できない,[object Object]
一見大きな問題に見えるが,[object Object],トルコ語では”i”.upcase->“İ”,[object Object],ドイツ語では”ss”.upcase->“ß”,[object Object],実はASCIIの範囲も言語の指定が必要,[object Object]
There Ain't No Such ThingAs Plain Text.,[object Object],Joel Spolsky,[object Object],http://www.joelonsoftware.com/articles/Unicode.html,[object Object],TEXT needs,[object Object],Encoding and Language,[object Object]
Legacy Encoding,[object Object],Unicode以前の文字コードたち,[object Object],Unicode時代のプログラムで動かすには変換して取り込む必要,[object Object],変換表をどうするか?,[object Object],人によって変換表が異なると問題,[object Object]
ご存じですか? CP932,[object Object],他の話がさっぱりでも「CP932の存在」だけは知って帰って頂きたい,[object Object],Windows Codepage 932,[object Object],IBM Codepage 932とは微妙に違う,[object Object],Windows版シフトJIS,[object Object],正式名称: Windows-31J,[object Object],JIS規格由来のShift_JISと変換表が異なる,[object Object],CP932を用いるといくつかの問題を回避可能,[object Object]
円記号問題「,[object Object],問題の始まり,[object Object],ISO 646系の0x5C,[object Object],JIS X 0201 円記号 ¥,[object Object],ASCII バックスラッシュ \,[object Object]
ISO 646の各国ごとの違い,[object Object],http://ja.wikipedia.org/wiki/ISO_646,[object Object],http://en.wikipedia.org/wiki/ISO/IEC_646,[object Object]
どこで問題になるか?,[object Object],まずは表示上の問題,[object Object],「円記号」のつもりが「バックスラッシュ」で表示,[object Object],JIS X 0201データをASCII端末で表示,[object Object],「バックスラッシュ」 のつもりが「円記号」で表示,[object Object],ASCIIのデータをJIS X 0201端末で表示,[object Object],取り違えると「文字化け」する,[object Object]
制御コードとの衝突,[object Object],バックスラッシュは制御記号扱い,[object Object],C言語のエスケープ記号,[object Object],MS-DOSのパス区切り文字,[object Object],同じ0x5Cの円記号も同じ扱いに,[object Object],[object Object], 「えんいー」,[object Object]
シフトJISと円記号問題,[object Object],「表」はシフトJISでは 95 5C,[object Object],シフトJISを理解しないプログラムで問題,[object Object],% cat yen.rb,[object Object],puts "表",[object Object],% ruby1.8 ./yen.rb,[object Object],./yen.rb:1: unterminated string 	meets end of file,[object Object]
理由,[object Object],puts "表",[object Object],puts "955C",[object Object],p u t s " 95 ",[object Object],puts "95quot;,[object Object],引用符を閉じていない扱いに!,[object Object],unterminated string meets end of file,[object Object]
回避方法,[object Object],Ruby 1.8の場合 -Ks,[object Object],Ruby 1.9の場合 magic comment,[object Object],% cat yen.rb,[object Object],#coding:Windows-31J,[object Object],puts "表",[object Object],% ruby1.8 -Ks ./yen.rb,[object Object],表,[object Object]
Unicodeと円記号,[object Object],シフトJISの0x5CをUnicodeに変換,[object Object],Shift_JISの0x5Cは本来JIS X 0201,[object Object],JIS X 0201扱いなら、U+00A5,[object Object],ASCII扱いなら、U+005C,[object Object],EUC-JPの0x5CはASCIIのはず,[object Object]
それぞれの変換の問題,[object Object],ASCII: 0x5CがU+005Cになると、,[object Object],表示がバックスラッシュになる?,[object Object],JIS X 0201: 0x5CがU+00A5になると、,[object Object],パス区切りではなくなる,[object Object],ソースコードのエスケープじゃなくなる,[object Object]
Windowsでの解決,[object Object],0x5CはU+005Cに変換する (ASCII風),[object Object],日本語用フォントでは、U+005Cのグリフを「円記号」にする,[object Object],5C = U+005C : REVERSE SOLIDUS (YEN SIGN),[object Object],http://msdn.microsoft.com/en-us/goglobal/cc305152.aspx,[object Object],韓国のウォンでも同様の問題,[object Object],5C = U+005C : REVERSE SOLIDUS (WON SIGN),[object Object],http://msdn.microsoft.com/en-us/goglobal/cc305154.aspx,[object Object]
波ダッシュ問題「~」,[object Object],JIS X 0208: U+301C(WAVE DASH),[object Object],CP932: U+FF5E(FULLWIDTH TILDE),[object Object],問題,[object Object],WindowsはU+301CをシフトJISに戻せない,[object Object],CP932の変換テーブルにないから,[object Object],XP添付のフォントでU+301Cを表示しようとすると、誤ったグリフになる「〜」(Vista以降では修正済み),[object Object]
Shift_JISとCP932の違い,[object Object]
機種依存文字,[object Object],マイクロソフト標準キャラクタセット,[object Object],NEC特殊文字,[object Object],①Ⅰ㌶など,[object Object],IBM拡張文字,[object Object],ⅰ¦﨑髙など,[object Object],NEC選定IBM拡張文字,[object Object]
CP932風別エンコーディング,[object Object],CP51932,[object Object],Windows版日本語EUC,[object Object],CP932にある機種依存文字がある,[object Object],JIS X 0212がない,[object Object],Web上の「EUC-JP」はこれかも,[object Object],CP50221,[object Object],Windows版ISO-2022-JP,[object Object],いわゆる半角カナがある,[object Object],CP932にある機種依存文字がある,[object Object]
シフトJIS関連の名前,[object Object],「シフトJIS」 マイクロソフトウェア・アソシエイツが名付けた。総称として用いられる,[object Object],「Shift-JIS」「Shift JIS」 「シフトJIS」の英語表記,[object Object],「MS漢字コード」 開発者の山下による命名,[object Object],「SJIS」 Unix方面での名前,[object Object],「Shift_JIS」 IANA Charsetでの名前,[object Object],「シフト符号化表現」 JIS X 0208:1997 附属書1,[object Object],「Shift_JISX0213符号化表現」 JIS X 0213:2000 付属書1,[object Object],「Shift_JIS-2004符号化表現」 JIS X 0213:2004付属書1,[object Object],「CP932 (Windows Codepage 932)」 Microsoft実装,[object Object],「Windows-31J」 CP932のIANA Charsetでの名前,[object Object],「IBM CP932」 MS CP932とは別物,[object Object],「IBM943」 MS CP932とおおむね同じ、JIS X 0201,[object Object],「IBM943C」 MS CP932と同じ、ASCII,[object Object]
日本語EUC関連の名前,[object Object],「日本語EUC (圧縮形式)」 情報交換用のEUC、普通はこれ,[object Object],「日本語EUC (固定長形式)」 System V での内部表現,[object Object],「eucJP」 UI-OSF日本語環境実装規約で定義,[object Object],「EUC-JP」 IANA Charsetでの名前,[object Object],「UJIS」 ΣOSでの名前,[object Object],「CP51932」 Internet Explorerでの日本語EUC実装,[object Object],「eucJP-ms」 TOG/JVC CDE/Motif 技術検討 WGが定義,[object Object],「EUC-JISX0213」 JIS X 0213:2000 付属書3,[object Object],「EUC-JP-2004」 JIS X 0213:2004 付属書3,[object Object]
処理系の課題,[object Object],内部エンコーディングを何にするか,[object Object],様々なencodingの入力の扱い,[object Object],地域・言語ごとに異なる規則,[object Object]
内部コードはどうするか,[object Object],UCS正規化,[object Object],内部では特定の1つに変換する,[object Object],CSI (Code Set Independent),[object Object],それぞれの文字コードに対応する,[object Object]
UCS正規化,[object Object],Universal Character Set,[object Object],Java, Perlなどほとんどが採用,[object Object],内部コードを統一,[object Object],入出力で変換が必要,[object Object],入力はそのコードに変換,[object Object],内部コードで処理,[object Object],出力時に再び変換,[object Object]
CSI方式,[object Object],それぞれのencodingに対応,[object Object],入出力を変換しない,[object Object],入力そのまま取り込む,[object Object],そのまま処理,[object Object],そのまま出力,[object Object]
Java,[object Object],開発時期: 1990~1995,[object Object],内部コード: UTF-16 (サロゲートペアは1.5から),[object Object],文字型: char (コードポイントは int),[object Object],文字列型: java.lang.String,[object Object],グリフ列: CharSequence, BreakIterator等,[object Object],「Javaにおける Unicode補助文字のサポート」,[object Object],Windows NT も同時期,[object Object]
.NET Framework,[object Object],2000年リリース,[object Object],内部コード: UTF-16,[object Object],文字型: Char構造体,[object Object],(コードポイントは Int32),[object Object],文字列型: System.String,[object Object],グリフ列: System.Globalization.StringInfo,[object Object],http://msdn.microsoft.com/ja-jp/library/system.globalization.stringinfo.aspx,[object Object],http://msdn.microsoft.com/ja-jp/library/system.globalization.cultureinfo.aspx,[object Object]
Perl 5.6,[object Object],2000年リリース,[object Object],内部コード: UTF-8,[object Object],文字型: なし,[object Object],文字列型: バイト列 / 文字列 (utf8 フラグ),[object Object],Perlは「型」の概念が薄い,[object Object],http://github.com/github/perl/blob/blead/utf8.c,[object Object]
Python 1.6,[object Object],2000年リリース,[object Object],内部UTF-16,[object Object],文字型: char (UTF-16 code unit; 16bit),[object Object],文字列型: String (UTF-16),[object Object],http://www.egenix.com/www2002/python/unicode-proposal.txt,[object Object]
Ruby1.8,[object Object],内部コード: ASCII/SJIS/EUC/UTF-8,[object Object],文字型: Fixnum(8bit),[object Object],文字列型: String,[object Object],$KCODEでプロセスの文字コードを指定,[object Object],「文字」のサポートはほとんどない,[object Object]
Ruby 1.9,[object Object],2007年1.9.0リリース,[object Object],2009年1.9.1リリース,[object Object],内部コード: N/A (CSI),[object Object],文字: 1文字String,[object Object],文字列型: String,[object Object],グリフ列: なし,[object Object]
Ruby 1.9の特徴,[object Object],Stringが文字単位になった,[object Object],バイト操作と文字操作を区別する必要,[object Object],CSI方式,[object Object],特定の内部エンコーディングがない,[object Object],Stringそれぞれがencodingを持つ,[object Object],正規表現エンジンの刷新,[object Object],鬼車ベースに変更,[object Object]
文字志向なString,[object Object],"あいう".length-> 3,[object Object],"あいうえお"[0]-> "あ",[object Object],"あい".gsub(/あ/,"か")-> "かい",[object Object],"abc".tr("abc","あいう")-> "あいう",[object Object]
String#each_*,[object Object],String#each_byte,[object Object],String#each_codepoint,[object Object],String#each_char,[object Object],String#each_line,[object Object],String#eachは削除された,[object Object]
1文字String,[object Object],専用の文字型は無い,[object Object],文字は1文字Stringで表す,[object Object],?a -> "a",[object Object],"abc"[0] -> "a",[object Object],"abc"[0] == ?a は1.9でも成り立つ,[object Object]
「文字」型に必要なもの,[object Object],コードポイント, Encoding, (言語),[object Object],Stringは両方持っている,[object Object],Rubyは大クラス主義,[object Object],Stringを使えばよい,[object Object]
Ruby 1.9のRegexp,[object Object],/(.)/ =~ "あ" -> 0,[object Object],$1 -> "あ",[object Object],// =~ "あ" -> nil,[object Object],1.9.1-p376 以降、1.9.2,[object Object],以下はUnicode系,[object Object],/({Alphabetic})/ =~ "あ",[object Object],$1 -> "あ",[object Object],/({Ideographic})/ =~ "漢",[object Object],$1 -> "漢",[object Object]
1.9のStringに必要なこと,[object Object],適切にencodingが設定されていること,[object Object],理由,[object Object],Stringのencodingを見て処理するから,[object Object],設定方法,[object Object],Magic comment(リテラル),[object Object],IO のオプション (入出力),[object Object],String#force_encoding(強制指定),[object Object]
encodingが誤っている時,[object Object],invalid multibyte char (US-ASCII),[object Object],Magic comment忘れ,[object Object],Encoding::CompatibilityError,[object Object],異なったencodingのStringを混ぜた時,[object Object],文字列をバイナリ扱いのままにしている時,[object Object],ArgumentError: invalid byte sequence,[object Object],単純な指定ミス,[object Object],壊れた入力,[object Object]
Magic Comment,[object Object],リテラルのエンコーディングを指定,[object Object],String, Regexp,[object Object],デフォルトはUS-ASCII,[object Object],Magic CommentがないとソースにASCII以外を書くことはできない,[object Object],#coding:utf-8,[object Object],#!/usr/local/bin/ruby#coding:utf-8,[object Object],# -*- coding: UTF-8 -*-,[object Object]
ERB用 Magic Comment,[object Object],ERBでもMagic Commentが必要,[object Object],<%# coding: UTF-8 %>,[object Object]
IOとEncoding,[object Object],入出力のencodingを指定する,[object Object],外部リソースのencodingを指定,[object Object],open("foo.txt","r:UTF-8"),[object Object],未指定ならEncoding.default_external,[object Object]
ネットワークからの入力,[object Object],Socket, Net::HTTPなど,[object Object],現在はバイナリAPI扱い,[object Object],->文字列の場合は自分でEncodingを設定する必要,[object Object]
Encodingの強制指定,[object Object],String#force_encoding(enc),[object Object],任意のencodingの文字列をバイナリから作りたい時,[object Object],str = "E38182"str.force_encoding("UTF-8")str #=> "あ",[object Object],外部から来たデータに設定する時,[object Object],IOなら外部エンコーディングを設定するべき,[object Object],socketやnet系のライブラリで必要,[object Object]
$KCODE is obsolete,[object Object],$KCODEは内部コード指定のため使われた,[object Object],Ruby1.9ではシステム全体の内部コードは、,[object Object],決定不可能なため、廃止。,[object Object],$KCODEを参照しているスクリプトは注意,[object Object]
結局encodingとは,[object Object],Stringにとっての「型」,[object Object],型が違えばエラー,[object Object],型同士で互換性があれば、自動変換されることも->ASCII互換でのasciionly,[object Object]
Encodingの3分類,[object Object],ASCII互換,[object Object],ASCII非互換,[object Object],ダミー,[object Object]
ASCII互換,[object Object],フルサポート,[object Object],Rubyスクリプトのソースエンコーディングとして使用可能,[object Object],UTF-8, Shift_JIS, EUC-JP, ...,[object Object]
Major Encodings,[object Object],US-ASCII,[object Object],ASCII-8BIT,[object Object],UTF-8,[object Object]
日本語用,[object Object],Shift_JIS,[object Object],EUC-JP,[object Object]
Other Encodings,[object Object],Big5, Big5-UAO, EUC-KR, EUC-TW, GBK,,[object Object],ISO-8859-X, KOI8-R, KOI8-U, etc,[object Object]
Windows機種依存,[object Object],Windows-31J,[object Object],CP51932,[object Object],eucJP-ms,[object Object],Windows-125X,[object Object]
ASCII-8BIT,[object Object],ASCII互換バイト列,[object Object],バイナリだけどASCII互換,[object Object],ASCII互換の恩恵を得るため,[object Object]
ASCII Only,[object Object],特別扱い,[object Object],ASCII互換エンコーディング,[object Object],内容が7bit,[object Object],"abcde".ascii_only?->true,[object Object],"abcde" + "あいうえお",[object Object],ASCII互換エンコーディングなら、両者のエンコーディングによらず成功,[object Object]
ASCII非互換,[object Object],限定サポート,[object Object],ソースコードには使えない,[object Object],UTF-{16,32}{BE,LE},[object Object]
UTF-16 & UTF-32,[object Object],UTF-16BE, UTF-16LE,[object Object],UTF-32BE, UTF-32LE,[object Object],しかし、UTF-16 や UTF-32 には非対応,[object Object],BOM対応が困難なため,[object Object]
Dummy encoding,[object Object],Ruby は名前を知っているだけ,[object Object],「文字」のサポートはしない,[object Object],for stateful encodings,[object Object],Encoding#dummy?-> true,[object Object],ISO-2022-JP, UTF-7,[object Object]
Encoding,[object Object],「エンコーディング」を司るクラス,[object Object],CSIではエンコーディングが内部処理でも使われるから活躍,[object Object],でも、たいていエンコーディング名を表す文字列でよい,[object Object]
Encodingの取得,[object Object],enc = Encoding.find(“UTF-8”)=> #<Encoding:UTF-8>,[object Object],Encoding.find(“external”)デフォルト外部エンコーディング,[object Object],Encoding.find(“internal”)デフォルト内部エンコーディング,[object Object],Encoding.find(“filesystem”)ファイルシステムエンコーディング,[object Object],Encoding::UTF_8定数も定義されている,[object Object]
Encodingの一覧,[object Object],Encoding.listオブジェクトの配列,[object Object],Encoding.aliases別名 => 本名 のHash,[object Object],Encoding.namesEncoding.findの引数になるStringの配列,[object Object]
Encodingの情報,[object Object],enc.name=> “UTF-8”,[object Object],enc.names=> ["UTF-8", "CP65001", "locale", "external", "filesystem"],[object Object],enc.dummy?ダミーエンコーディングかどうか,[object Object],enc.ascii_compatible?ASCII互換かどうか,[object Object]
エンコーディング変換,[object Object],nkf,[object Object],kconv,[object Object],iconv,[object Object],uconv,[object Object],String#encode,[object Object],Encoding::Converter,[object Object]
nkf,[object Object],Network Kanji Filter,[object Object],歴史ある変換コマンド,[object Object],使うなら --ic, --ocオプションを使う事,[object Object]
kconv,[object Object],nkfのラッパー,[object Object],String#tosjisなどと簡単,[object Object],歴史的経緯による意図しない挙動,[object Object],勝手にMIMEデコード,[object Object],いわゆる半角カナが全角に,[object Object],もはやオススメしない,[object Object]
iconv,[object Object],POSIX由来のiconv(3)のラッパー,[object Object],挙動が環境依存,[object Object],glibc/GNU libiconv/Citrus/…,[object Object],1.9ではあえて使う必要はないはず,[object Object]
uconv,[object Object],Unicode 変換用拡張モジュール,[object Object],0.5.3から1.9.1に対応しているが、互換性確保用に止めるべきであろう,[object Object],http://www.yoshidam.net/Ruby_ja.html,[object Object]
String#encode,[object Object],Ruby 1.9独自のtranscode,[object Object],String#encode(to, from, opt),[object Object],たいていの用途はこれでいけるはず,[object Object]
Encoding::Converter,[object Object],transcodeのエンジン,[object Object],変換を一時停止・再開したい時,[object Object],常人は使わないはずだが、何かの間違いで必要になるかもしれない,[object Object]
Don't forget…,[object Object],不必要な変換は避ける,[object Object],open()等の引数に指定,[object Object]
Ruby M17N の難しさ,[object Object],テストがしづらい,[object Object],US-ASCII,[object Object],ASCI-8BIT,[object Object],UTF-8 (ASCII Compatible),[object Object],UTF-16 (ASCII Incompatible),[object Object],ISO-2022-JP (dummy encoding),[object Object]
SJISとWindows-31J,[object Object],Windows環境,[object Object],Magic commentなどでSJISを指定,[object Object],Encoding::CompatibilityError,[object Object],入力はWindows-31Jだから,[object Object],->Windows-31J指定が正しい,[object Object],あなたがSJISだと思っているのは、実はWindows-31Jです,[object Object]
ASCII-8BIT,[object Object],Ruby M17N未対応のライブラリを使った時,[object Object],ネットワーク系やDB系など,[object Object],明示的にエンコーディングを指定,[object Object],String#force_encoding(enc),[object Object]
ASCII非互換の正規表現,[object Object],ASCII非互換エンコーディングな正規表現はリテラルで書けない,[object Object],UTF-16LEの正規表現リテラルは書けない,[object Object],Regexp.newを使う,[object Object],Regexp.new(	"あ".encode("UTF-16LE")),[object Object]
Open problems,[object Object],ケータイ絵文字,[object Object],WindowsのUnicodeパス,[object Object],結合文字,[object Object],異体字セレクタ/IVS,[object Object],Stringと言語,[object Object],Stateful encoding,[object Object],Unicode用ユーティリティ,[object Object]
ケータイ絵文字,[object Object],mrknさんや設楽さんたちが作業中,[object Object],1.9.2に入るかも,[object Object]
WindowsのUnicodeパス,[object Object],一部対応その他非対応,[object Object],方針としては、現在WindowsのA系APIを叩いているものを、W系APIを使うように変える,[object Object],そこら中で踏むのでリソース不足,[object Object],いじれる方が居たらパッチください,[object Object],Win32-unicode-testブランチ,[object Object]
結合文字,[object Object],「が」を「か」+「゛」で表す,[object Object],複数のコードポイントを1文字扱いする必要,[object Object],Stringの「文字」をこれにする変更が入った事はあるが巻き戻された [ruby-dev:36375],[object Object],「文字」の単位がUnicodeのバージョンに依存,[object Object],エスケープなどに影響,[object Object],JavaのBreakIteratorっぽいものが必要?,[object Object],検討中,[object Object]
異体字セレクタ/IVS,[object Object],Ideographic Variation Sequence,[object Object],結合文字同様、複数のコードポイントを1文字扱いする必要,[object Object]
Stringと言語,[object Object],日本語と中国語を同時に扱いたい,[object Object],日本語と中国語を1つのStringに入れたい,[object Object],可能かは文字コードによります,[object Object],UTF-8ではできません,[object Object],Unicodeは言語を別に与えないといけない,[object Object],Stringにencodingとlangを持たせる必要,[object Object],現状ユースケース不足,[object Object]
Stateful encoding,[object Object],現状ダミーエンコーディング,[object Object],改善予定無し,[object Object]
Unicodeユーティリティ,[object Object],文字幅,[object Object],Unicode正規化,[object Object],Unicode大文字小文字化,[object Object],APIをどうするか,[object Object],そもそもどこにいれるのか,[object Object]
String#sort,[object Object],デフォルトでは文字コード順,[object Object],シフトJISや日本語EUCの系統と、Unicode系のエンコーディングで並び順が変わる,[object Object],現状ではsortにblock引数を指定する,[object Object],RubyにはCollationとかは添付されていない,[object Object],自分で比較ルーチンを用意して渡す,[object Object]
Feedbackを,[object Object],よいAPIを設計するには、ユースケースの収集が大事なのでfeedbackが重要,[object Object],失敗談等はruby-listへ,[object Object],バグ・提案はruby-devへ,[object Object],オレはようやくのぼりはじめたばかりだからなこの果てしなく遠いM17Nをよ…,[object Object],未実装,[object Object]

Mais conteúdo relacionado

Destaque

全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題tsudaa
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
Rubyのエンコーディング
RubyのエンコーディングRubyのエンコーディング
RubyのエンコーディングMasahiro Tomita
 
tofu - COOKPAD's image system
tofu - COOKPAD's image systemtofu - COOKPAD's image system
tofu - COOKPAD's image systemIssei Naruta
 
Japanese Rubyists you have not met yet
Japanese Rubyists you have not met yetJapanese Rubyists you have not met yet
Japanese Rubyists you have not met yetmasayoshi takahashi
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHiroshi SHIBATA
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案nagachika t
 
CloudTrail でログとれ〜る
CloudTrail でログとれ〜るCloudTrail でログとれ〜る
CloudTrail でログとれ〜るHokuto Hoshi
 
Inspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuningnagachika t
 
Ruby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of RubyRuby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of RubyYuki Sonoda
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のりRecruit Lifestyle Co., Ltd.
 

Destaque (13)

全角チルダ問題
全角チルダ問題全角チルダ問題
全角チルダ問題
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
Rubyのエンコーディング
RubyのエンコーディングRubyのエンコーディング
Rubyのエンコーディング
 
131026 kansai-emacs
131026 kansai-emacs131026 kansai-emacs
131026 kansai-emacs
 
tofu - COOKPAD's image system
tofu - COOKPAD's image systemtofu - COOKPAD's image system
tofu - COOKPAD's image system
 
Japanese Rubyists you have not met yet
Japanese Rubyists you have not met yetJapanese Rubyists you have not met yet
Japanese Rubyists you have not met yet
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
 
Practical ngx_mruby
Practical ngx_mrubyPractical ngx_mruby
Practical ngx_mruby
 
Ruby Kaja のご提案
Ruby Kaja のご提案Ruby Kaja のご提案
Ruby Kaja のご提案
 
CloudTrail でログとれ〜る
CloudTrail でログとれ〜るCloudTrail でログとれ〜る
CloudTrail でログとれ〜る
 
Inspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter TuningInspection of CloudML Hyper Parameter Tuning
Inspection of CloudML Hyper Parameter Tuning
 
Ruby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of RubyRuby 1.9.3 and development of Ruby
Ruby 1.9.3 and development of Ruby
 
事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり事業成長にコミットするエンジニア組織への道のり
事業成長にコミットするエンジニア組織への道のり
 

Semelhante a A Reintroduction To Ruby M17 N

UnicodeによるXSSと SQLインジェクションの可能性
UnicodeによるXSSとSQLインジェクションの可能性UnicodeによるXSSとSQLインジェクションの可能性
UnicodeによるXSSと SQLインジェクションの可能性Hiroshi Tokumaru
 
私のSql -My Sql
私のSql -My Sql私のSql -My Sql
私のSql -My Sqlstiq 2e
 
アセンブラ漢文
アセンブラ漢文アセンブラ漢文
アセンブラ漢文kozossakai
 
It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1Kenichi Takeuchi
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsmganeko
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合Ryusuke Kajiyama
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 

Semelhante a A Reintroduction To Ruby M17 N (12)

UnicodeによるXSSと SQLインジェクションの可能性
UnicodeによるXSSとSQLインジェクションの可能性UnicodeによるXSSとSQLインジェクションの可能性
UnicodeによるXSSと SQLインジェクションの可能性
 
文字化け
文字化け文字化け
文字化け
 
RISC-V User level ISA
RISC-V User level ISARISC-V User level ISA
RISC-V User level ISA
 
私のSql -My Sql
私のSql -My Sql私のSql -My Sql
私のSql -My Sql
 
RISC-Vの可能性
RISC-Vの可能性RISC-Vの可能性
RISC-Vの可能性
 
RISC-Vの可能性
RISC-Vの可能性RISC-Vの可能性
RISC-Vの可能性
 
アセンブラ漢文
アセンブラ漢文アセンブラ漢文
アセンブラ漢文
 
It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1It講座 パソコン basic編 part 1
It講座 パソコン basic編 part 1
 
PFI Seminar 2010/02/18
PFI Seminar 2010/02/18PFI Seminar 2010/02/18
PFI Seminar 2010/02/18
 
Build Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.jsBuild Node.js-WASM/WASI Tiny compiler with Node.js
Build Node.js-WASM/WASI Tiny compiler with Node.js
 
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
[db tech showcase 2017 Tokyo] D31 - MySQL 8.0の日本語キャラクタ・セットと文字照合
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 

Último

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 

Último (12)

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 

A Reintroduction To Ruby M17 N

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.