タイトルって難しい。

学力も体力もない人間の雑記帳。

エスケープシーケンスによるちょっとおもしろい出力

コンソールでなにか文字を出力する際に、通常のやり方だとどんどん改行されていきます。
例えば、下記のPythonのコードを実行したとしましょう。

# -*- coding: utf-8 -*-
for i in range(1,101):
    print("{}".format(i))

出力結果はただひたすら、1 2 3 … 100と改行されながら出力されます。

1
2
…
99
100

改行しないという指定とかもありますが、できればストップウォッチみたいな感じでカウントアップしたい…と考えていたところ、意外にも簡単なやり方でできるそうです。
それは、エスケープシーケンスの"\r"を加えること。ね、簡単でしょう?
たとえば、さきほどのコードをこのように改良します。

# -*- coding: utf-8 -*-
import time
for i in range(1,101):
    print("\r{}".format(i),end = "")
    time.sleep(0.5)
print()

1〜100までうまくカウントアップされました。
このエスケープシーケンスですが、「キャリッジリターン」と呼ばれるもので、よくエディタにある"CR"のことだそうです。

このやり方を応用すると、なにかアルゴリズムを出力した際にずらずら〜っとならずに済むかもしれませんね(自己満足ですが)。

イベントの出欠を管理してなおかつ、出席者リストをはいてくれるVBA

みんながあまりにもVBAディスるので、かわいそうになってきました。
VBAは なかまに なりたそうに こちらをみている!」
てことで、ちょっと必要になったので書きました。

なにができるの?

イベントの出欠を入力した結果をまとめてくれるやつです。
Sheet1のA列に名前、B列に○ or ×を記入した状態で、名前を取得してSheet2にまとめてはきだしてくれるだけです。
はっきりいって、他の言語でもできると思います。ただ、VBAでやってみたかっただけ。
今回は例として、とあるサークルのパーティを題材として…。
実在するところかどうかは触れません。

Sub Shukeisan()
' イベント出欠集計VBA
' Author: cancolle(@wonder_zone)

j = 1

'テンプレ
'    i = 1 // 属性を取得
'    Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1) // 属性
'    j = j + 1
'    For i = 2 To 10 // 各属性の行番号ごとに設定
'    If Worksheets("Sheet1").Cells(i, 2) = "○" Then // セルに○があったら
'        Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1) // 記帳
'        j = j + 1 // 記帳用変数を1コマ進める
'    End If
'    Next

'B4
    i = 1
    Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
    j = j + 1
    For i = 2 To 10
    If Worksheets("Sheet1").Cells(i, 2) = "○" Then
        Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
        j = j + 1
    End If
    Next

'B3
    i = 11
    Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
    j = j + 1
    For i = 12 To 22
    If Worksheets("Sheet1").Cells(i, 2) = "○" Then
        Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
        j = j + 1
    End If
    Next

'B2
    i = 23
    Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
    j = j + 1
    For i = 24 To 30
    If Worksheets("Sheet1").Cells(i, 2) = "○" Then
        Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
        j = j + 1
    End If
    Next

'B1
    i = 31
    Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
    j = j + 1
    For i = 32 To 40
    If Worksheets("Sheet1").Cells(i, 2) = "○" Then
        Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
        j = j + 1
    End If
    Next
End Sub

本当は、普通にプログラミングするときと同じく、関数とかで定義したり(できるのかな?)した方がいいとは思うのですが、なんかこの程度ならいいやって思ったので、つらつらと書き連ねました。
Enjoy VBA Life!

追記(Mon Jan 26 2015 20:08:32 GMT+0900(JST) )

Sub Shukeisan_Kai()
' イベント出欠集計VBA
' Author: cancolle(@wonder_zone)

Worksheets("Sheet1").Cells(8, 10) = 1

'B4
Call Shukei(2, 10)

'B3
Call Shukei(12, 22)

'B2
Call Shukei(24, 30)

'B1
Call Shukei(32, 40)

Worksheets("Sheet1").Cells(8, 10) = ""

End Sub

Private Sub Shukei(St As Integer, Fin As Integer)
    i = St - 1
    j = Worksheets("Sheet1").Cells(8, 10)
    Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
    j = j + 1
    For i = St To Fin
    If Worksheets("Sheet1").Cells(i, 2) = "○" Then
        Worksheets("Sheet2").Cells(j, 1) = Worksheets("Sheet1").Cells(i, 1)
        j = j + 1
    End If
    Next
    Worksheets("Sheet1").Cells(8, 10) = j
End Sub

これで、もっとすっきりします。

kindle for PCとTシャツと私

以前、こんな記事を書きました。

