それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

DDコマンドでWrite速度測定:ddでHDDやNASの書き込み速度を見てみる。

ddでHDDやNASの速度を見てみる。

ディスクの速度を見たいなぁと思ったんですけど、いちいち測定ソフト入れるのも面倒くさい。
書きこんで速度がわかれば・・・そうかddで良いじゃん。

ddでやってみた。

5回書き込み

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=5 bs=1024
5+0 records in
5+0 records out
5120 bytes (5.1 kB) copied, 0.000198 s, 25.9 MB/s

50回書いた

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=50 bs=1024
50+0 records in
50+0 records out
51200 bytes (51 kB) copied, 0.000732 s, 69.9 MB/s

ある程度のサイズを書きこまないと、正しく測定できない模様。
ファイルサイズを増やしていくよ。

500回書いた。

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=500 bs=1024
500+0 records in
500+0 records out
512000 bytes (512 kB) copied, 0.004786 s, 107 MB/s

1000回書いた

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=1000 bs=1024
1000+0 records in
1000+0 records out
1024000 bytes (1.0 MB) copied, 0.007525 s, 136 MB/s

2000回

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=2000 bs=1024
2000+0 records in
2000+0 records out
2048000 bytes (2.0 MB) copied, 0.014717 s, 139 MB/s

3000回

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=3000 bs=1024
3000+0 records in
3000+0 records out
3072000 bytes (3.1 MB) copied, 0.034717 s, 88.5 MB/s
takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=2000 bs=1024
2000+0 records in
2000+0 records out
2048000 bytes (2.0 MB) copied, 0.014924 s, 137 MB/s

さらに小さいファイルにしてみた

takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=100 bs=512
100+0 records in
100+0 records out
51200 bytes (51 kB) copied, 0.000996 s, 51.4 MB/s
takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=1000 bs=512
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 0.004781 s, 107 MB/s
takuya@air:~/Desktop$ dd if=/dev/zero of=./test count=10000 bs=512
10000+0 records in
10000+0 records out
5120000 bytes (5.1 MB) copied, 0.047248 s, 108 MB/s

MACのSSDは書き込み136MBくらいですね。

NAS(テラステーション)にも書き込めている。

takuya@air:/Volumes/takuya$ dd if=/dev/zero of=./test count=10000 bs=512
10000+0 records in
10000+0 records out
5120000 bytes (5.1 MB) copied, 0.947956 s, 5.4 MB/s

takuya@air:/Volumes/takuya$ dd if=/dev/zero of=./test count=1000 bs=1024
1000+0 records in
1000+0 records out
1024000 bytes (1.0 MB) copied, 0.335269 s, 3.1 MB/s
takuya@air:/Volumes/takuya$ dd if=/dev/zero of=./test count=1 bs=1048576
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.833249 s, 1.3 MB/s
takuya@air:/Volumes/takuya$ dd if=/dev/zero of=./test count=10 bs=1048576
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 3.38667 s, 3.1 MB/s
takuya@air:/Volumes/takuya$ dd if=/dev/zero of=./test count=100 bs=1048576
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 30.6982 s, 3.4 MB/s

テラステーション遅い・・・3MB/s

同じようにすればUSBメモリも測定できる。

読み込みは?

なんかおっきいファイル作って

dd if=/path/to/sample_file of=/dev/null

で出来るんじゃないの?

phpのSqliteでの「謎」のエラー unable open database

PHPSQLiteには謎のエラーがあって、

unable to open database file

になります。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 14 unable to open database file

と出てきます。しかし・・・

[mi@www-mini db]$ ls -alt
合計 92
drwxrwxrwx  9 root root  4096  223 19:58 ..
drwxrwxr-x  2   mi   mi  4096  221 22:57 . #←これが原因
-rwxrwxrwx  1   mi   mi 36864  221 22:57 development.sqlite3
-rwxrwxrwx  1   mi   mi 29696  211 00:57 development.sqlite3.default

ファイルは777なんですね。でも動かない。

ディレクトリにも書き込み権限が必要

こっちは動く。
ファイルだけでなく、ディレクトリにも書き込み権限が必要。

[mi@www-mini db]$ ls -alt
合計 92
drwxrwxrwx  9 root root  4096  223 19:58 .. 
drwxrwxrwx  2  mi   mi  4096  221 22:57 .#←このパーミッションの注目
-rwxrwxrwx  1   mi   mi 36864  221 22:57 development.sqlite3
-rwxrwxrwx  1   mi   mi 29696  211 00:57 development.sqlite3.default

”. ”のパーミッションに注目! "drwxrwxr-x" → "drwxrwxrwx"だと書き込める。

あれれ、ディレクトリって、"rwx"の"x"さえアレばいいんだよね。って思ってたら、ディレクトリに書き込み権限つけたら治った。
まさか。まさかですよね。これはバグ?なのかな?

watch コマンドのオプション

watchコマンド:コマンドを定期実行し結果を淡々と表示するコマンドで--differences=cumulativeとすれば、毎秒変わっていくところがハイライトされて便利なんですが。

--differences=cumulative が長くて覚え得られないと思ってたら、
-dc でも同じらしい

watch -n 1 -dc date

Macの場合はbrewで入るよ

brew install watch

SQLiteでテーブルヘッダを表示する。

カラムを使って表示すると、JOINの時とかに便利でしょ。

.headers ON

設定前

sqlite> SELECT *  from B inner join C on c.id = b.c_id inner join D on c.d_id = D.id ;

20|100||100|1000||1000|1

設定後

sqlite> .headers ON
sqlite> SELECT *  from B inner join C on c.id = b.c_id inner join D on c.d_id = D.id ;

id|c_id|date|id|d_id|price|id|a_id
20|100||100|1000||1000|1

ちょっとだけ見やすくなる。

