特定のCSVを定期的にGoogle Spreadsheetへ自動で更新する方法【GAS】

表題の通り、とあるCSVGoogle Spreadsheetへ書き出す必要があったですが、手動ではかなり面倒・・・。よって自動で何かできないか調査して、結果できたものを共有します。

前提

  • CSVはオンラインでアクセスできるURL
  • CSVフォーマット
    • 区切り記号はカンマ(,)
    • 各項目がダブルクオーテーションにて囲まれている
    • 項目内に改行あり ※これ重要

コード

function auto_csv(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('test');

    var url = "https://www.test.com/test.csv";
    var blob = UrlFetchApp.fetch(url).getBlob();

    // データ取得
    var data = blob.getDataAsString();
    
    // 2次元配列に転換
    var ary = CSV.parse2(data);
    //var ary = Utilities.parseCsv(data); // これが使えなかった・・

    // シートに反映
    sh.getRange(1,1,ary.length,ary[0].length).setValues(ary); 

}

// csv parse
// 参考:javascriptでCSVのparser/stringifierを書いてみた - Qiita
// https://qiita.com/weal/items/5aa94235c40d60ef2f0c
var CSV = {};
CSV.parse2 = function(str) {
    var i, c, r, q, l, m, v, j, len=str.length, rows = [], row = [];
    m = (l = str.indexOf('\r\n')<0 ? str.indexOf('\r')<0 ? '\n' : '\r' : '\r\n').length; //改行記号を決定
    for(i=0,c=r=-1; i<len; i++) {
        if (str.charAt(i) === '"') { //quoted
            for(j=0,q=i+1; q<len; j++,q++) { //閉quotを探す
                q = (q=str.indexOf('"',q)) < 0 ? len+1 : q; //quotの位置、無いなら末尾まで
                if (str.charAt(++q) !== '"') {break;}       //""なら継続
            }
            row.push((v=str.substring(i+1,(i=q)-1),j) ? v.replace(/""/g,'"') : v);
        } else { //not quoted
            if (c<i) {c=str.indexOf(',',i);c=c<0?len:c;} //直近のカンマ位置と
            if (r<i) {r=str.indexOf(l,i);r=r<0?len:r;}   //直近の改行位置を調べ
            row.push(str.substring(i,(i=c<r?c:r)));      //そこまでを値とする
        }
        if (i === r || l === (m>1?str.substr(i,m):str.charAt(i))) {rows.push(row);row=[];i+=m-1;}
    }
    str.charAt(i-1) === ',' && row.push(''); //,で終わる
    row.length && rows.push(row);
    str.substr(i-1,m) === l && rows.push([]); //最後の改行を無視する場合はコメントアウト
    return rows;
};

解説・所感

ネットで調査していると「Utilities.parseCsv」を使ったものがほとんどだったのですが、そうすると項目内にある改行に対応できなかったです。(結構ハマりました・・・) よってなにか無いと思って調べていたところ以下のオリジナルのparserと出会い、試しにやってみるとできました!
javascriptCSVのparser/stringifierを書いてみた - Qiita
https://qiita.com/weal/items/5aa94235c40d60ef2f0c

感謝

マイクがPC内部の音を拾ってしまう件

先日ゲーミングパソコンを衝動買いして初めてDiscordを使っていろんな人と一緒にゲームをやろうと思ったのだが、どうも自分のパソコン内の音=ゲームの音をマイクが拾ってしまい、まともに会話ができないという自体が発生した。

向こうからすると自分のゲーム音が聞こえてしまいうるさいという状態だ・・・

結論直ったのだがここに同じ現象に悩んでいる人のためにメモしておく。

結論

Realtekサウンドカードの「音響エコーキャンセル」をチェックを入れることで直った
追記1:結局駄目でわからず・・・
追記2:ヘッドセットが原因でした・・・新しいのに変えたら全く問題なく。やっぱり安物はダメですね、、

ただし、、調べていると結構環境によって異なるようでそれ以外の原因もあるようだったのでそれも共有します。

調査1

