おしまい日記

さようなら

Dropbox APIの使い道とか考えて挫折した経験

背景:大学のプロキシサーバがnot ftpなので、google driveとかdropboxみたいな

   オンラインストレージに直接データぶっこむスクリプトとか組めたら最高じゃね?

   → dropboxに動的なスクリプト置いて動かそうぜ!

 

結果:失敗

 

理由:1.dropboxにwebサーバ的な役割を期待した→AWSでやれ

   2.html5とjsでweb上のデータを動的にローカルに保存しようとした→それ、ウイルスやん

 

こんなことも思うに至らず、一日無駄にした感じ

大人しく、さくらかAWS使おうかな

 

*今日の参考サイト

Save Web Files to Dropbox, Google Drive and SkyDrive

画像とかpdfとか、簡単なデータを直接オンラインストレージに落とせるサイト

ただ、ftpサーバ上のドライバzipとか、動画データは落とせんかった

 

https://www.inkfilepicker.com/

上記サイトの利用してるjsライブラリ(API)

アップロードしたいデータを保存して、一時的な保存先のURLを返すサービス

 

使い方としては、オンラインストレージに溜め込んだデータをwebサービスに利用したり、

スクリプトに与えたい時とかに便利そう

 

とりあえず、ftpサーバは全滅してほしい

modを考える

AtCoderの問題で、整数のmodを考える問題が出された時の考え方。

今日の問題とか(特に、問2とか)

Welcome to AtCoder Beginner Contest #006 - AtCoder Beginner Contest #006 | AtCoder

 

例えば、整数Nとmodとして与えられた整数Mが与えられた時、

整数Nは

  N = int(N/M)*N + N%M

なので、

  N = (int(N/M)*N, N%M)

のように、商と剰余のペアとして考えると、問題を簡単に考えられたかも。

 

なので、次回からmodを問われる問題を出されたら、整数を商と剰余のペアとして考よう!

・・・と思うに至ったのをメモ。

c++のsetから平衡2分探索木まで

c++のsetを利用して、集合演算とか楽にしたいなー、と考えたのがきっかけ。

 

まずは、以下の記事。

「なぜsetを使っちゃいけないの?」 (1/4):CodeZine

vector, list, set, dequeのパフォーマンスを実験したよ - nursの日記

  

その中でも、setの実装に使われている、「赤黒木」っていう単語が気になって調べてみた。

赤黒木 - Wikipedia

c++のvectorとmap

結論としては、vectorとかmapとかの、初歩的なコンテナをいじいじした話

 

コンテナとは?

 ~ 同じ型のオブジェクトの集まりを表現するクラス。

   Cで言う、配列と構造体を合わせて、かつオブジェクト指向に対応させたもの。

 

で、今日主に使ったのが、vectorコンテナとmapコンテナ。

 

以下のサイトを参考にしました。

C++編(標準ライブラリ) 第2章 vector

C++編(標準ライブラリ) 第10章 map

 

イテレータの生成と使い方が分かれば、OKなのかも。

 

ハマった所としては、

 std::vector<int> hoge(100);

と初期化すると、hogevectorに与えられた型によって、値を持つから注意。

 

上のint型だと、各vectorの要素が0を持つので、push_backとかすると悲惨になる。

動的配列なので、配列と違って初期化とか考えず使うのがベストかも。

 

mapは、key値にソート(比較)できる型じゃないとエラーを吐く。

 

後、文字列のsplitが分からなかったので、以下のコードを利用した。

C++で文字列のsplit | Story of Your Life

 

このうち、

std::vector<std::string> split(const std::string &str, char delim){

  std::istringstream iss(str); std::string tmp; std::vector<std::string> res;

  while(getline(iss, tmp, delim)) res.push_back(tmp);

  return res;

}

 

を利用させて貰いました。

まるで動作がわからないけど・・・

 

次は、boost_pythonを利用して、pythonの拡張ライブラリをc++で書く。

 