Alternativeに項目を追加する

alternatives を使って使うプログラムを切替えるにはの続き。

切替する選択肢を増やしたい。

alternativesを使うと同じ名前の別プログラムを切り替えられる。これにプログラムを追加したい。

記述方法

alternatives --install $PATH_TO_LINK $ALTER_NAME $PATH_TO_REAL_PATH $PROIORITY

現在の設定。

takuya@letsnote:~$ update-alternatives --config gcc

1 プログラムがあり 'gcc' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/bin/gcc-4.exe


Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

追加してみる。

追加

takuya@letsnote:~$ alternatives --install /usr/bin/gcc.exe  gcc  /usr/bin/gcc-3.exe 10

追加後

takuya@letsnote:~$ update-alternatives --config gcc

2 プログラムがあり 'gcc' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/bin/gcc-4.exe
   2           /usr/bin/gcc-3.exe


Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

無事追加された。OK

まとめ

 /usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/sendmail.postfix 30
                --install [バイナリのシンボリックリンク名][名前][指定したいバイナリ本体][優先度]

MacでRPMファイルを展開するには

RPMファイルを貰ったけど、いちいちRedhatCentOS)に転送して展開するのも馬鹿らしい。

rpm2cpioで形式を変換したらいい。

brewにrmpをcpioに変換

brew install rpm2cpio

展開。

rpm2cpio hoge.rpm | cpio -id

以上。簡単です。

RPMファイルの中身を見るのにもコマンドだけでいけるのが便利ですね。

cpioはちなみに次のようなオプションになっています。

-i : ファイルを読み込む(標準入力から)
-d:ディレクトリを作って展開する。

この場合rpmなので、usr/local/的なフォルダが作られることが多いです。

XMLを整形(tidy)して読みやすく、貼りつけやすくする。

XMLをもらったけど、階層ツリーがむちゃくちゃでわからない

tidy -utf8  -i --input-xml true  --indent-cdata true  ./sample.xml 


しかも昔にエントリ書いてるし。www


tidy のインストール。

mac
はじめから
linux
debian gnu/linuxは aptで
windows
コンパイル済みバイナリをどこかでダウンロードしてくる
cygwin
setup.exeや apt-cyg で

XMLの整形

tidyでxmlを整形するには・

 -xml オプションを付ける。

tidy -xml ./sample.xml

または tidy-configを使う。( --input-xml true)

出力

takuya@air:~/Desktop$ tidy -q -xml sample.xml  | head
line 164 column 40 - Warning: replacing invalid character code 151

<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
<Header copyright="BMRC">
<Application name="mclassify" version="1.0" />
<Timestamp>15 Jun 2010 17:54:26</Timestamp>
</Header>
<DataDictionary numberOfFields="7">
<DataField name="&#230;&#176;&#8212;&#230;&#184;&#169;"
optype="continuous" dataType="double"></DataField>
<DataField name="&#230;&#185;&#191;&#229;&#186;&#166;"

あちゃっ文字化けだ。*1

文字コードを指定する。


line 164 column 40 - Warning: replacing invalid character code 151

のように文字コードに問題があるときはちゃんと指定する。

 -utf8オプションを付ける。

結果

takuya@air:~/Desktop$ tidy -q -utf8 -xml sample.xml  | head
<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
<Header copyright="BMRC">
<Application name="mclassify" version="1.0" />
<Timestamp>15 Jun 2010 17:54:26</Timestamp>
</Header>
<DataDictionary numberOfFields="7">
<DataField name="気温" optype="continuous" dataType="double">
</DataField>
<DataField name="湿度" optype="continuous" dataType="double">

インデントを指定する。

takuya@air:~/Desktop$ tidy -q -i -utf8 -xml sample.xml  | head
<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
  <Header copyright="BMRC">
    <Application name="mclassify" version="1.0" />
    <Timestamp>15 Jun 2010 17:54:26</Timestamp>
  </Header>
  <DataDictionary numberOfFields="7">
    <DataField name="気温" optype="continuous" dataType="double">
    </DataField>
    <DataField name="湿度" optype="continuous" dataType="double”>

余計なメッセージを消す。

標準エラーに出力される、メッセージがうざったいので消す。

 -q : quiet 黙れ。 

出力ファイルを指定する。

単純にリダイレクをする。

tidy -q -i -utf8 -xml sample.xml  > neat.xml

または出力ファイルを指定する。

tidy -q -i -utf8 -xml  -o neat.xml sample.xml 

このときの注意点は、 -o text.xmlを sample.xml(入力ファイル)より先に指定する。

この指定がうざったい・・・

インデントの細かいオプションをつける。

タグの階層でインデントをする。

tidy -utf8  -i --input-xml true  --indent-cdata true  ./sample.xml 

さらに属性でインデントもつけたい。

tidy -q -utf8  -i --input-xml true  --indent-cdata true --indent-attributes true ./sample.xml  

これで、インデントが属性にも適用されて読みやすくなる。

出力結果。

takuya@air:~/Desktop$ tidy -q -utf8  -i --input-xml true  --indent-cdata true --indent-attributes true ./sample.xml  | head -n 20
<?xml version="1.0" encoding="utf-8"?>
<PMML version="4.0">
  <Header copyright="BMRC">
    <Application name="mclassify"
                 version="1.0" />
    <Timestamp>15 Jun 2010 17:54:26</Timestamp>
  </Header>
  <DataDictionary numberOfFields="7">
    <DataField name="気温"
               optype="continuous"
               dataType="double"></DataField>
    <DataField name="湿度"
               optype="continuous"
               dataType="double"></DataField>
    <DataField name="天候"
               optype="categorical"
               dataType="string">
      <Value value="晴れ" />
      <Value value="曇り" />
      <Value value="雨" />

--indent-xxxなどのオプションを全部みたい。

