sublime textの設定とか
windowsでsublime text 2の設定のメモとか
Package Controlのインストール
パッケージをインストールする設定を行います。
[View] -> [Show Console]でコンソール画面を表示してから以下を入力
import urllib2,os; pf='Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler( ))); open( os.path.join( ipp, pf), 'wb' ).write( urllib2.urlopen( 'http://sublime.wbond.net/' +pf.replace( ' ','%20' )).read()); print( 'Please restart Sublime Text to finish installation')
そして再起動。
[Preference] -> [Package Control]が表示されてればOKです。
Sublime Textの設定
[Preference] -> [Setting - User]を選択してPreferences.sublime_settingsを開いてSublime Textの設定をしましょう。
自分はこんな感じにとりあえず設定。
{ // フォントサイズ "font_size": 12, // 行間 "line_padding_top": 5, // タブサイズ "tab_size": 2, // 空白の削除 "trim_trailing_white_space_on_save": true, // タブやスペースなどの不可視文字を表示 "draw_white_space": "all", // 現在の選択行をハイライト表示 "highlight_line": true, // 自動改行 "word_wrap": true }
フォントサイズとか設定できます。
パッケージのインストール
必要そうなパッケージのインストール。
[Shift] + [Ctrl] + Pを開いて"Install"と入力し、パッケージ名を入力することでインストールできます。
今回インストールしたのはこちら。
- HTML5
- Javascript Console
- jQuery
- CSS Snippets
- SublimeLinter
とりあえずこんなもん。
おわりに
とりあえず最低限の設定。
もしこのパッケージはインストールしたほうがいいよ!!ってのがあったら教えてください。
SQLiteを使ってみた
家計簿作るためにいろいろ試行錯誤してたけど、全く分からないところが多くあったのでその勉強。
とりあえずAndroidで作ろうと思っています。
UIは取り合えず後回しにして、データの永続化について調べました。
まずはデータベースを保持するためにデータベースの扱いについて学んだことをメモ。
SQLite
そもそもSQLiteってなんぞって話です。
SQLiteはオープンソースのデータベースで、クライアントサーバ方式をとらず、軽量という特徴があります。また、SQLの機能をサポートしているみたいです。
クライアントサーバ方式をとらないので、サーバ名やポート番号を指定する必要はないです。
アプリケーションごとにデータベースを持たせて、アプリケーション側のプログラミングでデータベース操作の制限を行うようです。
また、サポートされているデータ型が少ないです。
NULL, INTEGER, REAL, TEXT, BLOBだけのようですね。
制限はされているものの、あまりデータ型を意識しないで使用することができそうです。
SQLiteを使ってDB操作
ソースコードと一緒に解説します。
まずはデータベースを作成・削除するためのHelperクラスを作成します。
HelperクラスはSQLiteOpenHelperクラスを継承します。
DatabaseHelper.java
package com.example.app; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper{ private static final String DATABASE_NAME = "db_data"; private static final int DATABASE_VERSION = 1; // テーブル作成SQL private static final String CREATE_SCHEDULE_TABLE_SQL = "create table data" + "(id integer primary key autoincrement," + "memo text not null, " + "priority integer default 1)"; // テーブル削除SQL private static final String DROP_SCHEDULE_TABLE_SQL = "drop table if exists data"; public DatabaseHelper(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); } // テーブル作成 // 必須 @Override public void onCreate(SQLiteDatabase db){ db.execSQL(CREATE_SCHEDULE_TABLE_SQL); } // テーブルの再作成 // 必須 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ db.execSQL(DROP_SCHEDULE_TABLE_SQL); onCreate(db); } }
テーブル作成用のSQL文を定義して、onCreateメソッドでテーブルを作成する処理を実行しています。
onUpgradeメソッドでは古いテーブルを削除し、新しいテーブルを作成しています。
続いて、データベースへのデータ挿入、更新操作を行うためのDAOクラスを定義します。
DAOクラスはデザインパターンの一種DAOパターンと同じ考えで、データアクセスをビジネスロジックから排除し、データアクセスオブジェクトとしてカプセル化することが目的です。
DatabaseDao.java
package com.example.app; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.net.ContentHandler; import java.util.ArrayList; import java.util.List; public class DatabaseDao { private static final String TABLE_NAME = "data"; private static final String COLUMN_ID = "id"; private static final String COLUMN_MEMO = "memo"; private static final String COLUMN_PRIORITY = "priority"; private static final String[] COLUMNS = {COLUMN_ID, COLUMN_MEMO, COLUMN_PRIORITY}; private SQLiteDatabase db; public DatabaseDao(SQLiteDatabase db){ this.db = db; } public long insert(DBData dbData){ ContentValues values = new ContentValues(); values.put(COLUMN_MEMO, dbData.getMemo()); values.put(COLUMN_PRIORITY, dbData.getPriority()); return db.insert(TABLE_NAME, null, values); } public int update(DBData dbData){ ContentValues values = new ContentValues(); values.put(COLUMN_ID, dbData.getId()); values.put(COLUMN_MEMO, dbData.getMemo()); values.put(COLUMN_PRIORITY, dbData.getPriority()); String whereClause = "id = " + dbData.getId(); return db.update(TABLE_NAME, values, whereClause, null); } public List<DBData> findAll(){ List<DBData> dbDataList = new ArrayList<DBData>(); Cursor cursor = db.query(TABLE_NAME, COLUMNS, null, null, null, null, COLUMN_ID); while(cursor.moveToNext()){ DBData dbData = new DBData(); dbData.setId(cursor.getInt(0)); dbData.setMemo(cursor.getString(1)); dbData.setPriority(cursor.getInt(2)); dbDataList.add(dbData); } return dbDataList; } public DBData findById(int id){ String selection = "id = " + id; Cursor cursor = db.query(TABLE_NAME, COLUMNS, selection, null, null, null, null); while(cursor.moveToNext()){ DBData dbData = new DBData(); dbData.setId(cursor.getInt(0)); dbData.setMemo(cursor.getString(1)); dbData.setPriority(cursor.getInt(2)); return dbData; } return null; } public int delete(int id){ return db.delete(TABLE_NAME, "id = " + id, null); } }
SQLiteDatabese#queryメソッドでSQL文を指定してデータベースを検索し、検索結果をCursorインターフェースで取得するというような処理です。
ContentValuesクラスは、列名と値を1組にしてデータを保持するためのクラスで、CursorインターフェースはSQLiteDatabase#queryメソッドから戻ってくる検索結果カーソルのインターフェースです。
ContentValuesクラスはSQLiteDatabaseクラスのisnert, updateメソッドを利用し、データベースへのデータの挿入・更新をする際に利用します。
カーソルは検索結果の1レコードに対応し、検索結果の次のレコードに移動させたり、レコードから値を取り出したりする検索結果へのアクセス手段を提供します。
データベースの検索結果を格納するDBDataクラスは以下のようになります。
DBData.java
package com.example.app; public class DBData { private int id; private String memo; private int priority; public int getId(){ return id; } public void setId(int id){ this.id = id; } public String getMemo(){ return memo; } public void setMemo(String memo){ this.memo = memo; } public int getPriority(){ return priority; } public void setPriority(int priority){ this.priority = priority; } }
最後にデータベースにデータを格納し、検索結果を表示するActivityクラスを実装します。
MainActivity.java
package com.example.app; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.os.Build; import android.widget.TextView; import java.util.List; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DatabaseHelper dbHelper = new DatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); DatabaseDao databaseDao = new DatabaseDao(db); DBData newDBData = new DBData(); newDBData.setMemo("hogehoge"); newDBData.setPriority(1); databaseDao.insert(newDBData); newDBData = new DBData(); newDBData.setMemo("fugafuga"); newDBData.setPriority(3); databaseDao.insert(newDBData); List<DBData> dbDataList = databaseDao.findAll(); db.close(); StringBuffer buf = new StringBuffer(); buf.append(" Date | Plan"); buf.append(System.getProperty("line.separator")); for(DBData dbData: dbDataList){ buf.append(dbData.getMemo()); buf.append("|"); buf.append(dbData.getPriority()); buf.append(System.getProperty("line.separator")); } TextView tv = new TextView(this); tv.setText(buf.toString()); setContentView(tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } }
最後に
SQLiteOpenHelperを継承したHelperクラス、データベース操作をまとめたDAOクラスを使用してデータベース操作を行うのが主流みたいですね。
これでとりあえずデータベース操作については大丈夫かなと思います。
他にも必要そうなものがあれば調べてみようと思います。
DB設計とかもしたほうがいいかもしれないです。
それでは。
お金がないので家計簿を作ることにした
どうも僕です。
現在とても金欠なので、家計簿をつけようと思います。
しかし家計簿を買うお金もなく、途方にくれていました。
そこで「ないなら作ればいいじゃない!」の精神に立ったわけです。
とりあえずこんな感じの家計簿作っていこうと思います。
フローチャートはまだまだ未完ですが、ざっくりとこんな感じのやつ作ろうと思います。
それでは。
データマイニングしようぜ!!
メリークリスマス!
こちらはAizu Advent Calendar 2013の記事になります。
こんばんは、25日目担当の海草(@kaisou4537)です。
にゃんひまから受け継いできました、海草です。
私のこと知ってる人どのくらいいるかな?
さすがに卒業したのでもう知ってる人もそんなにいないと思います。
知ってたら声かけてください!!
みなさん元気ですか!私は元気です!多分!
クリスマスですね!
皆さんは誰とクリスマスを過ごしてるのかな?
私は飲みに行ってました。
さて、今回はデータマイニングのお話。
最後だけど普通でごめんなさい、きっと残ってる人たちがすごい記事を書いてくれると信じてます。
データマイニングの概要的なお話をします。
最近データアナリストとかたくさん出てきたので皆さんもこの機会にマイニングしてみてはどうでしょう。
データマイニング
データマイニングは大量のデータから有効な情報を取り出すためのプロセスのことです。たまたま見つかったものではなく、汎用性が高く、私たちにとって有力な情報で実際に使うことができる状態にするように、データのパターンを見つけることになります。
ちなみにKDD(knowledge-discovery in databases)とも呼ばれているみたいですよ。
データマイニングにも色々な種類があります。テキストマイニングやウェブマイニングとかはよく聞くと思います。これらも少し触れておきましょう。
ウェブマイニング
Webサイトの構造やWeb上のデータを利用したマイニングのことです。
Webのデータやコンテンツ、テキスト情報から役立つ情報を抽出することで、様々な物に活用させます。掲示板やブログ、商品レビューから意見・評判を抽出して活用するレコメンドシステム、Twitterのつぶやきを利用・解析したシステムとかちらほら見かけると思います。
テキストマイニング
その名の通り、テキストデータを対象としたデータマイニングのことです。構造化データ内のパターンを導出したり、入力テキストを構造化するプロセスに活用したりすることができます。
データマイニングってどうやるの
一通り紹介したところでデータマイニングってどんな手順でやるのかを説明していきます。基本的には4つのプロセスを行います。
- データの収集・選択
- 前処理・変換
- パターン発見
- 結果の解釈・評価・活用
図示すると以下の感じになります。
これらを説明していきます。
データの収集・選択
はじめに行うのはデータの収集と選択になります。
データマイニングを行う上で一番重要なプロセスになります。
(全体の70~80%はこのプロセスになります)
まず事前にデータマイニングの目標(ゴール)を定めることが重要になります。マイニングの結果、何が言えるのか、その部分を詰めていくことになります。
目標を設定したら、データウェアハウスからマイニングに必要な目的データセットを選択します。
目標を設定する際、どのアルゴリズムを使用するかを考察するのもこの段階になります。
前処理・変換
データクリーニングを行います。
選択したデータから、ノイズとなるデータや異常値を除去したり、単位を揃えたりするなど、データを処理できる形に変換します。
クリーニングしたデータを知識発見アルゴリズムが適用できる形に変換します。
事例選択など、データ変換は表形式にしてまとめるのがいいと思います。また、テキスト情報やWebの情報など、構造を持つデータもあると思いますが、その場合は特殊な変換が必要なことがあります。
アルゴリズムに適用する形にデータを変換してください。
結果の解釈・評価・活用
最後に抽出したパターンを解釈し、評価します。
データが意味のある形になっているか、目標通りのパターンが抽出されているかが鍵になります。
データマイニングはこれらの繰り返し
必ずしも目標としているパターンを見つけられるとは限りません。
各プロセスで自身の欲しい情報が入手できていなければ、基本的には一つ前のプロセスをもう一度行う、という形で進めていきます。
最初に目標を設定すると言いましたが、最初から明確なものを設定することも難しいです。
プロセスを繰り返すことで、より明確な目標を定めることができるようになるはずです。
まとめ
いろいろ言いましたが、結局は良質なデータ群と最適な知識発見アルゴリズムを見つけられることがデータマイニング成功のカギになります。
データマイニングで重要なところは、データの選択・取得・前処理になります。先ほども言った通り、この部分が全プロセスの8割ほどを占めています。
パターンの発見ではなく、設定した目標に対応して、有効な情報が得られたということがゴールになります
データがきれいにそろっていれば、成功といっても過言ではないですね!
最後に
長くなってしまいましたが終わりです。
身の回りにある小さな情報でもいろいろな見方で活用の仕方は変わってくると思います。
データマイニングはそういう発見ができる、宝探しのようなものです。
この機会にみなさん挑戦してみてはいかがでしょう?
ここまで目を通していただきありがとうございました!
年末は地元に帰っておいしい日本酒たくさん飲みたいですね。
日本酒初心者の方はこちらの記事を見て日本酒にトライしてみてはいかがでしょう!
日本酒の魅力・会津の酒(Aizu Advent Calendar 2012)
これからもブログちょこちょこ書いていくんで暇な人は是非。
それではみなさんよいお年を!
オンラインハッカソンなるものに挑戦
オンラインハッカソンという問題を解く企画に挑戦。
皆さんも挑戦されてはいかがでしょう。
オンラインハッカソンvol.1
https://paiza.jp/poh/ec-campaign新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1
今回はRubyで挑戦。
時間は1時間くらいで実装しました。
で、結果はこちら。
2問しか通せませんでした。
1月8日まで行ってるのでまだソースとかは載せません。
それまでに完答させたいなーと思ったりしてます。
こういう問題解くのも久しぶりだと全然解けないっすね。。。
たまにこういう遊びも楽しいものです。
○○歳になりまして
ごあいさつ
こんばんわお久しぶりです1年ぶりです。
こんな私も昨日で一つ歳を重ねました。
というわけで今年の私の抱負を掲げようと思うのです。
抱負
SURVIVE!
私の掲げている大目標になります。
ということでこの目標に基づく抱負をあげたいと思います。
抱負。
何でもいいからアウトプットを出す!!
以上。
どうしてこうなった
SURVIVE!!
つまり生き残るってことです。
エンジニアやっているわけですが、現状のままだらだらやっていても生き残れないと感じております。
業界に関する知識もないし、技術もないままだらだら生きています。
エンジニアとして生き残るためには、やはり技術や知識が必要になると思います。
今の私は知識も技術も俄、むしろ俄以下です。
ということで、以上のような抱負を掲げました。
折角ブログもあるのでこの場を借りてどんどんアウトプットを出していこうと考えたわけです。
自分の言葉で表現することで知識・技術ともに身に付くのではないかと。
つまり何するの
考えてることは以下のことです。
- 積読本の解消
まずは読みます。
積読本をどんどん片付けていきます。
- 学んだことのメモ
本読んで学んだこととかメモります。
- 作ったものの公開
読みながら学んで得た知識で作ったものを公開します。
以上。
簡単ですが
とりあえず今歳中に技術系アウトプット50個以上は出したいなってことでがんばります。
レベルとしても基本的なことから何でもありだと思ってます。
生き残るために技術学ぶってのも何かおかしい話ではありますよね。
なので、楽しみながらいろいろ学んでいければなーとか考えています。
適当ですね・・・。
好きなもの作って勝手に技術なり知識なり得られたら最高です。
それを目指してがんばります。
こんな感じです。
日本酒の魅力・会津の酒
こちらはhttp://atnd.org/events/33782:Aizu Advent Calendarの記事になります。
こんばんは、18日目担当の海草(@kaisou4537)です。
私は日本酒のことについて書いていこうと思います。
日本酒 is 何
日本酒は米と麹と水で作られたお酒のことです。
日本酒の種類
一言に日本酒といってもいろいろ種類があります。
もしかして日本酒って全部同じ味とか思っている人いませんか?
日本酒はそれぞれ味、風味、キレ、コクなど様々な違いがたくさんあります。
コーヒーとか紅茶とかもそうですよね。同じ名称でもさまざまな香りや苦味、酸味などが楽しめると思います。日本酒も同じです。
日本酒の種類にはいろいろ呼ばれ方があります。種類によって作り方が全然違います。
酒屋さんでよく耳にするのは純米酒、吟醸酒などじゃないでしょうか。ほら、大吟醸とか純米吟醸とかよく聞きますよね?
これらの呼ばれる違いについては使用原料、精米歩合など様々な基準に合ったものが呼ばれます。
精米歩合っていうのは簡単に言えば米をどのくらい削るかってことです。玄米を精米して白米にしたときって玄米削ってますよね?精米歩合はその玄米の重量に対する重量割合を%で表したものです。
例えば、精米歩合60%の白米というのは、一粒を60%残す削り方をしていることを表します。つまり、100kgの玄米だったら60kgの白米を使って日本酒を作ったということになります。
米を削れば削るほど、おいしい日本酒ができます。そんなに削っちゃうなんてもったいない!!と思うかもしれないけど、おいしい日本酒のためなら仕方ないよね!!
では、先ほどあげた種類の精米歩合をまとめてみましょう。
吟醸酒
吟醸酒は精米歩合60%以下で、低温発酵による純米酒及び本醸造酒のことを指します。原料に米、麹、水、醸造アルコールが使われています。果実のような香りがするものもあります。
純米酒
精米歩合が70%以下のもので、米、米麹、水が原料になっています。醸造アルコールなどは使われていないので、純粋にお米だけで作られたお酒ですね!
とりあえずこの二つを比較してみます。同じ日本酒でもまず原料が違うことに気づいてもらえると思います。
その他の種類を以下にまとめておきます。もし気になったらここに書いてあるのは一部ですので調べてみると面白いと思います!
特定名称 | 使用原料 | 精米歩合 |
---|---|---|
吟醸酒 | 米・米麹・醸造アルコール | 60%以下 |
純米酒 | 米・米麹 | |
大吟醸酒 | 米・米麹・醸造アルコール | 50%以下 |
本醸造酒 | 米・米麹・醸造アルコール | 70%以下 |
純米吟醸酒 | 米・米麹 | 60%以下 |
純米大吟醸酒 | 米・米麹 | 50%以下 |
純米大吟醸酒がとても贅沢ですね!!ほかにも、特別純米酒とか種類あります。特別な製造方法で作られた純米酒、ということになります。
ちなみにこれらに当てはまらないお酒は普通酒と呼ばれます。
味や香りは銘柄によって全然変わってきます。皆さんいろいろな種類のお酒を試してみてはいかがでしょう!
会津のおすすめの日本酒
地元は日本酒が実は有名です。
皆さんもしかして飛露喜だけだと思ってました?
まったくもってとんでもない!!これだけしか知らないとか人生の八割以上損してます。
今の時期は新酒が続々と出てきます。つまり、今の時期の日本酒が一番おいしいってこと!!今の時期に飲まないとか本当に損ですよ!!
ということで、自分が飲んだお酒の中でお勧めをいくつか挙げていきます。
国権 春一番
今の時期にてできます。すっきりしててキレのある辛めのお酒です。お正月になるといつもこいつに出会います。
新年を明るく春を迎えられる気がしますよね!!します!!春一番ではなく新年初めに飲みたくなるお酒です。
泉川 ふな口
飛露喜を作っている酒造と同じ場所で作られている泉川 ふな口です。たぶん今年はもうこいつには出会えません。
年末に出てきます。限定酒ですね、来年出たら皆さん飲んでみてみましょう!日本酒が苦手な人でも飲みやすいと思います。
ほろ甘く香りがとてもいい、おいしいお酒です。
天明
キレがあり、辛口のお酒です。それでも口の中で香りが広がり、後味すっきりなお酒です。
季節もので、中取り零号 -> 壱号 -> 弐号と、バージョンアップしていきます。(今は壱号)
全部同じ名前だけど、香りなどが変わってきますよ!そんな季節の変わり目と一緒に天明を楽しんでみるのはいかがでしょうか?
寫樂
初めてこのお酒を飲んだ時、それは飲み会の時でした。寫樂は甘くてすっきりしていて、こんなに素晴らしいお酒に出会えた私は幸せ者だと思いました。
まるで水みたいな日本酒と感じたのはこのお酒でした。(その時飲んだのは限定酒でしたが・・・)
寫樂もこれから続々と新酒が出てくると思います、楽しみのお酒の一つですね!!
ぶっちゃけ一つ一つレビューしていると書ききれないのでこの辺にします。この中で見かけた、気になったお酒があったら是非酒屋さんに足を運んでみませんか?
運が良ければ試飲ができたりします!!それだけでも幸せですね。
会津で買うならここら辺がいいですよ、ってことで張っておきます。
地酒 会津の地酒なら 会津酒楽館 (有)渡辺宗太商店
おすすめの居酒屋
個人的に飯がうまくて日本酒が飲めて幸せな気分になれる居酒屋とか張っておきます。
気になる人は足を運んでみてください!!
天竜
駅からそんなに遠くない場所にあります、地酒処 天竜。
普通に居酒屋さんなのですが、ここには日本酒のメニューがあります。
旬のお酒や他県の日本酒もさまざま取り扱ってます。
また、ここの天竜煮込みは絶品です。しかも安いです!!ここにきて煮込みを食べないのはにわかです、皆さん一度は食べてみてください。
あ、私を連れて行ってくれてもいいですよ!!どこまでもついていきます!!
他にもいろいろ知っていますが、時間の関係上気になったら本人に聞いてみてください。
最後に
技術系のお話が多い中、このような記事に目を通していただき、ありがとございました!
日本酒は時期によって味も変わります。先ほども申し上げましたが、今の時期一番おいしい日本酒が出回る時期です。
1本の値段は決して安くはないですが、友達を誘って鍋でも囲んでクイッと一杯・・・最高ですよ!!
そんな一杯をいかがでしょう?それを手助けできたなら幸いです。
もう一つ言い残したことがあります。おいしい日本酒は二日酔いになりにくいのです!素晴らしい!!
以上になります、皆さんも楽しい日本酒ライフを!(お酒は20歳になってから、あと一気飲みとかそんなもったいない飲み方はしないでください。ゆっくりちびちび楽しむのが日本酒です。)
次はhttp://atnd.org/events/33782:Aizu Advent Calendar19日目担当、crotchet_kuroさんです!