////

/三度も放置したブログ今度こそ/忘却録/プログラミング/

Aliexpressで交換用液晶を買って分かった話 とにかくOpen Disputeをしろ

前回の記事で、Aliexpressで買った液晶が如何に不良率が高いかを話しました。
今回の記事は、Aliexpressの業者がいかに中国業者たるかを話したいと思います。

ただしこれは、Aliexpressがクソだとか中国人がクソだとかではなく、文化の違いであること、今後中国や他の国などとの取引の際は、十分に気を付けるべきだという自分への戒めを込めて書いています。

さて、恐る恐るAliexpressで二度目の液晶を購入し、なんと奇跡的に正常に動作したことに気を良くした私は3枚目の液晶を購入します。

液晶が届いた頃ちょうど忙しかった私は、動作確認が出来ずにおりました。やっと動作確認できた頃にはOpen Disputeでの意義申し立てが出来なくなっていました。

さて、動作確認をしたところ、その液晶はタッチパネルが効かない不良品でした。

まぁ中国からの買い物です。もともとお金をドブに捨てる可能性があることは百も承知なので、せめてもの抵抗としてフィードバックを残すことにします。 

Aliexprssで交換用液晶は買わないほうがいい話

Softbankの社長、孫正義さんが出資したことで日本でも有名になったアリババグループのネット通販Aliexpress

中国の卸業者から直接送られてくる激安でアヤシイ商品が魅力です。

Raspbrry Piの部品や、携帯電話の修理パーツなどを購入していました。

 

ja.aliexpress.com

 

ebayでも同様に中国から送られてくるストアがありますが、こちらの方が1割~3割ほど安く購入できることが多いです。

私はこのサイトで、Xperiaの修理用液晶を8枚ほど購入したのでレビューをしたいと思います。

 

1件目:Xperia Z1f用液晶

Top Leading HK Co., Ltdというストアで、$ 24.68 当時のレートで¥3400ほどですね。

ちなみにamazonで買うと¥6000ほどですね(2016/3/23現在)

 

 

送料無料で3週間ほどで送られてきましたが、液晶はいわゆる尿液晶。

明るい点があるかと思えば、黄点もありひどい品質でした。

 

セラーに文句をいうと

Dear customer,
Please do not leave negative feedback, it is really harmful to our sell
We double checked and tested before shipping, the item may be damaged during the shipment, as you know, the electric product is very sensitive, it is easily damaged during the long delivery.
To return the item will take lots of time, the return shipping fee is also high, to save your time and money, we can refund 3 USD as compensation to you,and you do not need to return the item to us, is that ok?
If you have other request, please feel free to tell us, we must do our best to make you satisfied.
Waiting for your early reply.
Have a nice day.
Best regards

 

バイヤーはしきりにOpen Disputeしないでと言ってきます。

後々分かるのですが、これは相手の嘘八百です。

だいたい売り手側の都合など考えては行けません。不良品が届いたのであれば、間髪入れずにOpen Disputeしましょう。

またOpen Disputeでオープンした案件を一度クローズすると二度と申し立てをすることが出来ないので、返金があるまでは決してCloseしないようにしましょう。

 

初めての私は、Paypal経由での返金を受け入れました。

ただなんか悔しいので、値段交渉し最終的に5ドル返金で手を打ちました。

この調子で2件目、3件目と注文を重ねます。

 

2件目:不具合が見つからなかった液晶。コレで安心したのがいけなかった。

3件目:Xperia Z(初代用)。タッチパネルが効かず。詳細は後日

4件目:不具合無し

5件目:常時点灯ドットが5ドット分ぐらい固まって存在。5ドル返金

6件目:尿液晶、明るい点、黄点の三点コンボ

 

ということで、ヒット率は4/6。6割超えで不良品をつかまされます。

不具合無しのものも、ヤフオクで売ったり、友人のものを修理したりしたのですが

おそらく自分が気づいていない不具合があるのだと思います。

というより、不良品やチェックで弾かれたものを横流ししているのではないかと疑ってしまうほどの不良品率でした。

 

つづく

 

 

 

 

 

 

Ubuntu ffmpegで複数音声をLRそれぞれにマッピング(英語学習)

結論から言うと、失敗しています(笑)

英語の学習のため大好きなアニメ「フィニアスとファーブ」の音声をL:英語・R:日本語のように流すことが目的です。

 

失敗というのはLRそれぞれに流すことは成功したのですが、日本語と英語を同時に聞くことにそもそも無理があり、英語学習には向かないということです。

 

ということで、聖徳太子のような耳をもつ誰かのために、複数音声をLRそれぞれに流す動画の作成方法をメモしておきます。

変換済みのmp4ファイルからの変換ですが、TSから直接作成もできると思います。

