2016年5月3日火曜日

英語学習とか受験とか

この記事、拙い文章だけどぜひ文理選択前や受験前の高校生にも見てもらいたい。




英語できない自分が言うのもなんだけど・・・


語学系の学部のことは何も知らないけど・・・


たとえば英語。


”英語で話せるようになりたいから、英語学科行きたいです!”


これはこれで理由になっていていいと思うんですが、微妙です。僕の感覚では。


というのも、僕は理系の大学にいました。そこでやっていることはもちろん英語学習ではなく、理系の学問です。


しかし、論文は英語だし、授業も英語のスライドだったりするし、そもそも使用言語が英語のものもあるし、研究室では英語が必須だし、通学中のバスの中では日本語が聞こえてこない(笑)しetc.


正直、嫌でも英語を勉強しています。


英語を主として勉強しているのではなく、英語は必需品として自主的に勉強しています。


その上で学問を修めようとしています。



じゃ、単に英語で話せるようになりたい人はもし目標通り話せるようになったとして、その先には何があるのでしょうか。


他の分野の人達は英語も話せるし、専門領域を持っています。


そんな人たちと勝負して勝ち目はあるのでしょうか・・・


いや良いと思いますよ、英語はなせるようになりたい、という目的は。


でもその先を考えてないと、競り合ったときライバルには英語以外の何かがあって、自分には英語しかないってなると不利じゃないですか。



また、よく質問サイトでもあるような

”海外で仕事がしたいです!国際系や外語系はどこがいいでしょうか?”

みたいな、


・・・これはきっと前提なり文脈があっての質問だと思うけれど、ここだけを素直に読み取れば視野が狭いというか短絡的というか思い込みのある質問だと思います。


なんで海外の仕事→語学なのか。

確かに商社マンとかならそれでいいかもしれないけど、じゃ技術者や研究者は国内だけでしか働けないのか、需要がないのか、あるいは海外へ出ても語学は不要なのか。

違いますよね。

今時、技術者や研究者でも海外へ出たり、海外出張や海外関係者との遠隔通信会議とか英語なり中国なりドイツ語なり何かしらの語学は必要であるはずです。


そこで語学だけに注目して、胡散臭い国際系学部に進学しても得られるものはないと思います。

得れたとして、就活では本質的に役に立たないものだと思います。


いくつかの企業のESを見ても、既に資格やTOEIC欄があり外国語レベルを記載できるようになっています。

これは何を意味するか、それは語学は主役になれないということ(あくまで就活生視点での推測だけど)。読み書き算盤といった手習いの1つにすぎないということ。

もちろんPRの材料、証拠として使えるけど能力そのものでは売りにならないということです。


大卒生は、「学士」や「修士」という学位は頭を使ってなんぼの世界で学んできた証明みたいなものだと思います。


専門学校とかは資格を取ることが目的だけど、大学は技術や能力、知識をいかに使って何をするか、「なぜ?」を考え解決していくことが大学での学び、目的だと思います。

副産物として資格をとったりするのです。



僕の意見としては、

”海外の企業で新素材の開発がしたいから、国際色の強い国内の大学あるいは海外の工学部へ行きたい、どこがいいか?”

”海外で法律に関する仕事をしたい、法学部があり留学制度が充実した大学はどこか”


という思考をしていくべきだと思います。


もし自分が高校の進路指導担当だったらそういうコメントをすると思います。



単に英語が好き、得意、それを活かす仕事がしたい→進学は国際系、外語系というのは思考が浅いと思います。


もちろん汎用的な日常会話やビジネス英語にとどまらず、まさに一芸特化でネイティブ並/以上の通訳や翻訳の仕事がしたいとかなら外語系を選ぶのは有りだと思います。それなら英語習得を目的としても僕はいいと思います。



英語を学ぶ上で、その英語は何のために学ぶのか。これをしっかり考えて進路や文理選択をしていくべきだと思います。

2016年2月4日木曜日

VAIO Phone Biz


VAIOからWindows 10 Mobileスマートフォンが出るらしいです。

VAIO Phone Biz
https://vaio.com/products/phone_biz051/


ちょっと欲しい気もするけど・・・・

それよりもMarshall LONDONがほしいかな。

音楽に特化したマーシャルブランドのスマホ。

ロック好きやバンドやっている人ならたぶん知っていると思うが、ギター・アンプで有名なマーシャル。


でも日本では手に入らないらしいので・・・・

ともかくおそらくVaioのスマホはwindows 10 mobile採用というのがウリなんだろうな。

発売は2016年4月らしいので今使っているスマホが壊れそうだし少し検討してみる。

2016年1月5日火曜日

CSVファイルからデータの読込

メモ。
csvファイル( , カンマ区切り、改行あり)からデータを読み込む。
ついでにopencvのMatにデータをぶち込む。


"filename1.csv", "filename2.csv", .... , みたいな感じの連続番号を振ったCSVファイルをループ文で読み込む

while(1){
 read_csv(i);
 ++i;
}
みたいな感じ。







int read_csv(int counter) //ループのカウンター値を受け取る→連続したファイルを読み込む
{

 //ファイル名の指定
 char name[256];
 sprintf_s(name, 256, "ファイル名%d.csv", counter); //連続番号付けしたファイルを読み込む

 std::ifstream read_data(name);


 //エラー処理
 if (!read_data) {
  std::cout << "Error:Input data file not found" << std::endl;
  return -1;
 }

 double *data = new double[height*width](); //0で初期化
 //heightとwidthは定数、ここでは定義は省略している

 int i = 0;
 
 std::string str;
 while (getline(read_data, str)){
  
  string token;
  stringstream ss;
  istringstream stream(str);

  while (getline(stream, token, ',')) { // 区切り文字は ,カンマ

   // 文字列から数値に変換
   ss << token;
   ss >> data[i];
   
   ++i;

   ss.clear(); // 状態をクリア.
   ss.str(""); // 文字列をクリア.
  }
 }


 cv::Mat mat_data(height, width, CV_64FC1, data); //csvから読み込んだデータをcv::Matにぶち込む

 
 return 0;
}