*追記

 mapのvalueにコンテナを入れる時のハマりどころ

 ○ std::map<int, vector<int> > hoge;

 × std::map<int, vector<int>> hoge;

 

 理由は、std::coutに利用される<< や >>と区別をつけるため。

 知らないでいると、辛い。

 

 あと、std::set<int>について

C++マニアック,STL の set の使い方,how to use STL set,標準テンプレートライブラリ,standard template library,コンテナ,container,C++言語講座

 

 ぶっちゃけ、集合演算がめんどい・・・

 簡単に演算子で計算できないものか、スクリプトの集合演算に慣れるとなかなかつらい。

tf-idfについて

ノートにメモしてると思ったら、そんなことがなかった

来年度の後輩に向けた課題の一つとして、tf-idfを利用したキーワード抽出を

考えている。

 

目的:テキストデータから重要そうな単語を見つけてみよう!

 

手法:tf-idf

 

データ:分かち書きされたテキストデータ + 単語リスト

 

tfidf ~ 文書に出現した単語に重みを与える手法。

   重みとは、単語の持つ特徴量で、これを求めると色々できる。

   例えば、今回のキーワード抽出や文書要約にも使える。(らしい)

 

{ \displaystyle tfidf = tf \times idf }

{ \displaystyle tf = \frac{n_ij}{ \sum_{k}{n_{k,j}}} }

 

日本語だと、 tf = 単語iの文書における出現回数 / 文書jに出現した単語すべての出現回数の和 である。

* i:単語のid、 j:文書のid

 

{ \displaystyle idf = log|D| - log|{d; d \ni t_i}|}

* D:全文書数、 { \displaystyle log|{d; d \ni t_i}| }:単語iを含むドキュメント数

 

重要用語

 bag of words ~ 文書の単語ベクトル表現。単語の順序情報を欠く文書データ。

 Nグラム ~ 隣接する文字(文字列)のN単位での共起性。

 コーパス ~ 分析用のテキストデータ。

 素性 ~ 分析に用いるデータの特徴量。(単語の頻度等)

 

発展として、授業で学んだC言語だけじゃなく、スクリプトでも書いて分析して欲しい。

スクリプトが出来たら、クローラや形態素解析といった、準備や前処理もやって欲しい。 

c++仮想関数

Pythonの拡張ライブラリとか、ちょっとスピードが欲しいときのために

c++を勉強するようにしました。

 

仮想関数について

 c言語の基本は抑えている”つもり”なので、勉強するのは

 c++でのクラス・メソッドの書き方、使い方+拡張ライブラリへの利用方法

 

 今日は、なぜか仮想関数について

 今のところの理解は、仮想関数とはvirtualというキーワードを与えられた、

 クラス内の関数。

 

 なぜこんなことするのかというと、継承クラスで基底クラスの関数を再定義、

 これをオーバーライドする時に必要となってくる。*詳しくは下のリンク

 C++の基礎 : 仮想関数

 

 Javaとは違って、c++では上書きと再定義を区別してるということ。

螺旋弾幕

対数螺旋 - Wikipedia

 

javascriptで書いた関数

    function px(a,b,dir){

return a*Math.exp(b*dir)*Math.cos(dir);

    }

    function py(a,b,dir){

return a*Math.exp(b*dir)*Math.sin(dir);

    }

 

を,enchan.jsのシューティングサンプルに書き足して弾幕を描画。

f:id:azumanga0420:20140203003037j:plain

 

グラフにただ描画するだけじゃなく、弾幕として動いてくれるのがゲームのいいところですね。

 

*PS

クラス内のメソッド中で他のクラスメソッドを呼び出す時、thisを忘れてしまう癖がある。

Pythonとか、他のスクリプトでも良くハマるので注意しよう。

 

参考

wise9 › JSで驚くほど簡単にアニメーションが扱える! tl.enchant.jsの使い方を先輩に説明してみる

JavaScriptでクラスを実現する方法