SQL*LoaderでUnicodeのテキストファイルを取り込む

INFILEがUnicodeUTF-16UTF-8)なら

CHARACTERSETを使う。
loaderのcontrolファイルにCHARACTERSET文字コードを指定すればOK

OPTIONS(LOAD=100,SKIP=1,ERRORS=-1,ROWS=10)
LOAD DATA
INFILE 'data.tsv'
BADFILE 'data.bad'
TRUNCATE
INTO TABLE SUMTMP
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
  ITEM,
  QTY
)

↓こんな感じで

OPTIONS(LOAD=100,SKIP=1,ERRORS=-1,ROWS=10)
LOAD DATA
CHARACTERSET UTF16
INFILE 'data.tsv'
BADFILE 'data.bad'
TRUNCATE
INTO TABLE SUMTMP
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
  ITEM,
  QTY
)

なおloaderでのUnicodeキャラクタ・セットはUTF-16UTF16UTF-8UTF8とハイフンなしで指定するとか、少しややこしいかも。

SQL*Loader制御ファイル・リファレンス

Unicodeのタブ区切りファイル(TSV)

UnicodeのTSVで見事にハマりました。

SJISとかのタブ区切り文字指定は、TERMINATED BY X'09'と書けばOK

が・・・

Unicodeで同じようにやってみるとエラーになる。

Unicodeでのタブのコードは先頭にゼロが2つ必要になるので、X'09'ではなくてTERMINATED BY X'0009' と書くとうまくいく。

PowerShellでテキストファイル(CSV)を集計してみる

簡単だけど、面倒くさい

「このテキストファイルを〇〇別に集計して」∑(゚д゚lll)

こんな依頼や作業も少なくない。
本当はもう少し下っ端にやって欲しいところだけど、人手不足でそうも言ってられず。

一回きりであれば、Excelで取り込んでピボット集計してハイ終わりなんだけど、
ファイル数が多かったり、同じファイルでも何度もやっているととても面倒くさい!

それこそ、元ファイルサイズが 数十MB とか、いちいちExcelでやってられない。
パソコン固まるし。

世の中そんな悩みを抱えるシステム屋さんも多いはず(あれ?オレだけ?)

まぁツール探せばあるかもしれないが、今回はPowerShellでのやり方。
Windows7以降なら基本入っているので、ツールインストール出来ない環境などでは使えるかな。

固定長ファイルを集計してCSV出力する

まずはヘッダーがないテキストファイルで想定。
indata.txt

A         1    
B         2    
A         3    
B         4    
C         5    

先にざっくり流れを書くと、 固定長ファイル→CSV形式→グルーピング→集計→CSVファイル化 を1コマンドでやってしまおうということ。