まさかこの記事から約2週間後に、デスクトップ用のアプリが登場するとは…。
Kindle for PC日本語版が公開 ~Windowsタブレットでも数百万冊の読書が可能に - PC Watch
もうなにがなんだかヨクワカラナイヨ。

いや俺、スタバで動かすマカーですが(ドヤァアアアアアア 向けのお話

Mac向けのやつは、AppStoreにあることはあるのですが、まだ日本語版に対応していないのです。
でも、EasyWineとか各種Wineを使うとできちゃったりします。Windows用のを使うことになりますが…。
フォントが××とかいわない。

前回同様アレを調べる

ま、どこにDLした書籍が保存されてるかくらい気になりますよね。気になるんですよ。
で、あっさり見つかったわけですよ。

C:\Users\(ユーザー名)\Documents\My Kindle Content

この中にいっぱいある拡張子がazwのファイルだそうです。

これであなたも快適なKindleライフを!

追記

マカーも救済されました。
「Kindle for Mac」日本語版がリリース ~320万冊以上のKindleコンテンツをMacで - PC Watch

第45回R勉強会@東京(Tokyo.R)にてLTとしてお話してきました #TokyoR

平成27年(2015年)1月17日に開催された、第45回R勉強会@東京のLT枠でお話してきました。

TokyoRとは

TokyoRとは、@yokkunsさん主催のR言語に関する勉強会です。分析界隈では有名かつご長寿な勉強会であり、今回で45回目を迎えました。(どなたかの発言より拝借)

発表内容

タイトルは「分析で好みの娘をぶっこぬく」というものです。
行ったことは、私の主観でキャラクターの好き嫌いを分けた 教師データを予め作成した上で、SVMで学習させ、詳細をそこまで知らない作品のデータに適用しました。
性能評価は今後にまかせておくとして、SVM自体をまともに使ったのが今回はじめてということも有り、私にとっては新鮮味がありました。
実はこの題材について、当初は判別分析でやろうと考えていたのですが、マサカリが飛んでくることを恐れてSVMに変えたという経緯がありました。

後日談

@teramonagiさんがDeep Learningで実装してくださりました。本当に有難うございます。
私の環境(MacOS X10.10.1 Yosemite)で実行した結果、OKが9人、NGが5人という結果になりました。やはり異なるものなんですね。

他の方の発表

久々に導入セッションからいました。
渋谷駅でそばを食べていたせいで遅刻しかけて、渋谷から神泉までの1駅間で井の頭線を使ったことはここだけの話です。
導入セッション対象者である初心者の方は割と少なかったのかな?という気がしました。atndとかみていますと、初心者のかたも多そうな気がしたのですが…。
Rによる回帰分析とカーネル多変量解析では、線形回帰分析・非線形回帰分析について採り上げていました。カーネル多変量解析自体はあまり知らなかったのでなかなかいい勉強になりました。
また、Rのパッケージ配布形態が移り変わりつつあるという話もなかなか興味深かったです。たしかに、devtools経由で落とすことも最近は多かった気がします。
前処理の話は、なかなか辛さが感じられました。
多くの方がデータ分析における時間のほとんどが前処理と仰っていますが、その辛さは共有できないものであると思います。
そういえば、私自身も研究で分析を行ったのですが、分析そのものより事前準備が辛かったですね…。本シリーズの今後に期待です。
型情報でスピードアップという項目では、いかに高速に処理をさせるかという観点ですごく有意義でした。Rcppを使う場面で一度試してみたいと思います。

LTはなかなかカオスでした。真面目な話と面白い話で混ざり合っていましたね。

懇親会

まさかの同じ大学の方があんなにいるとは思ってもいませんでした…。
@u_riboさんとR以外の言語の話をしていたのですが、9割ぐらい某S批判をしてしまいました。
また、ある業界の今後について話してらっしゃる方々が中々面白かったです。

会場とか

会場を提供してくださったVOYAGEグループ様、本当にありがとうございました。とっても素敵な会場でした!

はじめての鉄腕Atom

Atomとは

Atomは、GitHub社が開発したテキストエディタである。 ChromiumとNode.jsをベースとしたAtom Shellで動作するようにつくられており、JavaScript、>HTML、CSSをインタフェースとして用いたデスクトップアプリケーションである。

Mac OS XおよびWindows向けにバイナリ配布されており、LinuxFreeBSDでもビルドできる。

WikiPediaより)

要はGitHubが作ったテキストエディタであります。

見た目

Sublime Textで愛用しているSeti UIがあったので導入してみました。

f:id:cancolle:20150112170313p:plain

ちなみにSublime Textはこんな感じ(まだUnregisteredなのはツッコまないでください)。