tidy -show-config 

で設定項目が分かる。




ま、こんなコトしなくても、見るだけなら、Opera/Safari/Firefoxなどブラウザで開くのが手っ取り早いんだけどね。

*1:文字化けというより、XMLのUTF8の文字符号になってるんだけどさ。

ffmpeg で指定時間だけエンコード

ffmpeg で、指定時間だけエンコードする。

-t オプションを使う

./ffmpeg/ffmpeg -y    -i out.mp4 -vcodec libx264 -acodec libfaac -t 00:00:03  out.ts


この場合3秒


ffmpeg で、開始時間から、指定時間までだけエンコードする。

-ss オプションを使う

./ffmpeg/ffmpeg -y    -i out.mp4 -vcodec libx264 -acodec libfaac -ss 3 -t 00:00:33  out.ts


この場合3秒〜33秒までをエンコード

ffmpeg をcygwinでコンパイルする。

Corei7マシンをwindowsに使っちゃったので、しかたなく、cygwin利用を継続している。最近はSetup.exeでCygwinを最新版にしたらなんかコンパイルが速いので、FFMpegコンパイルをしてみた。

入れたパッケージ

多分これくらいアレば大丈夫。(なんか余計なものもおおいけど)

apt-cyg install autoconf automake binutils gcc gcc-core gcc-g++ gcc-mingw gcc-mingw-core gcc-mingw-g++ gdb gettext gettext-devel git libgcrypt-devel libiconv libtool make mingw-runtime nasm patchutils pkg-config subversion ncurses expat libgcrypt curl wget zip unzip

コンパイルの流れ

  • ビルド用のGCCとか準備。
  • 必要なコーデックのライブラリを準備
  • ffmpegをインストール

yasmのインストール

#yasm
wget -O - http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz  |tar zxvf -
cd yasm-1.2.0
./configure --prefix=/usr
make && make install
cd

libx264のインストール

cd ~
git clone git://git.videolan.org/x264
cd x264
./configure --prefix=/usr --enable-shared
make && make install
cd ~

lameのインストール

wget -O - 'http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.4.tar.gz' | tar zxvf -
cd lame-3.99.4/
./configure   --prefix=/usr && make  &&make install

libfaacのインストール

wget -O - http://downloads.sourceforge.net/faac/faac-1.28.tar.gz | tar xzvf -
cd faac-1.28/
chmod +x ./bootstrap
./bootstrap && ./configure --prefix=/usr 
make && make install
cd ~

faacだけはgcc4でコンパイルしてる。

ffmpegをインストール

cd ~
git clone --depth 1 git://source.ffmpeg.org/ffmpeg
cd ffmpeg 
./configure --prefix=/usr/local  --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac  --enable-libmp3lame  --enable-libx264 
make && make install 


できたーーーーーーーーー!!

cygwinビルドと、既存のmingwとの比較。

いまのffmpegは。windowsimagemagickについてきたものを使ってる。

takuya@host:~/ffmpeg$ which ffmpeg
/cygdrive/c/programfiles/ImageMagick-6.6.7-Q16/ffmpeg

オプション

takuya@host:~/ffmpeg$ ffmpeg.exe
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

FFmpeg version SVN-r23418, Copyright (c) 2000-2010 the FFmpeg developers
  built on Jun  2 2010 04:12:01 with gcc 4.4.2
  configuration: --target-os=mingw32 --enable-runtime-cpudetect --enable-avisynth --enable-gpl --enable-version3 --enable-bzlib --enable-libgsm --enable-libfaad --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg --enable-libxvid --enable-libschroedinger --enable-libx264 --extra-libs='-lx264 -lpthread' --enable-libopencore_amrwb --enable-libopencore_amrnb --enable-librtmp --extra-libs='-lrtmp -lssl -lcrypto -lws2_32 -lgdi32 -lwinmm -lcrypt32 -lz' --arch=x86 --cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign-hack
  libavutil     50.16. 0 / 50.16. 0
  libavcodec    52.72. 1 / 52.72. 1
  libavformat   52.67. 0 / 52.67. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.20. 0 /  1.20. 0
  libswscale     0.11. 0 /  0.11. 0
Use -h to get full help or, even better, run 'man ffmpeg'

今回ビルドしたffmpeg

takuya@host:~/ffmpeg$ ./ffmpeg.exe
ffmpeg version git-2012-02-27-a4c22e3 Copyright (c) 2000-2012 the FFmpeg developers
  built on Feb 28 2012 04:01:16 with gcc 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
  configuration: --prefix=/usr/local --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libx264
  libavutil      51. 41.100 / 51. 41.100
  libavcodec     54.  4.100 / 54.  4.100
  libavformat    54.  1.100 / 54.  1.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 62.101 /  2. 62.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  7.100 /  0.  7.100
  libpostproc    52.  0.100 / 52.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg’

若干コーデックが減ってるけど、まぁそりゃ入れてないので仕方ない。いままではビルドなんて無理だろう。と諦めてたけど、新しいCygwinとCorei7パワーで30分もかからない。便利〜。

触れてはいけないこと。

 些細な一言が他人を傷つけたり、些細な一言が心に刺さって、傷が深く立ち上がれない。そんな経験は誰しもあると思います。僕もたくさん経験してきました。言いたい放題言ってるわけだし、他人を傷つけたり、問題を起こすこともある。たくさんの人を傷つけたり、たくさん傷ついた。

言葉はナイフ。

 言葉はナイフです。言葉は世界を切り取り、理解の補助する。言葉がなければ何も生まれない。ナイフを他人に向けないよう教わるのに、僕らは言葉を他人に向けないよう、明確に習うことはないかな。言葉は便利な道具です。使い方を誤ると、心に深く突き刺さる。