1. 固定長を無理やりCSV形式に変換(ConvertFrom-Csv

PS F:\test> cat ./indata.txt | %{ $_.substring(0, 10).trim() + "`t" + $_.substring(10, 5).trim() } | ConvertFrom-Csv -header item, qty -Delimiter "`t"
item        qty  
----        ---
A           1
B           2
A           3
B           4
C           5

前半cat ./indata.txt | %{ $_.substring(0, 10).trim() + "`t" + $_.substring(10, 5).trim() }は固定長データをタブ文字区切りのデータ部に変換します。

  • ExcelCSVファイルを開くと、先頭ゼロや、空白が自動で削られる事があるので、"=`"" + $_.substring(0, 10).trim() + "`""みたいにしておくと、いい感じにExcelで使える。

後半の| ConvertFrom-Csv -header item, qty -Delimiter "`t"では、タブ文字区切りしたデータ部にヘッダー名を付与してCSV形式に変換かけてます。

2. 項目別にデータをグループ化(Group-Object)

グループコマンドレットで先ほど指定したヘッダー名itemでグルーピングしてみると。。。

PS F:\test> cat ./indata.txt | %{ $_.substring(0, 10).trim() + "`t" + $_.substring(10, 5).trim() } | ConvertFrom-Csv -header item, qty -Delimiter "`t" | group item

Count Name                      Group
----- ----                      -----
    2 A                         {@{item=A; qty=1}, @{item=A; qty=3}}
    2 B                         {@{item=B; qty=2}, @{item=B; qty=4}}
    1 C                         {@{item=C; qty=5}}

おぉ~いい感じでitemでグルーピングしている。
後は合計部を作りこめばOK

3. 項目別に合計する(Select-Object、Measure-Object)

おもむろに下記コマンドを実行します。

PS F:\test> cat ./indata.txt | %{ $_.substring(0, 10).trim() + "`t" + $_.substring(10, 5).trim() } | ConvertFrom-Csv -header item, qty -Delimiter "`t" | group item | select @{Name="sumitem";Expression={$_.Name}}, @{Name="sumqty";Expression={($_.group | measure -sum qty).sum}}

sumitem    sumqty
-------    ------
A               4
B               6
C               5

見事に項目別に集計されてます。

4. CSVに出力する(Export-Csv

ま、最後は簡単でExport-CSV

PS F:\test> cat ./indata.txt | %{ $_.substring(0, 10).trim() + "`t" + $_.substring(10, 5).trim() } | ConvertFrom-Csv -header item, qty -Delimiter "`t" | group item | select @{Name="sumitem";Expression={$_.Name}}, @{Name="sumqty";Expression={($_.group | measure -sum qty).sum}} | Export-Csv -NoTypeInformation outdata.csv

中身を確認するとちゃんとCSV形式で出力されてます。

PS F:\test> cat .\outdata.csv
"sumitem","sumqty"
"A","4"
"B","6"
"C","5"

補足

項目別に合計するのところでぶっ飛ばしましたがselect @{Name="sumitem";Expression={$_.Name}}, @{Name="sumqty";Expression={($_.group | measure -sum qty).sum}}でやっていることはそれほど難しくないです。

  1. @{Name="sumitem";Expression={$_.Name}}
    最終出力するヘッダー名が Name になるのが気に食わなかったので、別名にしているだけ。

  2. @{Name="sumqty";Expression={($_.group | measure -sum qty).sum}}
    グループ内のqty値を集計しているだけです。
    もし集計したい項目がqty1, qty2などの場合は、@{Name="sumqty1";Expression={($_.group | measure -sum qty1).sum}}, @{Name="sumqty2";Expression={($_.group | measure -sum qty2).sum}}になるんでしょうか(適当

SQL DeveloperでSQL Serverにつなげる

あるシステムを炎上導入しているのだが、現行システムはSQL Serverで動いていた。

今回はSQL ServerOracleなのだが、使い慣れたSQL DeveloperからSQL Serverに繋げれるようなので、データ調査などで使えるじゃんとのことでやり方。

JDBCを使って

ざっくり説明すると

  1. JDBCjTDS - SQL Server and Sybase JDBC driver - Browse Files at SourceForge.net)をダウンロードし、解凍。
  2. SQL Developerをおもむろに立ち上げ、プリファレンスを開く
  3. データベース>サードパーティ的な画面を表示する
  4. エントリー追加で「1.」のJDBC(jar)を指定する
  5. 最後に接続先を追加するときに増えたSQL Serverのタブに設定を入力すれば完了

もちろん入力するSQLSQL Serverのものなので、なかなか手ごわい。

Oracle SQL Developer Migrations はじめの一歩

他にも

OneNote使ってる?

もういくつ寝るとサーバー更新〜

この時期の一大イベントといえば、 サーバー更新!
忘年会でもクリスマスでも正月でもなく サーバー更新!

この流れは何とかならないのだろうか(´・ω・`)

なお、今回はタイにあるサーバーの更新だったので、出張の危険もあったがなんとかリモート対応で回避!
その代わり、タイのサーバーをインドから移行作業して、日本から支援というよく分からない状況になった。

話を戻して「OneNote

俺以外で使ってる人を見たことないOneNoteちゃん
職場の人にも「OneNote使ってる人初めて見た」と言われる始末。

OneNoteちゃん可哀想すぎw
でも意外と使えるやつなんですヨ

ナゼOneNoteを使うのか

付箋ソフト(メモ箋人*1)の時期もありました。

テキストファイル(サクラエディタ)の時期もありました。

ResophNotes - Quick Notes on Windowsの時期もありました。

しかし、どれもイマイチ。
イマイチな理由は、

  • 色が使えない
    まぁ、カラフルにしたいわけではないけど、少し色が欲しい時がある。

  • 画像が付けれない
    「ぬぉー!言葉で説明しにくい!」なんて場合もある。

  • 表が書きにくい
    Markdown的になら書けるけど面倒くさい。

|header1  |header2  |header3  |  
|---------|---------|---------|  
|text1    |text2    |text3    |

Excelでいいのでは?

WordやExcelならなんでもできるが、メモするのにExcelとか立ちあげたくない。

それなら必要なときだけExcelでいいじゃんとか思うかもだけど、やっぱりメモはメモとして1つのソフトに統一したい。.txtや.xlsxとか・・・

あと、分類管理、横断的な検索機能など入れるとやっぱりExcelでは〜

取り敢えずOneNoteなら

f:id:izana1018:20141207003953p:plain

上記画像はOneNoteで作ったもの。

適度な機能

メモに必要な最低限の機能に絞ってあるので、高度なことはできないけど ちょっとしたメモ から 議事録や補足資料 程度ならイケる!

許されている会社なら、スマホと連携とかもできるので、個人メモ〜仕事メモまで同期して使える。

ただし、、、

冒頭にも書いたように周りで誰も使ってないので「さっきの補足資料後で送って〜」とか言われると焦る(笑
でもPDFやWordにも変換して保存できる機能があるので、それほど困ることもあまりないかな。

不安要素も

このままユーザ数が増えないなら、将来OneNote廃止となる可能性も。
まぁ所詮メモだしなんとかなるでしょ。

*1:メモ箋人は提供元の「株式会社リューシス」業務終了に伴い、開発ストップ。知らなかった

プログラマー御用達「Rictyフォント」

f:id:izana1018:20140516015655p:plain

プログラミング用フォント

誰もが一度は探すであろう見やすいフォント

その中でもソースコードが見やすいと噂なのがプログラミング用フォント Ricty

導入がちょっと面倒

ライセンス(再配布禁止)の関係でフォントそのものが配布されてない為、自分で生成するしかない。

手順通りに進めればいいだけだが、ちょっと面倒くさい

  1. FontForge のインストール

    sudo apt-get install fontforge

  2. Inconsolata のインストール

    Inconsolataフォントをダウンロードして~/.fonts/に投入

    http://levien.com/type/myfonts/Inconsolata.otf

  3. Migu 1M のインストール

    Migu 1Mフォントをダウンロード&解凍して~/.fonts/に投入

    http://sourceforge.jp/projects/mix-mplus-ipa/downloads/59022/migu-1m-20130617.zip/

  4. Rictyジェネレータをインストール

    Ricty生成スクリプトをダウンロードして、適当なフォルダに展開

    https://github.com/yascentur/Ricty/archive/3.2.3.zip

  5. Ricty の生成

    ./ricty_generator.sh autoコマンド実行

  6. Ricty のインストール

    出来上がったRicty-Regular.ttfRicty-Bold.ttfRictyDiscord-Regular.ttfRictyDiscord-Bold.ttfルを~/.fonts/に投げ込めばOK

出来上がったフォントはWindowsでも使えるみたいだけど、そのままでは見難い(´;ω;`)ウッ…

どうしてもって人は「ricty フォントサイズ windows7」とかでググってください

結局

WindowsならMS ゴシックの9ptに落ち着く

GPSロガー+Google Earth

GPSは別に持つ

最近のスマホGPS精度がなかなか高くなってきている。

しかし、GPSを使うとバッテリー消費が激しいので、あっという間に文鎮化

  • 長時間のGPS記録を取りたい
  • 精度高いGPSが欲しい
  • GPS付きのデジカメを持っていない!

そんな人は是非GPSロガーをお勧め

値段はピンキリだけど、1万出せばかなりいいものが買える

僕が4~5年使っているのはTripMate850というGPSロガー(販売終了しているっぽいね)

長時間のGPS記録

環境によるかもだが、エネループで10時間程度の記録ができる。

精度高いGPS

GPSロガーの設定次第だが、1秒ごとや、5mごとなど細かい記録方式を選べるのはもちろん、非常に精度が高い。

写真に位置情報を埋め込む

最近のスマホでは、写真に位置情報を埋め込むことが出来るが、普通のデジカメなんかはまだまだGPS搭載機種は多くないので「この写真の場所どこだっけ?」とかなる。

GPSの記録情報には様々な情報が記録されていて、時間もその一つ。
GPS衛星から時刻情報も受信しているらしいので、かなり正確)

GPSロガーを買うと付属ソフトでGPS記録データと写真を位置記録時間と撮影時間で一括紐付けできるものがついてくると思うが、よく使うのはNikonのサイトからダウンロードできるViewNX 2(フリーソフトとして提供されている?)

NMEAと呼ばれるGPS記録形式に対応しているので助かります。

Google Earthと連携

Google Earthに取り込んでみる

f:id:izana1018:20140531200320p:plain

通った道が丸わかり!だけでなく、高度や時速、距離などもろもろも表示できる。

取込み方法は至って簡単で、NMEA形式のファイルをドラッグ&ドロップするだけ。
拡張子.nmeaにしか対応してないようで、.nmaとかは拡張子を変えればOK

今日は31kmも走っていたのか!

スマホAndroid)と連動