f:id:cancolle:20150112170316p:plain

せっかくSeti UIを導入したので、愛用しているSublime Textと並べてみました。

f:id:cancolle:20150112170317p:plain

うん、同じだ。

肝心の使い勝手

Sublime TextにあったPackage Controlっぽいものもあります。
Atomは標準で搭載されており、見た目もかなり見やすいです。

f:id:cancolle:20150112170314p:plain

一方、Sublime Text。

f:id:cancolle:20150112170315p:plain

で、肝心の使用感。私が使う程度だと、キーとかそのあたりはあまり変わりません。

問題は、タスクマネージャー上でのメモリ使用率。
Atom:145.27MB
Sublime Text:16.92MB
いくらなんでもこれは…。
Chromiumをベースとしているので仕方ないとはいえ、なんだか悲しいものです。

無料でここまでできるという点で、非常に優れていると考えてます。今後に期待しています。

Kindle Cloud ReaderとYシャツと私

こんな話があります。

アマゾン、PC ブラウザで読めるKindle Cloud Reader 提供開始。漫画・雑誌と洋書のみ - Engadget Japanese

この記事では、漫画、雑誌、洋書のみと記載してありますが、以前購入していた蟻本は普通に読めました。

Kindle Cloud Readerのすごいところは、ローカル上に保存することでオフライン環境下でも読むことができるという点にあります。
ただ、当然ながらDRMで保護されているとはいえ、気になるものです。え?なにがって?そりゃ保存先とか保存先とか保存先とか。

というわけで、探してみました。

割とすぐにみつかった

これから書くことは、Firefox34.0.5、Windows7 64bitでの話です。Macについては、いつか追記します。
キャッシュで保存しているってことはたぶんこれだろうと最初にたどり着いたのがこちら。

C:\Users\(ユーザー名)\AppData\Local\Mozilla\Firefox\Profiles\(profile folder名)\OfflineCache

でも、ほんとは、違うフォルダでして…。とりあえずその場にあったsqliteのファイルをバイナリエディタで読んだりしたけど見つかりませんでした。
とりあえず、容量も気にしながら(保存されたデータは50MBを超えているのがヒントかなと思ったため)、探すことに。
そしたらありましたよ。

C:\Users\(ユーザー名)\AppData\Roaming\Mozilla\Firefox\Profiles\(profile folder名)\storage\persistent\https+++read.amazon.co.jp

81.0MBの「(文字の羅列).sqlite」が見つかりました。ビンゴですね。
まあ、DRMで保護されているのはわかっていました。でもやっぱり見てみたい。
ってことで、無意味ながらも再びバイナリエディタで覗くことに。

ま、こうなりますよね。

追記 (Fri Jan 9 2015 00:30:57 GMT+0900(JST) )

Mac向けのパスです。

Users/(ユーザー名)/Library/Application Support/Firefox/Profiles/(文字の羅列).default/storage/persistent/https+++read.amazon.co.jp

ちなみに…

C:\Users\(ユーザー名)\AppData\

に近いディレクトリは

Users/(ユーザー名)/Library/

だそうです。

あけましておめでとうございます

あけましておめでとうございます。今年もよろしくお願いします。
さて、今回は最近気になっていた話を少し…。

つい最近なのですが、Android Bazaar and Conference 2014 Winterに行ってきました。その中で、「みんな気になるFirefox OSの今を話します」というセッションがあり、それをきいてFirefox OSに興味を持ってしまったという話です。
ちなみに、私は今現在iPhone5sXperia Acro HDを使っています。

Firefox OSって?

簡単に言えば、Mozillaが開発したスマートフォンタブレット向けOSです。
Chrome OSなどと同じく、WebアプリをメインとしたOSです。

なにがすごいん?

あくまで、私の主観ですが、開発に対するイメージが変わったのではないかと思います。
iOSだとSwiftAndroidだとJavaWindows PhoneならC#でゴリゴリ書いて開発って感じなんでしょうたぶん。
Firefox OSHTML5CSSJavaScriptで開発できます。普段フロントエンドのバイトをしている自分からすると世の中が変わったなぁ&え、これで作れんの?!って感じです。

で、実際どうよ?

まだ端末持ってません。わかりません。ほしいです。
先月にauからこんなのが発売されました。
また、さっき調べてたらAndroidFirefox OSWindows Phone互換のこんなのがあるみたいです。
もしかしたら、今後もシェアトップを取るというよりは、デュアルブート環境とかで生き残っていきそうな雰囲気がしますね。

あ、そういえば、Firefox OSAdvent Calendarもあったんですね。なかなか面白そうな記事が…。