「pc音 マイク 拾う」で検索してみると結構同じ現象で悩んでいる人がいるらしいのだが解決までは至っていないようだった・・・
https://goo.gl/F7VF1m

調査2

そこで英語サイトを検索してみた。
「Pick up the sound Microphone pc game」
https://goo.gl/AqzWh2

そうすると結構出てきたので、内容をピックアップします。

ステレオミキサー系の設定をいじる

Microphone is picking up output sound - [Solved] - Components
http://www.tomshardware.com/answers/id-2023728/microphone-picking-output-sound.html


そもそも逆にPC内部の音+マイク音を録音したい場合はステミキ(ステレオミキサー)という機能をつかうらしい。


水おいしいです^o^: WindowsVista/Windows7のステミキ確認方法(通常)
http://vad.seesaa.net/article/136390379.html


なのでその設定をOFFにしてみる。または上記サイトの内部の設定をいろいろいじってみる。

ハードウェア系の問題

Sound output is being picked up by my microphone. - Components
http://www.tomshardware.com/forum/326154-28-sound-output-picked-microphone


これは非常に興味深かったのだが、ハードウェアの問題の可能性もあるとのこと。ゲーミングパソコンとかだと後ろや前に複数あったりするが、それが内部で交差?しているかマイクのシールドが不足?しているとかそのあたりの原因もあるっぽい。(すいません、自分はあまり理解できておらず・・)

面倒なのでGoogle翻訳そのままをコピペしまする。

私もこの問題を抱えていて、問題を解決しようとすると膨大な作業をしました。私は健全なエンジニアリングで多くの経験を持ち、可能な限りすべてをテストしました。私は文字通りこれを理解しようと30時間以上を費やし、同じ問題を解決している20人以上のスレッドを読んだ。

私はついにこの問題を解決しました。私はantec 1200 v3のケースを持っていて、私は私のスピーカー用のリアオーディオアウトジャックと私のヘッドフォン用のフロント2ポートを使用していました。私は最終的には、フロントオーディオポートがシールドされていないか、または入出力入出力線が交差していると結論付けました。スピーカーをフロントポートに接続し、ヘッドセット(出力と入力)を自分のコンピュータの背面から自分のmoboに直接接続しました。これにより私の問題は100%修正されました。うまくいけば、これは助けになるでしょう!

あなたと同じ問題を抱えているのを見て登録しなければなりませんでした。これは私がそれを修正したものです。それはあなたのために働くことを願っています:)

1 クラシックビューでコントロールパネルに移動します。
2 realtech audio managerユーティリティを開きます。
3 録音中のミキサータブに移動します(左下に表示されます)。
4 オプションをクリックして、マルチストリーミングの録音を有効にします。

これがあなたの問題を解決するのを助けてくれることを願っています:)

私はこの2つの解決策がそれをしたと思います。私はこの問題を解決するために、最後の数週間すべてを試してきました。私は答えのためにオンラインフォーラムでページの後のページの後にページを読んで、私はちょうど上記の2つのアイデアを試してみました。さて、すべてが順調に進んでいるようです。私はどちらがそれをしたか(または両方があったかどうか)は確かではありませんが、ここに投稿しているので、おそらくそれから利益を得ることができます。

その理由はハードウェアの設計上の欠陥であり、ヘッドセットの電源はUSBであり、コンピュータは音声をどこに送信するのか混同されます。6フィートのUSB延長コードを購入し、電源のためにUSBの壁の充電器を使用してください。これで問題は解決します。

最後に

以上、もし同様の現象で悩んでいる人の解決の助けになることを祈って・・・

Windows用のゲームパッドをMacで使う

Mac上でPSのゲームできるようになったがキーボードだと操作しづらい。
なのでぷらりと立ち寄ったブックオフにてゲームパッドJC-U2410TBK)を発見したので400円ぐらいで購入


が、まったく動かない・・・


でいろいろ調べているといろんな方法があることがわかった。


a. 動くためのソフトを入れて設定する
b. エミュレーターのconfigで設定する