殴ってもいい場所と、ダメな場所。

 喧嘩はしてもいい。でも目を狙っちゃいけない。頭を殴っちゃいけない。そうならなうよね。なぜ目を狙っちゃいけないか?それは取り返しがつかないからだ。簡単に傷つけられるのに、永遠に取り返しが付かない。骨は折れても元通り。でも目はダメだ。拳は武器だ。凶器だ。そう身体の使い方を習うよね。小さな力で相手を再起不能にできちゃうんだから。。

発していい言葉と、ダメな言葉。

 口喧嘩もしてもいい。でも、相手の内面やコンプレックスをついちゃダメだ。性格を否定したらダメだ。なぜか、それは取り返しがつかない。自尊心を傷つけたら元通りにはならない。コンプレックスを増やすだけだからだ。そうすると人間関係も壊れてしまう。「食べ過ぎたらダメだよ。」この程度ならいい。でも「食べ過ぎて我慢出来ない、お前はダメだ。」「我慢のないやつは最低だ。」と言っちゃだめだ。言葉も凶器だ。身体の使い方を習うように、言葉の使い方を学ばなくちゃいけない。

触れてはいけないこと

 相手の身体のデリケートな部分に触れたらダメだよね。相手が大事してる部分に触れてはいけないこと。言葉だって同じだ。相手の大事にしているもの、大切にしている思い出に安易に触れちゃいけない。相手の思い出に触れる言葉は慎重に、それは相手の外性器を触るように慎重に。距離を縮めるんだよ。

心は目に見えない。

 だから我慢しなくていいんだよ。言われたときは、相手の見えるよう主張しよう。心が辛い時は我慢しちゃダメ。ちゃんと目に見える形で主張しよう。言葉以外もアリだ。相手の些細な一言が突き刺さったら、ちゃんとそれを眼に見えるように態度にだそう。そういう我慢はしなくてもいい。でもね、出来る限り笑顔でいてほしいな。笑顔で不快な思いをしたことを伝えるのが理想だよ。笑顔で拒否の気持ちを伝えられたら、その時にオトナとして一人前らしいよ。

言葉は自分に向けよう。

 たとえば、相手が食欲を我慢出来ない人だとしても、「我慢出来ないの?」って聞くのではなく、「食べ過ぎちゃうアナタを見ていて心配だな。心が痛いな。」なんて言えたらいいよね。夜更かししちゃう人がいたら、「眠れないの?そっか。それは不安が募るよね、まぁ眠くなるまで一緒にいるわ」と言えばいい。たとえ先に寝ちゃったとしても、心は何故か温かい。俺はガチホモかと思ったほど、そいつの存在が有難かった。

言葉の使い方を学ぼう。

 「何大卒ですか?」なんて聞くバカが居る。「部活とかやってました?」って聞けばいい。相手に学歴コンプレックスがあったり、望んで無い大学進学だってあるよね。だから遠回しに聞くんだ。「なんか筋肉多いよね。部活とかやってました?」って。もし「はい、大学時代にアメフトを。」って回答があれば、大卒ってわかるよね。質問は上手にやろう。知りたいことを知るために質問は別にストレート聞く必要はない。

だけど、想像と、読み取ることは違う。

 蛇足だけど、想像をふくらませたらいけない。相手は「大学時代にアメフト」と答えただけで、卒業したとは言ってない。だから質問を注ぐんだ「最近はやってないんですか?」って、「卒業してからはやってないなぁ。卒業ぎりぎりまでやってましたよ。単位やばかった」って答えがあれば、卒業したとわかる。うっかり前の質問で、早とちりで卒業と想像してたら、中退のコンプレックスを啄いちゃうかもしれない。言葉と質問は武器だから上手に使うといい。

だけどもし傷つけたら?

 すぐに謝ろう。すぐにだ。その場で。たとえ仲裁があってその場が収まっても、相手に直接謝ろう。

なんでコイツ怒ってるかわからないんだけど。

 それもすぐに、笑顔で「ごめんね。」という。

なんでこれくらいで怒るの?

 いやそれは相手にとって、触れてほしくないことだったんだよ。だからまず謝ろう。

些細な冗談でマジギレして空気壊すなよ。

 いやそれは、相手にとって、言われたくなかったことだから、空気を盾にしてもだめだ。相手に空気嫁というまえに、自分の行動を振り返えるほうが建設的かな。それくらいでマジギレすんなよ。と思う前に、「ちゃんと目に見える形で表現してくれてよかった」と思うほうが建設的。

時に言葉は凶器だから。

 基本笑顔。そしてコンプレックスには触れない。別の質問で代替できるなら、ストレートには聞かない。そして笑顔で。これが日本という人口高密度社会で生きる上の知恵だとおもう。欧米人から見ると婉曲的で面倒かもしれないけど。それは社会と人間関係をうまく回す知恵なんだよ。

部活を聞くテクニックは。

日野原重明先生の本から習いました。こうやって「ワンパターンな質問」を飛躍的に膨らますことが出来るよ。「大学は?研究は?どこ出身?何が好き?」なんて質問は飽き飽きだよねー

ワンパターンな質問になってないかい?質問が何故必要か?その質問は別の質問で代替できないかな?。ずっと遠まわしにでもいいんだ。聞くんだったら色々な質問で代替してみよう。そのほうが話が膨らむよ。

コンプレックスを煽っちゃいけない。