インクルードするのはたしかこれら
#include <fstream>
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>

参考:
http://fa11enprince.hatenablog.com/entry/2014/04/03/233500
http://99blues.dyndns.org/blog/2010/02/std_stringstream/
http://ppp-lab.sakura.ne.jp/cpp/library/032.html
http://handasse.blogspot.com/2007/06/c_22.html




2016年1月3日日曜日

【グロ注意】キモ気持ちいい角栓動画

角栓除去の動画。

キモイけど癖になる動画。











ドイツ・ゾーリンゲン AXiON ステンレス製角栓プッシャー(オーバルループ) 高級スモーク仕上げ #slg007968fba

AOZEE 角栓・黒ニキビ専用スティックセット抗菌ステンレス黒ニキビ取り毛穴すっきり毛穴ケア





OpenCVを使ったCSVファイルの入出力。

メモ。

OpenCVのMatの値をCSVで保存する。


  char name[256]; //ファイル名

   sprintf_s(name, 256, "ディレクトリ名\\ファイル名%d.csv", counter);
   //処理全体をループ内に入れてcounterを回せば、ファイル名に連番が付く

   //フォルダがない場合は作成(direct.hをインクルードしておく )
   if (_mkdir("ディレクトリ名") == 0);

   //#include <direct.h>を忘れない
   ofstream save(name);

   double output;
   for (int y = 0; y < height; ++y){ //row:列
    for (int x = 0; x < width; ++x){
     output = data.at<double>(y, x); //画像というか単純に行列のデータ
     save << dec << output << ",";

    }
    //改行
    save << endl;
   }

   //解放
   save.close();



cv::Mat data はCV_64FC1とかを想定したもの。


で、for文で1ピクセルずつ回しているけど、書くのが面倒だったら↓みたいにOpenCVの関数使えば1行で書ける。



 //csv変換して出力
 save << cv::format(data, "csv");



以上。


2016年1月1日金曜日

OpenCVのcv::Matについてメモ(画素の扱いとか)

OpenCVのcv::Matについてメモ

勉強し始めた時、あれMatのチャンネルって何?
あれ?どうやって各画素値いじるの?
あれ全部真っ白なっちゃった!?orzってなったのでそのメモ


#include <iostream>
#include <opencv2\opencv.hpp>


#define height 100
#define width 100

 void main(){

  double* data = new double[height*width](); //0で初期化
  //省略したけど、dataになにかいろんな数値入れておく
  /*
  .... dataに数値入れる処理
  for :
  data[i] = a とかで数値入れる
  */

  //dataをMatにぶち込む
  //32F、64Fにすれば255以上の数値も扱える
  Mat input(height, width, CV_64FC1, data);


  Mat img(input.rows, input.cols, CV_8UC3); //inputと同じ行数と列数を用意


  //ここでMatの各要素にアクセスする
  for (int y = 0; y < input.rows; ++y) {
   for (int x = 0; x < input.cols; ++x) {

    //ピクセルにアクセスするためのインデックス
    //G,B,Rの順 チャンネル数は3つ必要→Matは1次元だから3倍する
    int index = ((y * input.cols) + x) * 3;

    //とりあえず画素に何か数値入れる
    //doubleの数値を扱えるのは .atだけらしい
    int rgb = input.at<double>(y, x) + (x * y) % 255; //255諧調に

    //.dataでは扱える数値の最大が255
    //B,G,Rと連続しているのでindex, index+1, index+2でアクセス可能
    img.data[index] = rgb;
    img.data[index + 1] = rgb;
    img.data[index + 2] = rgb;
    //これで1ピクセルの色を扱える

   }
  }


  delete[] data; //明示的に解放

 }

こんな感じでやる。

#define height 100
#define width 100
は定数。const int とかでもいいと思うけどとりあえず、ここではあまり重要じゃない。

double* data = new double[height*width]();
cv::Mat input(height, width, CV_64FC1, data);
height*widthの1次元配列を確保。()をつけると0で初期化できるらしい。
heigh*widthつまり100x100の行列。
CV_64FC1はdouble型の1チャンネルの行列。
CV_8UC1とか
CV_8UC3とかいろいろある。C1とかC2がチャンネル数。
RGBの画像を扱いたかったら、CV_8UC3ってやる。R、G、Bそれぞれ1チャンネルずつ使うから。
でも、想像するのは1次元配列なのでデータのアクセスではじめはややこしいと思った。

3x3の画像    数値をいじるときの想像
■■□  →  ■■□■□■□■■
■□■     [0][1] .....                [8]  
□■■   

3x3のRGB画像だったら
BGR BGR BGR   →   BGR BGR BGR BGR BGR BGR BGR BGR BGR
BGR BGR BGR        [0][1][2]     .......                       [24][25][26]
BGR BGR BGR 


input.at<double>(y, x)
255以上の数値を扱うときは.atを使う。
あとCV_32FとかCV_64FとかでMatを作る

img.data[index]         //B
img.data[index + 1]    //G
img.data[index + 2]    //R
B,G,Rと1ピクセルを1次元配列の要素3つで扱うので
3チャンネルでMatを作っておく。
.dataでアクセスして、+1, +2で3つ分。



以上。