音声トラックは1:日本語,2:英語,3:英語・日本語ですが、mapオプションで自由に設定してください。

 

  #音声取出し
  ffmpeg -i "imput.mp4" -vn -acodec copy -map 0:1 tmp_right.mp4 -vn -acodec copy -map 0:2 tmp_left.mp4

  #音声合成
    ffmpeg -i tmp_left.mp4 -i tmp_right.mp4 -acodec libfaac -ac 2 -ar 48000 -ab 128k -filter_complex "[0:a][1:a]amerge=inputs=2,pan=stereo|c0<c0+c1|c1<c2+c3[aout]" -map "[aout]" tmp_mix.mp4

 

  #最終合成
  ffmpeg -i "input.mp4" -i tmp_mix.mp4 -c copy -map 0:0 -map 0:1 -map 0:2 -map 1:0 output.mp4

  #ファイル削除
  rm -r /home/user/test/tmp*

 

ffmpegのオプションaoutにはいくつかの処理方法があり、色々できそうです。

詳しくはffmpegのドキュメントを

AudioChannelManipulation – FFmpeg

 

参考URL

【ffmpeg】 比較動画の作り方 : ニコニコ動画研究所

Ubuntu ffmpegでTSファイルの複数音声(2ヶ国語)を処理する

TS抜きしたファイルの処理方法メモ。

 

基本的な方法は以下等を参考に

さくらのVPSで動画を楽しむ – Ffmpeg トランスコード ストリーミング Ts H.264 X264 変換 | お名前.com、さくらVPS等のサーバーでの開発・設定メモ

 

マシンパワーが十分ならh265もついでに入れておくといいでしょう。

[FFmpeg] ffmpeg に libx265 をリンクする - Qiita

 

さて、私は去年から「フィニアスとファーブ」というアニメにはまっています。

Dlifeで放送されているディズニーのアニメで、毎回吉本新喜劇的な「お決まりパターンとお決まりのセリフ」で繰り広げられる物語が癖になります。

 

www.youtube.com

www.disney.co.jp

日本語と英語の2か国語で放送されており、TSファイルの中にも当然2トラックの音声データがあります。

これらの複数音声データをh264やh265のmp4コンテナにぶち込むのが今回の目的です。

 

環境はUbuntu+ffmpeg

 

stream=`ffmpeg -i "${filepath}" 2>&1 | grep "Audio" | grep -o -e 0:[0-9] | sed -e "s/0:/-map 0:/"    ` 

X264=" -f mp4 -vcodec libx264
             -fpre /home/user/.ffmpeg/${ffpre}.ffpreset
             -r 30000/1001 -aspect 16:9 -s ${size}
             -acodec libfaac -ac 2 -ar 48000 -ab 128k -deblock 0:0

             -threads ${CPU_CORES} -vsync 1 -async 1 -map 0:0 $stream "
   

ffmpeg -y -i "${filepath}" ${X264} ${output_dir}"${filename%.ts}".mp4.mp4

 

ffmpeg -iでTSファイルを読み込んで、コーデック情報から音声ファイルがあるか判別、複数音声があった場合ffmpegにmapオプションで追加します。

ffmpeg -iで出力した一部を抜粋すると以下のような感じです。

 

Input #0, mpegts, from './rec/test/test.ts':
  Duration: 00:00:06.42, start: 92991.097367, bitrate: 14148 kb/s
  Program 258
    Metadata:
      service_name    : ?|ǣ???
      service_provider: ?BS?|ǣ???
    Stream #0:0[0x1001]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p(tv, bt709), 1440x1080 [SAR 4:3 DAR 16:9], max. 24000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1041]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 203 kb/s
    Stream #0:2[0x1051]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 236 kb/s
    Stream #0:3[0x1201]: Data: bin_data ([6][0][0][0] / 0x0006)
    Stream #0:4[0x1c06]: Data: bin_data ([6][0][0][0] / 0x0006)

 

まずストリーム0:0がビデオ、0:1が日本語、0:2が英語です。

ちなみにa:bの意味は、a番目の入力ファイルの、b番目のstreamと言う意味です。

複数ファイルを入力すると、1:0(2個目の入力ファイルの最初のstream)みたいなのが出てきます。

 

さて、音声のmapが分かったら、ffmpegの-mapオプションで

ffmpeg -y -i input.ts -option色々 -map 0:1 -map 0:2

と指定すれば複数音声でエンコードできるのですが、複数音声が存在しないファイルもあるので、grepを使ってオプション指定します。

こんな感じなので、grepにパイプして

grep "Audio" で対象行を抜き出し、

grep -o -e 0:[0-9]で0:?の形式を抜き出し、

sed -e "s/0:/-map 0:/" とすると、最終的に

 