誰しもコンプレックスや劣等感はあるし、自尊心がなければ死んでしまう。「泥棒といえば人は盗む。」これが真実。出来ない出来ないって言い続けたら本当に出来ない子になる。僕の友人のある人は、無理して身長を伸ばそうとしたし。*1ある人は空を飛ぼうとした、ある人は献血に挑戦したし、ある人は電車に勝負を挑んだ。強くないのに強くなろうとして無茶な勝負をしたもんだ。ある人は、早く良くなろうとより多めに薬を飲んだ。みんな早く良くなって認めてもらおうと必死だっった。必死だったよ。
 コンプレックスを刺激しちゃダメなんだよ。何より怖いのはコンプレックスが何処にあるか見えないことなんだ。だから傷つけたらすぐに謝ろう。出来ることなら傷つけないように慎重に言葉を選ぼう。
 貴方がつらい言葉を言われたら、その場で脊髄反射して拒否を明確にしよう。目に見えない心だから、ちゃんと眼に見えるよう主張してみよう。我慢しちゃダメ。我慢して考えて悩むくらいならその場で喧嘩したほうがすっきりするから。

 そしてもし、他人の主張を見かけたら、「よく言ってくれたね」って受け入れてあげて欲しい。どうしてそんな事言うの、言い訳すんなとか、空気嫁とか、我慢しろとか言っちゃだめだよ。コンプレックスを煽るとコンプレックスを克服するために、すぐ無茶をするからね。

甘えじゃない。

 甘えじゃない。若い人には辛く当たることが教育だと勘違いしてる人がよくいる。アレさ家族がいる若い人ならいいんだよ。仕事でいくら厳しいことを言われてもちゃんと帰る場所があって、ちゃんと家族がいれば。自尊心はちゃんと貯金されるから。仕事で自尊心をすり減らそうが、またきっと貯金して出なおしてくるんだ。だから若い人に厳しく言うと育つんだ。それは「厳しく」が有効じゃなくて、若いうちは家族のサポートがあるからなんだよ。よく思い上がってる人がいるけど、、、ね






 

*1:アレは本当に悲しかった。

サンプルで使って慣れる。ffmpeg の使い方。

ffmpeg って色々出来るんだけど、オプションが慣れないとわからないというか。コンテナとかフォーマットとかコーデックとか色々あってね。ちょっと取っ掛かりが分かり難い。僕も色々やってみたけど、「習うより慣れ」でした。

ffmpegの基本

ffmpeg -i 入力ファイル名   その他いっぱいオプション  "出力ファイル名.拡張子"

です。最初は上記の構文だけ頭に入れておきます。ffmpeg は使いかたも概念もややこしいので、とりあえずパターンで覚えて、その後に理屈を攻めていけばいいさ

本エントリの目標

基本的な使い方を覚えて、2パスで高画質エンコード*1のオプションを暗記する。地デジのTSをエンコード出来るように。

2パス エンコードまでやります。

ffmpeg で動画を変換してみる。

適当な動画を一本用意する。とりあえずニコニコ動画から、なんかFLVを一本ダウンロードして用意。
あんまり長いファイルだと、変換時間が長くて勉強テンポが悪い。短すぎるとわかりづらいので1分くらいの動画でいい。

ffmpegのインストールは別に何でもいい。OSに入ってるものや、適当にダウンロードしたバイナリではじめるといいさ。

flvをmp4にに変換する

ニコニコ動画のflvをMP4形式に変換してみます。

ffmpeg -i sm1715919.flv out.mp4

mp4をflvに

逆に、MP4のファイルをflvに変換してみます。

ffmpeg -i sm1715919.mp4 out.flv

mp4 を movに

MP4形式をQuickTimeのMOV形式に変換してみます。

ffmpeg -i sm1715919.mp4 sm1715919.mov

形式の変換ができるようなった?

形式の変換のまとめ

ffmpeg -i 入力ファイル名  " 出力ファイル名.拡張子"

の「拡張子」で自動で決定されるの。僕らは、拡張子だけ意識していればいい。

拡張子とコンテナ。

実は先ほどの例、これらはコンテナを変えた。動画・音声を変換するオプションは指定してない。*2

ffmpegで動画の情報を見る。

動画形式が変換されたら、どの辺が変わるか。それを見てみます。

動画の情報を見る。
 ffmpeg -i ファイル名 

flvの情報を見てみる。

まず元になった動画のファイル形式を見てみる。

