IT
【SE雑談】某サイトにおける「凛として時雨」の文字化け現象の追跡と、異なる文字コード間における文字化け現象について
身近にいい「文字化け」の題材を見つけたので、
これを元ネタに「文字化け」について改めて振り返る、という目的で、
少しこれを深堀してみる(深堀るほどのネタにもならないが…)。
まあどっちかというとこれを単純に好奇心と興味本位で追求したいという思いの方が強いのだが。
(仕事に飽きただけである)
【ストレイテナー】【SE雑談】テナモバの「今日の一曲」に見る文字列ソート談議+α
ストレイテナー結成20周年を記念して開設された会員制モバイルサイト「テナモバ」。
当然のごとく速攻で入会したわけだが、まあ、それはいいとして、
この「テナモバ」では、「今日の一曲」というコーナーの中で、
日替わりでストレイテナーの楽曲を1つ紹介してくれる。
この「今日の一曲」だが、ツイッターのフォロワーさん方の報告等を見る限りでは、
「紹介される順番はアルファベット順になってんじゃないか?」という疑惑がうまれた。
少なくとも2017/8/16まではこのルールが適用されていたように思うのだが、
2017/8/17以降はこのルールが撤廃され、どうも完全ランダム性になったようだ。
(どうでもいいがこのことについて、裏でエンジニアが急きょ開発を任されたのでは…と予想している。事実だとすると同職としての思いもあり、なぜか同情してしまう)
まあ「完全ランダム性になった」というのもここ1日2日の紹介内容を見たうえでの経験的予想に過ぎず
実際裏でどんなロジックが動き、紹介される曲が選定されてるのかはわからないし、
同時に8/16までの「アルファベット順」というのも数日間の動向を見たうえでの経験的予想に過ぎないため、
要するにどこまでいっても「予想」の域を出ないのだが、
もし仮に「アルファベット順」だったとして、という仮定が成り立っていたとすると
どういう曲順で曲が紹介されていったのか?を論じてみたい。
これはどちらかというとプログラマとしてのソート順に関するロジック考察が主たる題材であり、
たまたまソートされる材料(各要素)に「ストレイテナーの楽曲」がいるだけの、
要するに仕事に飽きたことによる暇つぶしである。
まあ読み物として見ていただければいい。
【Oracle】Oracleシーケンスの採番値を一気にカウントアップする方法
Oracleシーケンスの現在値を一気に何番もカウントアップする方法のメモ
個人的に、基本INCREMENT BYが「1」の(=1ずつ採番していく)シーケンスをよく使うのでたまにこういうのが必要になるのである。
「SELECT TEST_SEQ.NEXTVAL FROM DUAL」を呼び出すたびにシーケンス値が1ずつカウントアップされていくため、
「10まで進めたい」と思ったらsqlplusとかでDBに接続した後「SELECT TEST_SEQ.NEXTVAL FROM DUAL」を10回投げればいいだけである。
ただこれが「100,000(10万)まで進めたい」だとそうはいかない。
そんなときに「一気に10万まで数字を進める」やり方である。
【Java】Twitter4jを使ってひなっちのおはっちをさーちして遊んだっち!
別にここであえて語るまでもないことだが、「ひなっち」とは、
ロックバンド「ストレイテナー」「Nothing's Carved In Stone」「Fullarmor」「Killing Boy」のベーシスト「日向秀和」氏の愛称である。
(以後、本項では「ひなっち」と記載させていただく)
ひなっちは基本毎日ツイッターで「おはっち」という挨拶を心がけており、
それに対してファン(フォロワー)のアカウントの方から「おはっち」と返信(リプ)をすると、
リプした順番に応じて(大体5位くらいまで?)ひなっちから「1番おはっちおめでとう!」というようなメッセージがもらえる。
フォロワーの方たちはひなっちのおはっちでいっちばん(一番)を取るべく
気合いをいれてツイッターでまちかまえているのだ。
これはライブ会場で先頭に赴く心情と近いものがあるのだろう(勝手な予想)。
で、この「ひなっちのおはっち」に対して、
- 一体どれほどの人が「おはっち」しているのか?
- 最短でどれほどの時間で「おはっち」しているのか?
というのを知りたくなったので、
Twitter4jというJavaのツイッターAPIを使ってひなっちのおはっちをさーちし、集計してみることにした。
本項ではそのためのTwitter4jのメモと、それをもとに作成した趣味用プログラム「ひなっちおはっちさーち」について記述する。
Twitter4j公式ページ:
http://twitter4j.org/ja/index.html
※ちなみに、Twitter4jを使うにあたっては、大前提で「APPアカウント登録」みたいな作業が必要になる。
ググれば出てくるが、https://apps.twitter.com/に行って、
指示に従って「APPアカウント登録」を行い、認証に必要な以下4つのプロパティ情報を取得のうえ、
Java実行環境と同階層に「twitter4j.properties」という名前で保存する。
oauth.consumerKey=************************* oauth.consumerSecret=************************************************** oauth.accessToken=************************************************** oauth.accessTokenSecret=*********************************************
あるいは-Dのシステムパラメータで設定するとか、
Java内でConfig設定用クラスを用いて設定するとか、
いくつか方法があるみたいではあるが、とりあえずこれで。
UTF-8の2バイト文字の存在を失念していたことによる失敗談(+サクラエディタの見え方の違和感)について
バージョンとか設定とかにもよるのかもしれないが、サクラエディタは、中途半端にブチ切れられたUTF-8の文字コードを上位サロゲートの一部と見做して文字コード表示してしまうらしい。バイナリエディタとかで中身を見ると実際のコードは違ったりする。
例えば「あ」だが、UTF-8では「E3-81-82」の3バイト。
これを無理やり「E3」「81」「82」の1バイトずつにぶった切って保存すると、
「E3」は「U+DCE3」
「81」は「U+DC81」
「82」は「U+DC82」
で表示される。
実験として「あ」を無理やり1バイトでブチきったときのスクリーンショット↓
「E3」部分
上位サロゲートはUnicodeでU+DC00~U+DFFFの範囲なので「E3」という1バイトが勝手に上位サロゲート範囲の文字の一部として扱われてしまっている。
UTF-8の1バイト文字のコード範囲は「00」~「7F」までなので、「E3」というバイトは定義外にあたるため、
エディタの都合上無理矢理サロゲート範囲に位置づけているという考えもなくはない。
そもそも「文字」としては表現できないコード値なので、テキストエディタにこれをちゃんとコード値で表現しろというのも酷な話な気がするが
最初は「なんで突然サロゲートなんか出てきてるんだ?おい?」と思って軽くビビった。
【Oracle】translate関数と個人的な活用方法(不正データ検知)
OracleのTRANSLATE関数についてメモ
【Oracle】SQL Loaderのdirect=trueオプションでKEY重複データが取り込めることに対する愚痴
SQL Loaderでdirect=trueをオプション指定すると、KEY重複してるデータが登録できてしまう。
PRIMARY KEY INDEXを張ってる場合、この結果、そのPK INDEXが破損するので、
そのPK INDEXを明示的に指定しているhint文があると、SQLエラーになる。
ひどい話である。
SQL LoaderもPKもhint文も結局はOracleの技術なはずなのに、
同社内の技術同士で首を絞めあう矛盾を作り上げてしまっている。
なんでそんな作りにしたんだOracleは…理解できない。
………というのの愚痴とメモ。
【Oracle】複数テーブルを結合したインラインビューを対象にUPDATEするときのやり方と注意点
異なるKEYのテーブル同士を結合しながら更新する場合のメモとか注意点
【Oracle】副問い合わせに条件を適用して項目を取得するやり方
SELECTやUPDATEの一部に部分的に副問い合わせ(インラインビュー)を組み込む方法について。