aは、「USB Overdrive」とか「GamePad Companion」ってのが有名らしい。有料っぽいが。
で試しにbでやってみたらいけたのでそれを紹介(PSCX)



1. Preferenceを開いてControllerのConfigureをクリック



2. ゲームパッドが認識されてたらこのようにDeviceに「USB Gamepad」と表示される。
(表示されてなかったら無理・・・)



3. ちとわかりにくいが右側でダブルクリックすると以下のようになるのでそこで対応するボタンを押すだけ
(この場合はCrossなので×ボタンの位置のボタンを押す)



以上

ecmファイルを解凍する(MacOS)

PCSXのソフトで「ecm」という拡張子のファイルが。
調べてみるとエミューレーターソフト関連でよく使われるものらしい
(軽くしか調べてない・・)

どうもそれを解凍してisoファイルにする必要あるっぽいので調査。


1. 以下より解凍ソフトをダウンロード
https://drive.google.com/file/d/0B7W70ATEvsNdLW5LV2xSaTFTVDQ/edit


2. ダウンロードしたファイルを解凍


3. 解凍してでてきた「unecm」を解凍したいecmファイルがあるフォルダにコピー


4. ターミナルを起動して先ほどのフォルダへ移動


6. 以下のコマンド発動

./unecm ecmファイル名

以上


参考:
https://plus.google.com/+JeremyWininger/posts/KfThGGnfHeo

PCSXで「Missing BIOS!」

PlaystationのMoonをどうしてもやりたくていろいろ調べて
エミューレーターの「PCSX」をダウンロード。

しかし以下の文言がでて起動できない。

Missing BIOS!
Pcsx wasn't able to locate any Playstation BIOS ROM files. This means that it will run in BIOS simulation mode which is less stable and compatible than using a real Playstation BIOS.
If you have a BIOS available, please copy it to
~/Library/Application Support/Pcsx/Bios/

調べてみるとBIOSをダウンロードしてきて特定のフォルダに置くらしい。


1. 以下よりBIOSをダウンロード
直リンク
http://www.instructables.com/files/orig/F1G/T4U4/G51GRK14/F1GT4U4G51GRK14.zip

無理な場合は以下より「pcsxr-1.9.92-macosx.zip」をクリック
http://pcsxr.codeplex.com/releases/view/50048

※本体は1.9.93だが問題なかった。


2. ダウンロードしてきたものを解凍

3. 解凍後に出てきた「SCPH1001.BIN」を以下にコピー

/Users/username/Library/Application Support/Pcsx/Bios


以上


画面より音が懐かしくて感動すぎる


参考:
http://theultralinx.com/2012/06/installing-playstation-emulator-pcsx-reloaded-os-lion/

Iconというファイルについて

Finderにて不可視ファイルを見えるように設定しているのだがふと「Icon」というファイルがあるのに気づく。よくわからないので気づいたら削除していたのだが何なのか調べてみると、どうやらFinderのフォルダのアイコンらしい。



↑こいつ


たしかに「Icon」ファイルを削除すると消えるのである。


ターミナルだとこういう表示

$ls -la Icon^M
-rw-r--r--@ 1 hoge  staff  0  4  8 20:47 Icon?


GitのIgnoreリストに入れれば消える。

$cat /Users/hoge/.gitignore_global
Icon?


詳細を知りたければ以下を参考してください。
Icon? file on OS X desktop

Finder にて右クリックしたときにGoogle Driveアプリの表示がない

タイトルの通り。調べてみるとMacOSをYosemiteにアップしてから表示されていないっぽい。


調査してみると以下のコマンドをターミナルから叩くだけ!

sudo cp /Applications/Google\ Drive.app/Contents/Helpers/Google\ Drive\ Icon\ Helper /Library/PrivilegedHelperTools/


表示された!!


参考:
http://superuser.com/questions/828518/google-drive-app-not-working-in-osx-yosemite
http://ralfrottmann.net/fix-google-drive-mac-app-on-yosemite
https://productforums.google.com/forum/#!topic/drive/Jxpu1MXKx7Q%5B1-25%5D