ffmpeg -i sm1715919.flv
(ry
    Stream #0:0: Video: flv1, yuv420p, 320x240, 200 kb/s, 29.97 tbr, 1k tbn, 1k tbc
(ry
    Stream #0:1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s

movファイル

flv→movに変換したものを見てみる。

 ffmpeg -i sm1715919.mov
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240, 137 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128 kb/s

mp4ファイル

flv→mp4に変換したものを見る

ffmpeg -i sm1715919.mp4
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 214 kb/s, 29.97 fps, 29.97 tbr,            
  Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 64 kb/s

mpeg2に変換したもの

ffmpeg -i sm1715919.mpeg
    Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p, 320x240 [SAR 1:1 DAR 4:3], 104857 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 29.97 tbc
    Stream #0:1[0x1c0]: Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s

情報の読み方。

Streamで始まる項目が音声・動画の形式。

    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 214 kb/s, 29.97 fps, 29.97 tbr,            
  Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 64 kb/s

Video:XXXXのXXXが動画のコーデック
Audio:YYYYのYYYYが音声コーデック

コーデックとコンテナに付いての簡単な説明。

あくまでイメージですが、、、こんな感じ。

\int_0^x\{video(t)+audio(t)\}dt

動画と音声を数秒ごとに分割して、数秒単位に動画+音声が繰り返し現れる。ってイメージ。
この時の切り方、ファイルの折り返し方を定義したのがコンテナ(数式の\int_0^tdtの部分)


ffmpeg で動画ファイルから音声を抜き出す

Mp3を動画ファイルから作ります。

ffmpeg -i sm1715919.mp4 sample.mp3

出来上がり。簡単ですねー。

ファイルをチェックしてみる。

takuya@air:~/Desktop$ ffmpeg -i sm1715919.mp4 sample.mp3
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s

ちゃんとMp3だけのファイル。簡単ですねー

音無しの絵の動画だけにする。

逆に、音無し。絵だけにする。動画から音を消してしまう。

ffmpeg -i sm1715919.mp4 -an -vcodec libx264 test-noaudito.mp4 
-an
audio none とかそういうこと:

これで音声をカットして、動きだけの動画ファイルにする。

画面サイズを変える。

元ファイルがこれ
(377fc0e4a622e8f01669f72de39def5f)

フォーマット(コンテナ)はそのままに画面サイズを変える。

拡大してみた
ffmpeg -i sm1715919.mp4 -s 640x480 out.mp4

結果
(d848c7a0d43044a4b16d5754856b4997)

縮小してみた
ffmpeg -i sm1715919.mp4 -s 160x120 out.mp4

(73af0174edf49db3f3b4f6fd32710699)

縦横比を維持して自動計算

横幅を指定して、残りを自動計算させる。アスペクト比だとか、縦横の比率とか、空白とかちょっと考えたくない。

ffmpeg -i sm1715919.mp4  -vf scale=640:-1   out.mp4

縦横の長さは自動計算。

これも簡単ですね。

ビデオ・コーデックの変換

ファイルのコンテナはそのままに、ビデオのコーデックだけを変換します。

ffmpeg -i sm1715919.mp4 -vcodec libx264 test.mp4

mp4コンテナのビデオ部分は、Mp4コーデックやH264コーデックでもどちらでも構わないので、変換してみる。

変換前
takuya@air:~/Desktop$ ffmpeg -i sm1715919.mp4
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 214 kb/s, 29.97 fps, 29.97 tbr,        
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 64 kb/s
変換後
takuya@air:~/Desktop$ ffmpeg -i test.mp4
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 120 kb/s, 29.97 fps, 29.97 tbr, 30k tbn,       
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 128 kb/s


ビデオコーデックが変換されている

最後に、ビットレート

ビットレートはkbpsで表現する。違い、一秒再生するのに何ビットいるか

つまり平均何ビットあれば一秒再生できるかってことらしい。

通信とは単位が似ているが・・・ちょっと違う。


2pass はVBRで。

2パスとは、2回エンコードして、2回目に目標のビットレートで最高の画質を追求する

CBRだと無駄が多い。
VBRで圧縮するときに静止してる場面を固定するから、2回やったほうがいい。インターレースをいっぱい作る。

まぁ、とにかく一回エンコードしたものを、可変レートのために読み込みながらもう一回エンコードかけて圧縮率を上げるってことで。

画質が最高とは、同じファイルサイズでも、より高画質。ってことです。

動画を2パスでエンコードすることで画質の向上を狙います。そのかわり処理時間は約2倍になります。

http://nicowiki.com/エンコード設定(中画質〜高画質).html#teeca4db

音声と動画を別々にエンコードするらしいよ。

MPEG2 TSを変換する。

2パスで変換する。

1パス目
ffmpeg -i $INPUT -vcodec libx264 -an -pass 1 -passlogfile "./pass.log" -s 1280x720 test.mp4
2パス目
ffmpeg -i $INPUT -vcodec libx264  -b:v 500k -acodec libfaac -pass 2 -passlogfile "./pass.log" -s 1280x720 test.mp4


ポイント、2パス目にはVBR(可変レート)のレートを指定する事になる。ビットレートの目標値を目指してファイルを圧縮。


500kだと画面も明らかに汚い。

画質を上げてみた。
time ffmpeg -i $INPUT -vcodec libx264 -b:v 5000k -acodec libfaac -pass 2 -passlogfile "./pass.log" -s 1280x720 test.mp4

5Mでやり直してみよう。

時間は掛かったけど、ファイルサイズの割にすごく綺麗です。
出来上がりは、

500k   で   27MB
5000k で 180MB

でした。

変換元ファイルからして25%程度に減ったのでとてもいいと思います。*3

ただし、サンプルがアニメで動きが少ないので、圧縮率は高いと思います。

時間を指定して分割する方法

-t で秒数
-ss で切り出す頭秒数

ffmpeg -i input.mp4 -t 10 -ss 60 out.mp4

単純に切り出したいときは 再エンコ省略すると速い

ffmpeg -i input.mp4 -vcodec copy -acodec -c -t 10 -ss 60 out.mp4


ffmpeg で指定秒数を切り出して動画を時間で分割する - それマグで!

*1:高画質ってのは、同じファイルサイズなのにスゲー綺麗ってことで、画質が向上するってことではないんですよ

*2:実際にはコンテナに従って決めるんだけど、一応そういうことにしておいて。

*3:TSの1440を1280にしてるからそれだけでもかなり落ちてるけどね。

Ubuntuでh264のffmpegを使う。

標準仕様のffmpeg は何も入ってないのです。

ubuntuffmpegで、h264動画をつくろうとしたら、できないって言われたので、コンパイルだわ。ビルドしてインストール。でもやり方面倒だよね。ってこと調べた

ffmpeg を non-freeでビルドする方法

参考資料にすげー丁寧に書いてあった。

0.The instructions on the page are for Ubuntu Oneiric Ocelot 11.10, Ubuntu Natty Narwhal 11.04 and Ubuntu Maverick Meerkat 10.10. Separate instructions are also available for older, supported releases:

http://ubuntuforums.org/showthread.php?t=786095

自分でビルドすればいいんです。

ビルド専用のスクリプト書いてみた。

urlの記事を参考に、シェルスクリプトにまとめておいた。
ffmpeg_install.sh

  1 ##uninstall
  2 sudo apt-get remove ffmpeg x264 libx264-dev -y
  3 ## install build-tools and library
  4 sudo apt-get update
  5 sudo apt-get install build-essential checkinstall git libfaac-dev libjack-jackd2-dev \
  6   libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev \
  7   libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev texi2html yasm zlib1g-dev
  8 #install x264
  9 cd
 10 git clone git://git.videolan.org/x264
 11 cd x264
 12 ./configure --enable-static
 13 make
 14 sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
 15     awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
 16     --fstrans=no --default
 17 #install ffmpeg
 18 cd
 19 git clone --depth 1 git://source.ffmpeg.org/ffmpeg
 20 cd ffmpeg
 21 ./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb \
 22     --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 \
 23     --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab
 24 make
 25 sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(date +%Y%m%d%H%M)-git" --backup=no \
 26   --deldoc=yes --fstrans=no --default
 27 hash x264 ffmpeg ffplay ffprobe
 28
 29
 30

実行結果

(ry
tripping ELF binaries and libraries...OK
manページを圧縮..OK
ファイルリストを作成..OK
Debianパッケージを作成..OK
Debianパッケージをインストール..OK
tempファイルを削除..OK
doc-pakディレクトリを削除..OK
temp dirを削除..OK
**********************************************************************
 Done. The new package has been installed and saved to

 /home/takuya/ffmpeg/ffmpeg_201202232008-git-1_amd64.deb

 You can remove it from your system anytime using:

      dpkg -r ffmpeg

**********************************************************************

インストールされた先。

/usr/local/bin/ffmpeg

に新しいイケテルffmpegがインストールされてます。


楽ちんですね。

ゆうちょ銀行のスクレーパー

ゆうちょ銀行にログインして、データ取り出すruby スクリプト。



require 'rubygems'
require 'kconv'
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
require 'mechanize'

class YuchoBank
  attr_accessor :password, :passphrase_list, :id, :password,:m
  def initialize()
    self.password = ""
    self.passphrase_list = {} #合言葉の質問と回答ペア
    self.id = ""
    self.password = ""
    @is_login
  end
  def login()
    self.start
    self.send_id
    self.send_aikotoba1 # first_time
    self.send_aikotoba2 # second_time
    self.send_password # パスワードを送る。
    @is_login = true
  end
  def start() @m = Mechanize.new end
  def send_id
    id= self.id.split('-')
    @m.get START_URL
    #お客様番号を入れる。
    @m.page.forms[0].fields_with({:name=>"okyakusamaBangou1"}).first.value = id[0]
    @m.page.forms[0].fields_with({:name=>"okyakusamaBangou2"}).first.value = id[1]
    @m.page.forms[0].fields_with({:name=>"okyakusamaBangou3"}).first.value = id[2]
    self.send_request("次")
  end
  alias send_aikotoba1 send_aikotoba
  alias send_aikotoba2 send_aikotoba
  def send_aikotoba()
    return :skip unless @m.page.title =~ /合言葉/
    q_text = @m.page.search('div.loginbox table td span.bold').first.text #合言葉の質問を探す。
    #合言葉の回答入力エリア
    e = @m.page.forms[0].field_with(:name=>"aikotoba")
    #合言葉の入力
    e.value = passphrase_list[q_text]
    #合言葉の送信
    self.send_request("次")
  end
  def send_password()
    #パスワードを入力
    e = @m.page.forms[0].field_with(:type=>"password")
    e.value = password
    self.send_request("ログイン")
  end
  def send_request(button_name)
    #JavaScriptのsend_requestをFakeする。
    button = @m.page.search('//input[contains(@value,"'+button_name+'")]').first
    #ボタンを押した時に遷移する。URLを指定する。
    action = button.attr('onclick').split(',')[1].gsub(%r"'", "") #=> ex "https://direct3.jp-bank.japanpost.jp/tp1web/U010701BLC.do"
    @m.page.forms[0].action = action
    # event のフィールドに値を入れる。
    event_value = button.attr('onclick').match(/new Array\('([^']+)'\),false/)[1]
    @m.page.forms[0].fields.select{|e| e.name == "event"}.first.value = event_value
    @m.page.forms[0].submit
  end
  ####ログイン後に使う。
  #ホーム
  def go_home()
    self.send_request("ホームヘ") if @is_login
  end
  #残高照会
  def zandaka_shokai()
    self.send_request("現在高照会") if @is_login
  end
  def go_page(button_name)
    self.send_request(button_name) if @is_login
  end
  def current_page
    @m.page
  end
  def current_page_body
    @m.page.body.toutf8
  end
end



view raw
yucho_bank.rb
This Gist brought to you by GitHub.


ゆうちょ銀行のパスワード紛失したので、再発行手続したら、パスワード印字した藁半紙が届いた。\(^o^)/

ゆうちょ銀行のスクレーパーを書くに当たり、パスワードと合言葉がわからなかったので初期化をお願いした。
初期化をお願いしたのに、窓口のお姉さんに「再通知ですね!」とか言われた。きっと言い間違いだろうと思ってたら、本当にパスワードが平文で届いた。

パスワードを忘れたので郵送通知をお願いした。

前のパスワード印字した藁半紙が届いた。\(^o^)/

おお紙よ。あなたは覚えていらっしゃった。忘れたパスワードが印字されて郵送されてきた。

マジでドン引きしたわ。

忘れたパスワードが送られてきたよ。
(パスワードが印字されて届いた。)
(暗証番号も印字されて届いた。 )
さすがにこれはドン引きしたわ。

これ情報処理センタのバイトが手作業で封してるんですよね・・・

これね、紛失したパスワードが平文でそのまま届きましたよ。再発行じゃなくて、以前のものがそのまま。


郵送で送るかぁ。。。。

  • パスワードを平文で保持してる点がアウト。
  • それを印字して郵送してくる点がアウト。
  • パスワードを郵送する手続が簡単すぎるのがアウト。

配偶者のゆうちょ銀行のパスワードくらいならすぐに手に入るよ。

そこから暗証番号やら、よく使うパスワードのキーフレーズやらが漏れる。これはたまらない。

アウトだアウト。

平文で保持してる点とかそういう問題以前に、印字するわ、郵送するわ、なんだこれは。

彼らにとって照会であって再発行じゃないところ。

ただし、ゆうちょ銀行は

料金面とサービス面では群を抜いている。


18:00まで窓口を開けてる銀行が他にあるかい?

頑張れゆうちょ銀行。

で、どうすればいいの


ゆうちょ銀行からのご相談の連絡をいつでもお待ちしてますよ。


サービスアドバイザとして僕を雇ってください。(違


2017-12-27 追加

ゆうちょ銀行の窓口でパスワード紛失しました−と言ったら、「パスワード照会」しますねーって言われたので、未だにこのままだと思います。

2018-01-10 追加

パスを記入した藁半紙が届いた。全然変わってなかった。

ゆうちょ銀行もスクレーパーかけたら、色々終わってた。

パスワードの話はこっち→ゆうちょ銀行のパスワード紛失したので、再発行手続したら、コーヒー吹いた話。

ゆうちょ銀行のスクレーパー

ゆうちょ銀行のタイムアウトがきついのと、「ホームへ」ボタンを押さないとセッションエラーになるので頭に来た。ブラウザ戻るボタン。押させろよ。

ちょっと本気スクレーパーを書いてやった。スクレーパーを書いて気づいた。ゆうちょ銀行のオンラインは色々終わってた。(後述)

ゆうちょ銀行は

ゆうちょ銀行にはログインのために以下の3つが必要になる。

  • ID 1234-5678-09876
  • 合言葉 [質問,回答][質問,回答][質問,回答]
  • パスワード

リクエストの仕組み。ボタン押した時にFormにActionとhidden eventを入れてSubmitする。
これだけわかればあとは簡単。

サンプル

require 'yucho_bank.rb'

cli = YuchoBank.new
#お客様番号
cli.id="6666-9999-33433"
#合言葉と回答リスト
cli.passphrase_list["初恋の人の名前は何ですか?"] = "恋するために出会うために来ていく服がない"
cli.passphrase_list["初めて映画館で見た映画のタイトルは何ですか?"] = "映画館行ったこと無い"
cli.passphrase_list["母親の旧姓は何ですか?"] = "天皇家には、苗字はありません"
#ログインパスワード
cli.password = "****password****"
cli.login
cli.go_page("現在高照会")
puts cli.current_page.search("xpath to amount")
cli.go_home()
cli.go_page("更新")

こんな感じ

ゆうちょ銀行のスクレーパー

yucho_bank.rb

ソースコード載せるつもりだったけど、パスワード関連の話のほうが面白いので、Qiitaにとりあえず、なげた。

ゆうちょ銀行のタイムアウト早すぎだとおも

いくらなんでも、早すぎだと思う。

現金を動かすトランザクション中にいるならともかく、残高照会で期間を選んでいるうちにタイムアウトするぞ。馬鹿か。
そういう場合は、とりあえず、タイムアウトさせずに、ログイン後のホームへ押し戻しておけばいいものを。

速すぎるタイムアウトにセキュリティ上の意味はない。

「ユーザーがパスワードを暗記してくれる」という反復学習効果しか期待できない。

そして暗記したパスワードは変更しなくなるので、むしろ恐ろしい。
そして暗記したパスワードは話のネタに、安易に教える可能性が高い。

セキュリティとか以前に終わってる

終わってるんですよ。色々と

意味がわからない。ログイン画像。

セキュリティ上の意味は全くない。。。。

これ何の意味があるのか全く理解出来ないんだけど。


一人で複数の口座を持っているときに区別が付くかもしれない

ゆうちょ銀行の公式の解説

公式の解説によるとこうだ。

(スクリーンショット 2012-02-24 15.50.17)

画像の登録をしていただきますと、ログインパスワードを入力する画面上に、ご登録いただいた画像が表示されます。その画像がお客さまご自身で登録したものであれば、ゆうちょダイレクトの正規の画面です。

なるほどー、画像の表示に認証してるんですね。

ってことで画像のパスを見てみたよ

(スクリーンショット 2012-02-24 15.57.34)

<img src="pages/etc/image/TravelCulture/TC19/2005_08_12_415.jpg" alt="旅行・文化 40" height="100" width="100">

え、GET引数持ってないの?そうか、セッションIDで見てるんだね。じゃぁ画像直アクセスは見られないんですよね。



実際の画像URLはこちら。

https://direct2.jp-bank.japanpost.jp/tp1web/pages/etc/image/TravelCulture/TC19/2005_08_12_415.jpg

見れる。サンプル


アカンわ。クズだ。


IMGタグに、丁寧にALTまで入れてる時点で怪しいと思ったんですよねぇ。

ログインシールってのは「Cookieの有無が一目でわかる」からフィッシング詐欺防止に役立つんじゃなかったっけ?

むぅ


画像のURLはすべて同じで、ユーザー毎(Cookie毎)に違う画像を出すなら、意味はまだある。

あと、質問を自分で決められないのがアウトだ。

そして質問内容が失礼すぎる。「母親の旧姓は?」とか、両親が揃ってるイイところのお嬢ちゃんとお坊ちゃんがそのまま、大きくなって大企業に就職して自分の常識を疑ってない好例だよね。母親の旧姓とは大変失礼だと思いました。



ゆうちょ銀行もクズだ


これが日本の技術力()だよ。

第三次オンライン世代の団塊世代はとっと引退しろ。インターネット世代に変えておけ。

まだまだある、ゆうちょ銀行のヤバい点

更に続くよ。

ゆうちょ銀行のパスワード紛失したので、再発行手続したら、コーヒー吹いた話。