実はTripMate850だが、Bluetoothを搭載している。

つまり、GPSロガーの位置情報を別の端末で使えちゃいます。

  1. スマホの開発者向けオプションにある「擬似ロケーションを許可」にチェックを入れる

※コロプラなど一部の位置情報アプリでは、擬似ロケーション非対応のものもあるので注意。

  1. GooglePlayからBluetooth GPSアプリをスマホにインストール

  2. Bluetooth GPSを起動し、GoogleマップなどのGPS使用アプリを起動させる

以上!

日焼け止め大切!

f:id:izana1018:20140531190504p:plain

QX75

友達の自転車に興味を持って&健康診断を控えているためFELTのQX75を通販でポチッと購入!w

で、馬鹿でかいダンボールが到着しQX75をゲットしたんだけど、
反射板以外の保安部品が付いてなかったんで、
ベルとライト、ついでに空気入れもAmazonで購入w (通販大好きすぎでしょ)

それらもろもろが今日の午前中に届いたので、準備万端!レッツゴー!

初心者は自転車屋で体にあったサイズなどアドバイスもらいましょう

海よりGoogleマップが素晴らしい

今日の天気は、はやくも真夏日だったこともあり、海にお出かけ。

取り敢えず、デジ一、財布、スマホ、モバブーをなんとかカメラバッグやらに詰め込んで出発!

道中はスマホGoogleマップで徒歩ルートナビを聞きかながら目的地に到着。
そんなにスピードも出てなかったからか、音声案内のタイミングが素晴らしい。

ただ、Googleマップの案内音声を変えている*1せいで、ちょっと恥ずかしかったが

イヤホン装着

今回は。と言うか今後もだけどイヤホン付けずに走った。

愛知県では「イヤホン付けてもいいけど、警察の呼びかけに反応しないとアウト」だそうです。

以下愛知県警察/県民意見提出制度(パブリック・コメント制度)による意見募集より抜粋 f:id:izana1018:20140531194931p:plain

声ちいさい警官だとアウトなのか!?

それにしても、日焼けヤバイw
やはり日焼け止め大切!

腕時計の痕くっきり&ヒリヒリしてきたー!