-map 0:1

-map 0:2

 

 と出力されます。

あとはこれをffmpegに渡してエンコードしてもらうだけ。

 

 

ExcelでA5のルーズリーフに印刷できるカレンダーを作る

今年度もあと半月で終了ですね。

 

前回の記事に書いたとおり、私はA5のルーズリーフを手帳代わりに使っています。

リフィルと呼ばれる種類のようですね。

 

82.hatenablog.com

 

カレンダーは毎年、と言ってもまだ2年ですが、

こちらで公開されているpdfファイルを印刷して使っていました。

sinosino07.seesaa.net

すごくシンプルでわかりやすいデザインですね。

 

ですが、今年は4月始まりのカレンダーがまだ公開されていませんでした。

しょうがないので自分で作ることにしました。

 

完成品はこちらです(Google drive)

https://goo.gl/FkRk0M(xlsx)

https://goo.gl/kryvDY(pdf)

 

エクセルファイルなので、自由に改変してオリジナルなカレンダーを作って下さい。その際にはぜひご報告、公開して頂けるとありがたいです。


続きを読むとわかりますが、しのしの茶館さんのデザインを丸パクリ参考にさせて頂きました。ありがとうございます。

 

※追記

この記事を書いていたのが3/13で、そのとき4月始まりも作ってくださいとコメントしたところ早速作って下さっていました!大感謝です。

A5ルーズリーフ用マンスリー2016年4月〜2017年3月 PDF: しのしの茶館

 

続きを読む

私の使ってる手帳

私は2年前からA4のルーズリーフで作った手帳を使っています。

f:id:HN8282:20160314172904j:plain

リフィル型の手帳は色々なものがあるのですが、入れ替える紙が専用のものが殆どです。

 

例えばこれだと執筆時点で700円と少し。

 

ドケチな私はコクヨのノートカバーとルーズリーフバインダーを組み合わせて手帳にしてました。

 (バインダーの表紙を少し切らないと入らない)

コクヨ カバーノート システミック B5 グレー/黒 A罫 40枚 ノ-653A-1

コクヨ カバーノート システミック B5 グレー/黒 A罫 40枚 ノ-653A-1

 

 

 

 

A5の市販されているルーズリーフなら何でも入ります。

 

無地のルーズリーフや、方眼のルーズリーフ、横線のルーズリーフなど

A5のルーズリーフなら自由に使えます。

 

 とても便利です。

 

Raspberry Piでストーブ番

最近はやりのRaspberryPiでストーブをつけたい!

 

条件!

  1. RaspberryPiで外出先からストーブをつけたい
  2. 外出先から部屋の温度を見たい
  3. 携帯で操作可能、かつ簡単なタップ操作がいい
  4. プログラムは素人に毛が生えた程度

以上のことを前提に、先人たちの実績を探しました。

温度取得についてはこちらがよさそうです。湿度も一緒に測れます。

qiita.com

 

肝心の外出先からRaspberryPiを操作する方法ですが、ストーブの制御をWebに公開するのは心配。そもそもWebアプリなんて作ったことがないので、完成にどれだけ時間がかかるかわからない。冬はもうすぐ、とにかく動かしてみたいんじゃー。

 

ということで、Gmailのアカウントを作って特定のメールアドレスからメールを受信したらストーブをオンにする、というプログラムを書くことに。

温度・湿度取得の参考元がRubyを使っていたので、という理由でRubyで書きましたが、使ったことのあるシェルスクリプトで十分だったと思います。Rubyの特定の文法がよく分からず躓きました。

RubyにはGemという便利なライブラリがあるようで、Raspberry PiのGIOPを操作するPinPiper、Gmailの制御ができるgmailping確認のnet/ping、ログをcsvに書き出すcsvを使用しました。

プログラム初心者でもこれらを組み合わせることで何とか動くものは作れそうですね。

 

jwhitehorn/pi_piper · GitHub

 

ストーブのスイッチはパソコンのスイッチと同じで単に短絡したらスイッチオンという構造のようです。ただし電圧が15Vほどあって、直流のためリレー回路はアナログのほうがよさそうです。

中国製のリレー回路が売っていたのでこれを使います。

ebayで1chが100円ぐらいで売っていたのでそっちで買いました)

 

www.amazon.co.jp

 

さて、肝心のプログラムと表示部分です。

RubyにはRuby on Railsというなにやら素晴らしいWebアプリのフレームワークがあるそうですが、私は中学生のころ黒歴史なイラストサイトをタグうちで作ったぐらいしかしたことがないWebアプリ素人です。ですのでできるだけ簡単にと考えた結果、

 

Gmailのチェック→メールが来る→ストーブをつけると同時にHTMLを直接書き換え

とすることにしました。

簡単ですね。

 

一応完成したプログラムを下に載せておきます。

もっとクラス?などを使ってわかりやすく書いたほうがいいのでしょうが、まだオブジェクト指向を理解し切れてないのでごちゃごちゃしてます。

あとはこれをcronで定期実行すれば、

 

f:id:HN8282:20151202152255p:plain

 

 OFFのボタンはただのメールリンクになっていて、タップするとメーラーが起動します。

メールを送るとONになりますがcronの実行タイミングの関係で最大1分ラグがあります。

 

 

#coding: utf-8
require 'gmail'
require 'pi_piper'
require 'net/ping'
require 'csv'

LOCKFILE = "/home/pi/www/stove.lock"
LOGFILE = "/home/pi/www/stove.log"
STATUSFILE = "/home/pi/www/csv/status.txt"
ON_MASSAGE = "<a href=mailto:"ラズパイのメルアド"?subject=ストーブ消して data-ajax=false class=ui-btn> ON </a>";
OFF_MASSAGE = "<a href=mailto:"ラズパイのメルアド"?subject=ストーブつけて data-ajax=false class=ui-btn> OFF </a>";

    def pin17on
    pin = PiPiper::Pin.new(:pin => 17, :direction => :out)
    pin.on
    end

    def pin17off
    pin = PiPiper::Pin.new(:pin => 17, :direction => :out)
    pin.off
    end

USERNAME=  #gmailのアドレス
PASSWORD= #gmailのパスワード

#ネット接続が失われたらオフにする
addr = 'google.co.jp'
pinger = Net::Ping::External.new(addr)

t =  Time.now
if pinger.ping?
      puts 'ping ok'
    
    data = [t.strftime("%m%d"),t.strftime("%H:%M"),'ok']
    CSV.open( "/home/pi/www/netstatus.csv", "a" ){ |csv|
  csv <<  data }
else
    open(STATUSFILE, "w") {|f| f.write OFF_MASSAGE}
    pin17off
    if File.exist?(LOCKFILE) then
    File.delete(LOCKFILE)
    end
    data = [t.strftime("%m%d"),t.strftime("%H:%M"),'ng']
    CSV.open( "/home/pi/www/netstatus.csv", "a" ){ |csv|
  csv <<  data }

end

pin2 = PiPiper::Pin.new(:pin => 18, :direction => :in)
pin2.read
PINSTATUS = pin2.value


if File.exist?(LOCKFILE) then
    open(STATUSFILE, "w") {|f| f.write ON_MASSAGE}
    if PINSTATUS == 0 then
    pin17on
    end
else
    open(STATUSFILE, "w") {|f| f.write OFF_MASSAGE}
    if PINSTATUS == 1 then
    pin17off
    end
end

gmail = Gmail.new(USERNAME,PASSWORD)
mails =  gmail.inbox.emails(:unread).map do |mail|
  #emailsの引数には:all,:read,unreadがある
  #件名、日付、From、To
  #puts "Subject: #{mail.subject}"
  #puts "Date: #{mail.date}"


if mail.from == ["自分のメルアド"] then

    if mail.subject == "ストーブつけて" then

        if PINSTATUS == 1 then
        message = 'もうついてるよ'
        else
        message = 'ストーブつけたよ'
        pin17on
        end

            File.open(LOCKFILE, "w"){|f|}
        open(STATUSFILE, "w") {|f| f.write ON_MASSAGE}
        SEND = message
        Mailto = mail.from

    elsif #{mail.subject} == 'ストーブ消して' then
        if PINSTATUS == 1 then
        pin17off
        SEND = "ストーブけしたよ"
        else
        SEND = "ストーブ消えてたよ"
        end

        if File.exist?(LOCKFILE) then
        File.delete(LOCKFILE)
        open(STATUSFILE, "w") {|f| f.write OFF_MASSAGE}
        end
        Mailto = mail.from
        
    end

 else
 SEND = mail.from
 SEND =SEND.to_s + "からメールだよ"
 Mailto = "自分のメルアド"

end
gmail.disconnect


if SEND

gmail = Gmail.new()
Timenow = Time.now.to_s


gmail.deliver do
    to Mailto
    subject SEND
    text_part do
        body Timenow
    end
end

end
end

 

感想と課題

今IoTの分野がホットということで、とりあえず動くものができて満足。

ただしRaspberryPi自体の安定性とストーブを無人で動かす危険性から常用は無理ですね。

 

課題

・Webアプリを作って詳細なタイマー設定などを作る

・安全性のためWebカメラをつなげて監視?

・ストーブという時点で危険性は不可避なのでオイルヒーターを買う(new!)

 

まだまだ試したいことはあるので、色々いじって勉強したいと思います。