インターネット上のサイトをアプリのように使う方法

できることならソフトをインストールしたくない

外出が多い生活をしているので、デスクトップとラップトップを必要に応じて使い分けています。 腰を据えるときには、フルサイズのキーボードと大きなディスプレイを使いたいので、デスクトップを使いたい。 クラウドストレージを利用すれば、データの共有は解決できますよね。設定さえしておけば、勝手に同期してくれますし。
問題はアプリケーション側。できる限りデスクトップとラップトップを同じ環境で使いたい。

そもそもソフト使わなければいいんじゃね?

ここ最近はクラウドサービスが便利になって、オフィスワークなどはソフトをインストールしなくても十分実用的な使い方ができるようになりました。 ソフトのライセンスを買わなくてもいいですし、クラウドで同期されるのはとても便利。
そういうコンセプトChromebookなのですけど、普段使ってるのがWindowsマシンなんですよね。Illustratorとか使いたいですし。

Chromeの起動オプションを利用してWebサービスをアプリ風に起動する

というわけでChromeをアプリ風に立ち上げてみましょう。Webサービスをアプリ風に起動す れば、手軽に使えるはずです。

やってみる

Step1.アプリ化したいサイトのアドレスを調べる

普通にアドレスバーからコピーすればいいですね。
f:id:kana_yaz:20170923185254p:plain

Step2.Chromeのショートカットを作成する

デスクトップに既にChromeのショートカットがあれば、それをコピペします。なければ作りましょう。
f:id:kana_yaz:20170923185256p:plain

Step3.プロパティーを編集する

作ったショートカットを右クリックして、[プロパティ]を選択。編集するのはリンク先の項目です。
リンク先アドレスの最後に
' --app=設定URL'と入力します。
例えばYahoo!だと
' --app=http://www.yahoo.co.jp/'
となります。
最後に[OK]をクリックして終了。
f:id:kana_yaz:20170923185257p:plain

名前もかえておく

"Chromeのコピー"みたいな名前になっているはずなので、わかりやすい名前に変更します。

Step4.ショートカットを使う

ダブルクリックすればアプリケーションのように起動します。メニューやバーが消え、Webサービス自体が一つのウィンドウとして起動します。 f:id:kana_yaz:20170923185258p:plain

便利そうなWebサービス

Excel Online / Word Online

みんな大好きExcelのオンライン版です。マクロ以外ならある程度の作業をこなせますので、地味に便利ですね。ファイルはOneDriveに保存するのが基本となります。
自宅で使うのだったらこれで十分なのかもしれませんね。 f:id:kana_yaz:20170923185300p:plain

日常業務

常に業務を行うためには、スムーズにログインできたほうがいいですね。

注意ポイント

Webサービスですので、当然の様にログインが必要なサービスではログインを求められます。そこら辺が面倒に感じるようなら、Chromeにパスワードを登録したり、自動ログインにすればいいかと思います。

URLに=などが入っている場合は、下のように--app=以降をダブルクオーテーションでくくってあげましょう。 '-app="http://www.hogehoge.net/key=xxyyy"'

工具用ライトをメガネにつけると便利

便利なライトがあった

出先で細かい作業することが多い生活をしているのですが、稀に現地環境が暗いときがあるんですよね。
今まではジェントスのヘッドライトを使っていたのですが、バンドが緩んで光軸がずれたり、狭い場所に頭を入れるときに引っかかったりして不便だなと感じていました。
あとは自分が悪いんですが、どうしても荷物になってしまうので、忘れてしまったりとかして。

工具用ライトを本体メガネに装着するライフハック

ふと秋葉原に行ったとき、あきばおーの店頭で見つけたのが、エーモンDIYライト
ドライバーの軸とかにつけるのかー、便利そうだなー。と思ってパッケージの使用例を見たところ、メガネへの装着事例が。
こ れ だ 。
f:id:kana_yaz:20170716180024j:plain

エーモン DIYサポート DIYクリップライト 5177

エーモン DIYサポート DIYクリップライト 5177

本体メガネへの装着例

こんな感じですね。ある程度太さがあるフレームだったら容易に取付可能です。細いメタルフレームは安定しないかもしれません。
f:id:kana_yaz:20170716180022j:plain

ドライバーへの装着例

こんな感じです。円形軸だと回ってしまうことがあります。ヘキサレンチとかでしたらがっちりいきますけど。
f:id:kana_yaz:20170716180023j:plain

ところでどちらの商品なのでしょう

インターネッツを見ていたら、「ウェーブ開発部ブログ : 暗い隙間もピンポイント照明! HG LEDクリップライトをご紹介!」というページを発見しまして。
これ、元々開発したのがウェーブさんで、エーモンがOEM供給受けているのかな?同じものがトラスコ中山ブランドでもありますね。
ウェーブさんのヤツは2個セットで大変お買い得ですね。

ウェーブ HG LEDクリップライト 2個セット

ウェーブ HG LEDクリップライト 2個セット

)

電池交換が不便でなければなおよし

電源はLR41を3つです。中を開けてみたところ、白色LEDの脚を曲げて電池に接触させるという単純な構造でした。
f:id:kana_yaz:20170716192858j:plain
f:id:kana_yaz:20170716192857j:plain
使用方法にもよるのですが、公称10時間の点灯時間から大きく外れることはありませんでした。 電池交換は精密ドライバーでネジを2箇所外します。大きさ的にやむを得ないのでしょうけど、少々面倒です。

注意ポイント

これ。付けてても違和感ないんですよね。 ですので、作業終わりにメガネから外すのを忘れる恐れがあります。というよりか忘れました。
帰宅して気がついたらライトが点灯していることが。。
そうすると光ってる人になってしまいますので。

LAMYサファリのインスパイア品、Jinhao599を手に入れた

LAMYっていいですよね

LAMYのサファリっていいよね、って話を先日しました。いいですよね。万年筆の癖にタフで雑に扱えるの、ほんとラクでいいです。 kana-yaz.hatenablog.jp

大陸ならインスパイア品もある!

前々からAliで見て気になってた万年筆がありまして、それがJinhao 599ってやつ。 Jinhao(Shanghai Qiangu Stationery Co.,ltd)は中国のメーカーなのですが、そこがしれっとLAMY Safariインスパイア品をラインナップに持ってまして。というよりかラインナップ見ると、なんかどこかで見たことのあ(ゲフ)

上海千古文具有限公司

ポチればいいと思うの

Aliでそのまま買おうかと思ったのですが、追跡なし郵便は怖い&追跡つけると送料が高い、ということでAmazon経由で買いました。

10本セットでニブの記載なし、でしたがまぁこの価格に贅沢は言えませんね。中国発送かと思ったのですが、国内発送で、4日には届いておりました。

開封

f:id:kana_yaz:20170222152643j:plain トレイに10本収まって、プチプチ封筒に入れて送られてきました。個包装のビニールもシンプルで、箱もなくゴミが少ないのはいいですね。 こうやってカラフルに並ぶと、少し嬉しいです。色覚異常だけど。

f:id:kana_yaz:20170222152645j:plain 10本並べてみるとこんな感じです。
レッド、ブラック、ブルー、ホワイト、イエロー、
クリアオレンジ、クリアグリーン、クリアブルー、 クリアブラック、クリア、
の10本セットです。

バラしてみると

バラしてみるとこんな感じです。スクリュー式のコンバーターが標準で添付されています。ペン先は国際EFぐらいですかね。 f:id:kana_yaz:20170222152647j:plain

キャップにはステンレス(?)を曲げたクリップがついています。大柄で厚めの布でも挟めるのはポイント高いですね。 f:id:kana_yaz:20170222152646j:plain

コンバーターは欧州標準規格のようです。 f:id:kana_yaz:20170222152648j:plain

LAMYと比較

f:id:kana_yaz:20170222152644j:plain 樹脂の質感は安っぽい値段なりです。LAMYサファリが高級ペンに見えます。でも並べることなんてないんですから、いいんです。それっぽければ。

f:id:kana_yaz:20170222152649j:plain コンバーターとかボディが使い回せればいいなー、と思っていたのですが、さすがにそれは無理なようで。
サイズ感は似通ってるのですが、ネジのピッチが違ったり、コンバーターの規格が違うので、入れ替えは難しそうです。
サファリのまんまコピーだったら、着せ替えして遊べたのに。けっ。

書き味

f:id:kana_yaz:20170222152650j:plain 中華万年筆舐めてました。ごめんなさい。すごくいいです。
インクもそれなりにするする出ますし、ペン先が柔らかいのも疲れにくくて。

Twilio + Google Apps Scriptで着信拒否つき留守電サービスを作る

格安SIMにしちゃうと留守電代金も惜しくなる

docomoからiijに移行してから、もうすぐ2年ぐらいにはなるのですけど、そういえば留守電的なのを契約してなかったんですよね。
一応プランとしては存在するのだけど、月額300円はちょっと課金するにも惜しいなと。
料金・仕様 | タイプD | IIJmio

まぁ、無いときは作ることにします。
今回は、業務でガチャガチャいじったこともあり、TwilioとGoogle Apps Scriptで実装することにしましょう。

Twilioとは?

最近はやりのクラウドですね。クラウド電話APIといいまして、クラウド経由でWebサービスと電話を連携すれば便利じゃね?
みたいなサービスです。国内だとKDDIさんが提供しています。基本的には従量課金。
詳細は本家のWebでも見て下さい。

Twilio for KDDI Web Communications | クラウド電話API

Google Appsとは?

GoogleVBAみたいなもんです。
Google 様のアナルを舐めれば幸せになれる の各種サービスを便利に使える言語 でして、サーバー側でJavascript的なものが動いているという認識で大丈夫かと思います。
Googleサービスだと、GmailだのカレンダーだのDriveだのいろいろとあるわけですが、そこら辺を使ってゴチャゴチャできるわけです。
詳細は下記あたりで。

Apps Script  |  Google Developers

まずはTwilio側の準備

Twilioアカウントを作る

Twilioのサイトにアクセスし、右上の[サインアップ]から登録します。
途中でSMS認証を求められるので、携帯電話番号を一つ用意しないといけません。

Twilio for KDDI Web Communications | クラウド電話API
f:id:kana_yaz:20170222013603p:plain f:id:kana_yaz:20170222013555p:plain

認証を終了するとチュートリアルが云々と出ますので、見るといいかと思います。
GetStartedで飛ばしてもいいですけど。
f:id:kana_yaz:20170222013602p:plain

Twilioのダッシュボードはこんな感じです。
f:id:kana_yaz:20170222013604p:plain

電話番号を取得する

今回の留守電は、自分のケータイに着信した電話を、時間をトリガーにしてTwilio側に転送する形になります。
取りあえず一つ、電話番号を取得します。
コンソールダッシュボードの[プログラマブルVoice]をクリック。

電話番号ダッシュボードが表示されます。 赤色の[始めましょう]をクリック。 f:id:kana_yaz:20170222013600p:plain

初期状態だと番号が払い出されていないですので、 [最初のTwilio電話番号を取得]をクリック。 f:id:kana_yaz:20170222013556p:plain

いきなり番号を提示されます。表示された番号が気にくわないなら、「別の番号を検索する」リンクをクリックすれば、選択画面に移行します。 f:id:kana_yaz:20170222013557p:plain

取得できる番号が羅列されます。どれでもいいんじゃね、とは思いますが、特定の番号が含まれる電話番号なども検索可能です。 f:id:kana_yaz:20170222013558p:plain

無事に取得できました。 f:id:kana_yaz:20170222013559p:plain

続いてGoogleDrive側の下準備

Web版のGoogleDriveが使える状態を前提に進めます。
f:id:kana_yaz:20170222013605p:plain

‘Twilio'フォルダと'Record'フォルダを作る

正直フォルダ階層の概念はGoogleAppsScriptには存在しないのですが、人間様がわかりづらいですので、ルートの直下に「Twilio」とでもフォルダを作りましょう。今回はそこにいろいろとファイルを置いていきます。
作成したフォルダの直下に「Record」というフォルダも作りましょう。そこに録音データを保存していきます。

Apps Scriptの準備

まずはApps Scriptを使えるようにします。
Web版GoogleDriveの[新規]→[その他]→[アプリを追加]とクリック。
f:id:kana_yaz:20170222013542p:plain

ドライブにアプリを追加、というウィンドウが表示されますので、検索欄に'script'と入力。
Google Apps Scriptがサジェストされますので、[接続]をクリック。
ドライブに接続されました、というウィンドウが表示されれば問題なしです。次へ進みます。
f:id:kana_yaz:20170222013543p:plain f:id:kana_yaz:20170222013544p:plain f:id:kana_yaz:20170222013545p:plain

記録用に使うスプレッドシートを作る

今回はログをGoogleスプレッドシートに記録していきます。Excelみたいなやつですね。
スクショは忘れましたが、マイドライブの[新規]→[Googleスプレッドシート]とクリックすれば作成できます。

新規作成できたら、シート名を「twilio」に設定し、「log」というシートと「blocking」というシートの2つ作ります。
「log」が電話ログを記録するシート、「blocking」が拒否する電話番号を記載するシートです。
f:id:kana_yaz:20170222013541p:plain

もしかしたら「blocking」シート側に何もはいってないとエラー出ちゃうかもしれませんので、 何か適当に拒否したい人間の番号を1列目に入れておいてください。
親とか実家とか

スクリプトファイルを作る

今回は、一番最初に電話を受けるスクリプト、留守電を録音するスクリプト、の2つファイルを作ります。
マイドライブの[新規]→[その他]→[Google Apps Script]とクリック。
f:id:kana_yaz:20170222013546p:plain

エディタが開きますので、'twilio'とでも名付けましょう。
作成直後は'myFunction'みたいなやつが出てきますが、不要です。
f:id:kana_yaz:20170222013538p:plain

同じ事を繰り返して、もう一つは'twilio_record'にでもしましょう。

Moment.js を使えるようにする

日付云々でラクなライブラリ、Moment.jsを使えるようにしましょう。
各々のスクリプトファイルで必要になりますので、このタイミングで使えるようにしましょう。

メニューバーの[リソース]→[ライブラリ]とクリック。
「含まれているライブラリ」ウィンドウが表示されますので、 [ライブラリを検索]テキストボックスに下記のプロジェクトキーを入力し、[選択]をクリックします。 バージョンのプルダウンから最新版を選び、[保存]で確定させてください。

MHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48

f:id:kana_yaz:20170222013549p:plain よくよく考えれば、今回のスクリプトには必須ではないので、そこら辺は適時でお願いします。

構成の確認

こんな感じですかね。 f:id:kana_yaz:20170222021535p:plain

必要になるもののメモ

Twilioの ‘ACCOUNT SID'と'AUTH TOKEN’

Twilioのコンソールダッシュボードに書いてありますので、コピーしておきましょう。 f:id:kana_yaz:20170222013548p:plain

‘Record'フォルダの'FolderID’

録音データの保存先として作成した'Record'フォルダのIDです。 GoogleDriveで'Record'フォルダを開き、アドレスバーに書いてある英数字の羅列をコピーしておきましょう。 f:id:kana_yaz:20170222022846p:plain

‘twilio'スプレッドシートのID

フォルダと同じく、先ほど作成したスプレッドシートのIDもコピーします。 フォルダIDと同じく、アドレスバーに書いてある英数字をコピー。

コードをガリガリ書いていく

あとはひたすらコードを書いていきます。   詳細の解説は気が向いたら書くことにします。

‘twilio_record'スクリプト

まずは録音側。

//Twilio
var twilioSid='{ twilio の ACCOUNT SID }';
var twilioAuth='{ twilio の AUTH_TOKEN }';


function doGet() {
  return;
}



function doPost(e){
  
  var fileName = Moment.moment().format('YYYY/MM/DD-hhmmss');

  var recordUrl = e.parameter['RecordingUrl'];

  var caller=e.parameter['Caller'];
  caller=caller.replace('+81','0');

  var result = UrlFetchApp.fetch(recordUrl);
  var fileBlob = result.getBlob();
  fileBlob.setName(fileName);

  //GoogleDriveに録音データを保存
  var outputDir = DriveApp.getFolderById('{ GoogleDriveのDriveID }');
  var recordDetails = outputDir.createFile(fileBlob);
  var sharingUrl = recordDetails.getUrl();

  //Twilioサーバーの録音データを消去
  delRecord(recordUrl);
  
  //メールを送信
  sendMail(caller,Moment.moment().format('YYYY/MM/DD hh:mm'),sharingUrl);
  
  var out = ContentService.createTextOutput(buildXml());
  out.setMimeType(ContentService.MimeType.XML);
  return out;

}


function buildXml(){
  
 var outString = '';
  
  outString +='<?xml version="1.0" encoding="UTF-8"?>';
  outString += '<Response>';
  outString += '<Say language="ja-jp" voice="woman">';
  outString +='メッセージをお預かりいたしました。 ';
  outString +='お電話ありがとうございました。';
  outString += '</Say>';
  outString += '<Hangup />';
  outString += '</Response>';
  
  return outString;

}

function delRecord(urlData){

  urlData+=".json";
  var options = {
    method: "delete",
    headers: {
      Authorization: " Basic " + Utilities.base64Encode(twilioSid + ":" + twilioAuth)
    },muteHttpExceptions: true
  };
  var result = UrlFetchApp.fetch(urlData,options);

}

function sendMail(callerString,dateString,urlString){
  
  var mailTo='{ 通知メールを飛ばすメールアドレス }';
  var mailSubject='留守電通知';
  var mailBody='';
  
  mailBody += '留守電がありました\n';
  mailBody += '日時 : ' + dateString + '\n';
  mailBody += '相手先 : ' + callerString + '\n';
  mailBody += '録音データ : ' + urlString + '\n';
  
  MailApp.sendEmail(mailTo,mailSubject,mailBody);
  
}

最後のおまじない

編集が終わったら、メニューバーの[公開]→[ウェブアプリケーションとして導入]をクリック。 f:id:kana_yaz:20170222013551p:plain

現在のウェブアプリケーションのURLに書いてあるURLをコピーしましょう。次のスクリプトファイルで使います。
アプリケーションにアクセスできるユーザーは、「全員(匿名ユーザーを含む)」にしないとうまくいきません。

承認を求められるので[許可を確認]をクリック。 f:id:kana_yaz:20170222013539p:plain

なぜだか一旦無効にしないとうまくいかない、GoogleAppsScriptの謎。
ということで、再度メニューバーから[公開]→[ウェブアプリケーションとして導入]をクリック。 開いたら[ウェブアプリケーションを無効にする]をクリックし、[はい]で決定。 f:id:kana_yaz:20170222022847p:plain

再びメニューバーから[公開]→[ウェブアプリケーションとして導入]をクリックし、公開し直します。

よくわかんないですが、おまじないみたいなもの なので忘れないように。

‘twilio'スクリプト

var Sheets=SpreadsheetApp.openById('{ スプレッドシートのID }');
var logSheet=Sheets.getSheetByName('log');
var blockSheet=Sheets.getSheetByName('blocking');


function doGet(e){
  return;
  
}

function doPost(e){
  return receive_(e);
}

function receive_(e){
  
  //発信者情報を取得
  var caller=String(e.parameter['Caller']);
  caller=caller.replace('+81','0');
  
  //BlockingListの判定
  var blockArr=blockSheet.getRange(1,1,blockSheet.getLastRow(),1).getValues();
  var blockRes=blockArr[0].filter(function(element,index){
    if(String(element) ==String(caller)){
      return true;
    }
  });
  
  
  var out;
  var setRow=logSheet.getLastRow()+1;
  if(blockRes.length==0){ //Block判定ではない
    logSheet.getRange(setRow,1).setValue(Moment.moment().format('YYYY/MM/DD hh:mm'));
    logSheet.getRange(setRow,2).setValue(caller);
    logSheet.getRange(setRow,3).setValue('record');
    var result=buildXml();
    out = ContentService.createTextOutput(result);
  }else{ //Block判定
    logSheet.getRange(setRow,1).setValue(Moment.moment().format('YYYY/MM/DD hh:mm'));
    logSheet.getRange(setRow,2).setValue(caller);
    logSheet.getRange(setRow,3).setValue('blocked');
    var result=buildXmlBlock();
    out = ContentService.createTextOutput(result);
  }
  out.setMimeType(ContentService.MimeType.XML);
  
  return out;
  
}

function buildXml(){
  
 var outString = '';
  
  outString +='<?xml version="1.0" encoding="UTF-8"?>';
  outString += '<Response>';
  outString += '<Say language="ja-jp" voice="woman">';
  outString += 'ただいま、電話に出ることができません。 ';
  outString += 'メッセージを録音します。 ';
  outString += '「ピー」という音の後に、60秒以内で、お名前、お電話番号、ご用件を録音し、';
  outString += '最後にシャープを押してください。';
  outString += '</Say>';
  outString += '<Record action="{ twilio_recordスクリプトのウェブ公開URL }" finishOnKey="#" maxLength="60" method="post" timeout="75" />';
  outString += '</Response>';
  
  return outString;  
  
}

function buildXmlBlock(){
  
 var outString = '';
  
  outString +='<?xml version="1.0" encoding="UTF-8"?>';
  outString += '<Response>';
  outString += '<Reject />';
  outString += '</Response>';
  
  return outString;  
  
}

こちらも最後のおまじない

編集が終わったら、メニューバーの[公開]→[ウェブアプリケーションとして導入]をクリック。 f:id:kana_yaz:20170222013551p:plain

現在のウェブアプリケーションのURLに書いてあるURLをコピーしましょう。Twilioのページで使います。
アプリケーションにアクセスできるユーザーは、「全員(匿名ユーザーを含む)」にしないとうまくいきません。

承認を求められるので[許可を確認]をクリック。 f:id:kana_yaz:20170222013539p:plain

なぜだか一旦無効にしないとうまくいかない、GoogleAppsScriptの謎。
ということで、再度メニューバーから[公開]→[ウェブアプリケーションとして導入]をクリック。 開いたら[ウェブアプリケーションを無効にする]をクリックし、[はい]で決定。 f:id:kana_yaz:20170222022847p:plain

再びメニューバーから[公開]→[ウェブアプリケーションとして導入]をクリックし、公開し直します。

よくわかんないですが、おまじないみたいなもの なので忘れないように。

スクリプトのURLをTwilioに反映

Twilioのコンソールダッシュボードから電話番号ページに飛び、先ほど取得した番号を選択します。 f:id:kana_yaz:20170222013601p:plain

‘twilio'スクリプトウェブアプリケーションURLを、[A CALL COMES IN]項目のURL欄に貼りつけます。
POSTかGETを選べますが、POSTにしといてください。[保存]を押して終了。 f:id:kana_yaz:20170222013536p:plain

動作確認

試しに、先ほど作った番号に電話してみましょう。


twilio_record_test

メール通知が来ます

留守電の記録&ブロックが発生すると、メールで通知が来るようにしました。
GoogleDriveへのリンクも貼ってあります。 f:id:kana_yaz:20170222033042j:plain

GoogleDriveに録音データがアップされます

録音ファイルはこちらに。
f:id:kana_yaz:20170222033044j:plain

スプレッドシートには

記録されてますね。ブロックされたものは'blocked'表記になります。 f:id:kana_yaz:20170222033043j:plain

誰でも簡単に

こういうものが作れる時代って便利ですね。実際にコード書いてた時間なんでせいぜい30分ですし。
コードを書いている時間が30分に対して、この記事を書いた時間が1時間以上かかってるんですけどね!!

ヘッドフォンを自分で直す

ヘッドフォンの季節ですね

世間のふわふわした女子とかはイヤマフ使うんでしょうけど、あいにく自分はキモいんで、そういうのはちょっと難しい。
そんな自分が防寒具として使っているのがヘッドフォンでして、この季節に外出するときは大体ヘッドフォンをつけています。

酷使してると壊れるんですよね

f:id:kana_yaz:20161112224643j:plain たいした耳をしてないので高級ヘッドフォンは持っていないのですが、それでも壊れてしまうと地味に出費が痛い。
ヘッドフォンの壊れるところと言えば、自分の使い方だとジャック部分の断線が多数。他の方も殆どがそこだと思うんです。

修理して使えばいいんですよ

ここ最近はヘッドフォンの修理サービスも結構いろいろなお店さんで提供されていまして。有名どころだと eイヤホンさんとかがやってます。確かeイヤホンさんだと、4,000円とかだったかな。
余談ですけど、eイヤホンさん、行ったことがない方は実際に行ってみるといいです。スタッフさんたちがとても博識で、音楽が好きな人たちなんだなと思える、心地よい接客なので。

自分には高いので自分で直す

ジャック自体はそんなに高価なものでもないんですよね。100円とかで売ってますし。工賃としてeイヤホンの4000円って安すぎる設定だと思うんですがまあ、自分にとっては少しおしい金額なので、自分で直すことにします。

用意するもの

壊れたヘッドフォン

f:id:kana_yaz:20161112224644j:plain 今回直すのは、SENNHEISERのHD439です。
自分が持ってるSENNHEISER製ヘッドフォンのうち、MOMENTUMは疲れる、HD219は夏限定、HD598は重いので持ち出さない。ってカンジで。聴き疲れしなくて軽く、防寒性も高いHD439の出番が多いんですよね。 昨年に壊れて以降は放置状態で、勿体ないなあとずっと思っていました。

交換するイヤホンプラグ

自分の耳はゴミなので、こだわりなんてありません。それっぽければいいんです。 ということで今回使うのはAmphenol AudioのKS3P
f:id:kana_yaz:20161112224642j:plain 金属シェルなのに安いのでいいですね。ニッケルメッキですが、音質とかはあんまり気にしていないので、これでいいんです。同じ外観で金メッキのKS3P-AUもありますけど、店頭在庫がありませんでした。

自作用プラグ NOBUNAGA 3.5mm stereo plug

自作用プラグ NOBUNAGA 3.5mm stereo plug

工具一式

どこのご家庭にもある工具類で直します。なければ買いましょう。どこのご家庭にもあるかどうかは自信がないので、一式を買う手間考えればeイヤホン持ってったほうが安いです。 f:id:kana_yaz:20161112224641j:plain

直し方

ハンダするだけです。という雑さだと微妙かと思いますので、S2Sでいきましょう。

1.サックリいく

f:id:kana_yaz:20161112224639j:plain 一気にいきましょう。この機会ですから自分は長すぎる分を適度に切断してしまいました。交換するだけなら根元だけでいいと思います。 ケーブルが途中で断線しているようなら、断線しているところまで切ります。

2.コネクタの結線位置を確認する

f:id:kana_yaz:20161112224640j:plain 仕様書に載ってますから、しっかりと確認しましょう。音がでないとか、左右が逆になってしまったりします。
今回のヘッドホンは、茶色がGND、赤がR、青がLでした。

3.プラグのカバーをケーブルに通す

こういうのって絶対に忘れるんですよね。パソコン組み立てるときにバックパネル忘れちゃうやつと同じです。
ハンダする前に「必ず」プラグカバーを配線に通しましょう。ハンダした後に通すのを忘れたことに気付くと悲しいです。

4.ケーブルの被覆を剥く

f:id:kana_yaz:20161112224638j:plain カッターナイフでぐるりと切れ目を入れ、芯線を傷つけないように作業します。不安な方はワイヤストリッパーでも使いましょう。

5.リッツ線の被覆を剥く

f:id:kana_yaz:20161112224637j:plain ヘッドホンのケーブルには、リッツ線と呼ばれる配線材が使われていることが多いです。エナメル被覆をした線をより合わせたもので、そのままだとハンダがのりません。
ライター等で線材を炙ってエナメルを溶かし、燃えカスをきれいに除去します。炎の先で軽く炙る程度で大丈夫です。 軽くサンドペーパーで磨いた後、溶剤などできれいに拭き取ってあげるとよし。

6.ハンダする

f:id:kana_yaz:20161112224635j:plain リッツ線の先と端子部にちょいとハンダを盛って、しっかり温めつつハンダをのせます。 腕が3本あると非常にやりやすい作業なのですが、生憎人間の腕は2本だけなので、クリップスタンドなどを使うといいです。

DAIKITOOLドットコム 391B ヘルピングハンズ

DAIKITOOLドットコム 391B ヘルピングハンズ

7.端子部を補強する

f:id:kana_yaz:20161112224634j:plain この手順は好みとかあると思うのですが、接続部を補強するためにパテを盛ってあげます。 グルーガンや接着材モリモリでもいいかと思います。

8.確認する

f:id:kana_yaz:20161112224633j:plain LRが正しく接続されているかなど、確認をしましょう。

スマホとかで確認するなら、下のようなYoutube動画なんかがお便利です。


スピーカー・ヘッドフォン テストサウンド - Speakers,Headphones testing sound

またWindowsパソコンなら下の手順でチェックできます f:id:kana_yaz:20161212040557p:plain f:id:kana_yaz:20161212040559p:plain f:id:kana_yaz:20161212040600p:plain

以上

カンタンに誰でもできる作業なので、捨てるのがもったいない!という人はぜひ。

Windows Helloで指紋認証

パスワード設定してますか

自宅のパソコンであってもログオンパスワードを設定するのは当然のことなんだけど、地味に面倒くさい。 自分は長めのパスワードを設定しているので、余計に面倒くさい。 かといってフリーパスはイヤだ。
普段使っているラップトップに指紋認証がついているので、そのラクさに慣れてしまうと、パスワードを入力するのが面倒くさい。

指紋認証が欲しい

地味に高いんですよね、指紋認証。 最近、マウスコンピューターから安いユニットが出ましたけども、それでも5000円弱するし。
真皮まで読むような高級なヤツじゃなくてもいいので、ちょいっとつけておきたい。

富士通指紋認証ユニットを格安で

f:id:kana_yaz:20161124022623j:plain ここ最近オークションで出回ってる富士通製の指紋認証ユニットを店頭で見つけたので、調達してきました。パッケージ無しの新古Junk扱いで980円でした。店頭のPOPにはWindows10対応と書いてあるので、多分いけるな、と。
別にラクしたいがために必要であって、セキュリティをこうガチガチみたいなことは求めていないので、新古のパッケージなしでもいいんです。保証がなくてもいいんです。たぶんこれ、どこかの企業がリースパソコンと組み合わせて使ってたやつなんじゃないでしょうかね。
miniUSB接続って言うのが、そのものの古さを感じさせますね。メーカー希望小売価格は15000円だそうで、意外と安いなと。 www.fmworld.net f:id:kana_yaz:20161124023929p:plain

コイツ・・・Windows Helloに対応してるぞ・・・

f:id:kana_yaz:20161124024222p:plain サクっと挿したらサクッと認識しちゃったよね。WindowsUpdate経由でのドライバ適用で、すんなり認識してしまいました。
そしてWindows Hello対応デバイスとして認識しやがっています。

What's Windows Hello

Windows Hello とは
Windows Helloとは、Windows10が標準で対応している生体認証機能。OSに統合されています。指紋認証以外にも、コンピューター内蔵カメラを使った顔認証なんかもできます。
mouse USB顔認証カメラ Windows Hello 機能対応 CM01

ということでセットアップしましょう

Step.1

[Windowsの設定]→[アカウント] f:id:kana_yaz:20161124024215j:plain

Step.2

[アカウント]→[サインインオプション] f:id:kana_yaz:20161124024214j:plain

Step.3

[サインインオプション]→[指紋認証]→[セットアップ] f:id:kana_yaz:20161124024213j:plain

Step.4

指紋認証ユニットで指をスワイプし登録する。何回か繰り返す f:id:kana_yaz:20161124024220p:plain f:id:kana_yaz:20161124024221p:plain f:id:kana_yaz:20161124024219p:plain f:id:kana_yaz:20161124024218p:plain f:id:kana_yaz:20161124024217p:plain

Step.5

必要に応じて他の指もセットアップする f:id:kana_yaz:20161124024216p:plain

以上でセットアップは完了。次回以降のログオン時には指紋認証でログオンできるようになります。

せっかくなので

Windows10では生体認証がOSに統合されているので、以前に比べて敷居が下がりました。特殊なソフトを使ったりしなくてもいいですし、いちいち面倒なセットアップをしなくてもいい。
自分はログオンをラクにするためのデバイスとして使っていますが、もちろんセキュリティ強化にもつながるのではないかなと。
なによりいちいちキーボードで入力しなくてもよいので、サクッとログオンできますね。

いちおうパスワードも

生体認証でスムーズにログオンできるということは、デフォルトのパスワードは比較的難解なものにしちゃってもいいですよね。 普段は入力する必要がないですし。ただまぁ、パスワードの管理はしっかりやったほうがいいですね。
kana-yaz.hatenablog.jp

見慣れないUSB機器をパソコンにつないじゃダメだってばっちゃが言ってた

物理エスケープキーを作っていて

前回POSTの物理エスケープキーを作っていて思ったこと。
普通のHIDデバイスとして認識するんだから、簡単なセキュリティ対策ソフトだと、これ接続できるよなあ。。。と。

試しに作った

動画で見るのがわかりやすいかと


Digispark KeyInput and Shutdown Laptop Demo

なにをしているか

単純に、キーコードを送っているだけです。 [Win]+[R]を送り、[cmd.exe]とタイプして[Enter]、 DOSコマンドのシャットダウンを送っています。 あえてnotepadを開いたりしていますけども、それはデモとして。

コード

#include "DigiKeyboard.h"

void setup() {

  pinMode(1,OUTPUT);
  

}

void loop() {

  delay(1000);

  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  digitalWrite(1,HIGH);delay(250);
  digitalWrite(1,LOW);delay(250);
  

  DigiKeyboard.update();
  DigiKeyboard.sendKeyStroke(0);
  delay(200);

  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  delay(400);
  DigiKeyboard.println("notepad.exe");
  delay(400);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  delay(1800);

  DigiKeyboard.println("Have a Nice Day! XAXA!");
  delay(4000);

  DigiKeyboard.sendKeyStroke(KEY_F4,MOD_ALT_LEFT);
  delay(400);
  DigiKeyboard.sendKeyStroke(KEY_N,MOD_ALT_LEFT);
  delay(400);

  DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
  delay(400);
  DigiKeyboard.println("cmd.exe");
  delay(400);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  delay(1800);

  DigiKeyboard.println("shutdown -s -t 5");
  delay(2000);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  delay(200);

  delay(100000);

}

200円でできる嫌がらせ

セキュリティ対策ソフトでUSB機器をブロックしてる企業も多いですけど、未知のストレージデバイスやイメージングデバイスだけ警告して、HIDデバイスとかは警告してくれないやつもありますしね。汎用ドライバーで動くUSBキーボードを果たしてブロックしてくれるんだろかな、と。そもそもコイツ、BIOSの段階で認識するしね。
これ、まだ剥き身なのでわかりやすいんですが、USBマウスとかの中に仕込んだら、ぱっと見わかんないですよね。

なので

未知のUSBデバイスを道ばたで拾っても、自分のパソコンには接続しないようにしましょう。

物理エスケープキーを作った

なんで[Esc]無くしちゃうん?

先日発表され、物理[Esc]や[Fn]キーがなくなって話題となったMacbookPro。
Proは仕事で使うものなんだし、それってどうよ?みたいに思いますが、TouchBarが採用されて、物理的なキーが一部なくなってますね。 f:id:kana_yaz:20161031122202p:plain

それはLenovoがX1 Carbonでやって大爆死したヤツじゃないですかーヤダー
[Esc]は一段下ながらも残したLenovo、全部取っ払ったAppleLenovoは一代限りで止めちゃいましたが、Appleさんはどうなんでしょうね。 [Esc]キーはよく使うキーなので、結構否定的な意見も多いTouchBar。実際にモノが出回ったら皆さんは受け入れるんでしょうか。

なければ作る

いやでも。物理的に[Esc]ほしいじゃん?って人のために、多分中華メーカーが外付けファンクションキーを出してきそうな気がします。
でも欲しければ作ればいいんです。 f:id:kana_yaz:20161031123306j:plain

必要なもの

今回もお手軽工作です。
手元にあったて使えそうなのがこれしかなかったので"DigiSpark"(Digispark USB Development Board - Digistump)を使って作ってみましょう。マイコン自体はATTiny85、USBはソフトウェア的に実装し、パソコンからはHIDデバイスとして見えるやつです。キーボード代替なんだし、丁度いいですね。 f:id:kana_yaz:20161031123309j:plain

  • DigiSpark
  • 何らかのスイッチ(今回はCherryMX黒軸)
  • 1/4W抵抗 10kOhm
  • 配線材少々
  • ユニバーサル基板

スイッチは好みに合わせていいんだと思います。 自分は入力キー=Cherry黒軸、みたいな感覚なので、在庫していたCherry黒軸を使いましたが、格ゲー好きなら三和のアケ筐体ボタンでもいいですし、普通のタクトスイッチでもいいと思います。男らしくジャンパピンやピンセットの先でちょいちょいでも。

ピン配列とか

ATTiny85自体のピン数が少ないことに加えて、V-USBで2ピン消費することもあり、使える入出力は4本しかありません。

ピン番号 役割
P0 IO-0,PWM
P1 IO-1,PWM
P2 IO-2,A1
P3 IO-3,PWM,A3,V-USB
P4 IO-4,PWM,A2,V-USB
P5 IO-5,PWM,A0

エスケープキーのみ実装するのなら足りるのですが、ファンクションキーを全部実装する場合は、入出力が多いマイコンを選ぶか、アナログ入力を使ってキーマトリクスを読むかになると思います。キーマトリクス読む云々は下記のサイトが詳しいです。
I/Oピン一つで読み取れるキーパッドの製作 - しなぷすのハード製作記

Digisparkを使えるようにする

詳細はDigiSparkのWiki(digispark [Digistump Wiki])に載っています。
Arduinoの[環境設定]にある[Additional Board Manager URL]に下記のURLを追加してあげます。

"http://digistump.com/package_digistump_index.json"

f:id:kana_yaz:20161031145016p:plain

コードを書く

コードってほどのものは必要ないです。Lチカに毛が生えたレベル。

P1はオンボードLED、P2はスイッチに接続されてます。
DigiKeyboradのWikiを見る限り、Escapeのキーコードはありませんでしたけども、"USB Implementers Forum, Inc.USB.org - Welcome"にある資料を見る限り、英語配列キーボードのコードは"41"で大丈夫なようです。

#include "DigiKeyboard.h"

void setup() {

 pinMode(1,OUTPUT);
 pinMode(2,INPUT);

}

void loop() {
 digitalWrite(1,LOW);

 int hi=digitalRead(2);

 if(hi==HIGH){
   digitalWrite(1,HIGH);
   DigiKeyboard.sendKeyStroke(41);
 }

 delay(200);


}

ちなみに

  DigiKeyboard.println("hogehoge");

とすることで任意のキータイプをPCに送ることができます。

回路図

ちょい待ち

でも結局

後付けの外付けFnキーバーみたいなのが、Kickstarterとかで出そうですよね。ぼくはくわしいんだ。

LAMY サファリ ローラーボールを書きやすくする

サファリっていいと思いません?

意識が低いので、20代の頃からずっとLAMYのサファリを使っています。 安いそこらへんのボールペンは絶対になくしてしまうし、誰かに貸すと戻ってこなかったり。 普通のボールペンを使っていたときは、ペンが手元になくなってしまい、文具屋やコンビニに走ることも度々。 ラミー サファリ | ラミー・LAMY

もっとペンを大切にしたい、でも高級だったり替えインクがなかなか手に入らないのもイヤだということでいろいろと試したのですが、ペン先がタフ、ラフに扱っても壊れない手軽さ、大型クリップでいろんなところにしっかり挟める、ということでLAMYのサファリに落ち着きました。

普段のメモにはサファリ万年筆のF字にブルーブラックインクを入れて使っているのですが、転写用紙を書いたり、誰かに貸すときなんかのために、ローラーボールも携帯しています。

そのローラーボール最大の欠点

万年筆は非常に優秀なのですが、ローラーボールは地味に・・・インクがダメなんですよね。 油性でどんな用紙にもそこそこインクがのるのはいいのですが、インクを全部使い切る前にダメになってしまうことが多々ありまして。 純正インク、微妙に高いですし、売っているところもあんまりないですし。

同じ悩みを持っている方も多いのか、「UNUS PRODUCT SERVICE.」という会社から、カスタム用のリフィルアダプターなんかも製品化されていたりしまして。 ただこれ、微妙に高価なんですよね、1000円弱くらいしちゃうので、地味に手を出しづらい。

ということなのでちょいと加工してみましょう

もう少し安くなんとかする方法は・・・と考えました結果。 LAMYにJETSTREAM用の替え芯をなんとか入れてみることにしました f:id:kana_yaz:20161022002251j:plain

どこのヨォドォバァシィキャメラァや文房具店にも大体置いてあるJETSTREAM替え芯、どこの一般的なご家庭にも在庫しているプラパイプなんかで加工します。 f:id:kana_yaz:20161022002256j:plain

用意する物

作り方なんてない

並べてみるとわかるのですが、どうやらペン先や固定部分のサイズはほとんどかわらないのです。 f:id:kana_yaz:20161022002253j:plain

JETSTREAM替え芯のほうが4mm程度短いですので、そこのところだけ解決してあげればOkayです。 自分は部屋に転がっていたプラパイプを使ったのですが、4mm程度軸を延長できればなんでも構わないと思います。

自分は適当な長さにプラパイプを切断し、マスキングテープを使って延長してみました。 少し長めにプラパイプを切断した意味は、単に目測で適当に切ったらそうなっただけ&短く切りすぎてグラグラになるのがイヤ、というだけです。樹脂の歪みがバネのような作用をし、問題無くサファリの軸に収まりました。 f:id:kana_yaz:20161022002302j:plain

JETSTREAMいいっすね

イライラが溜まりがちのローラーボールがサクサク筆記できるようになりました。 これで重巡プリンツオイゲンちゃんも大満足です。 国内メーカーのボールペン、やっぱりいいですね。 f:id:kana_yaz:20161022002235j:plain

三菱鉛筆のサイトを見る限り、ボール径やカラーが変わっても支持部やリフィルの長さはかわらないようなので、自分の好きな筆記幅や色でサファリをカスタムできそうですね。 油性ボールペン 替芯 | ボールペン | 商品情報 | 三菱鉛筆株式会社

自分は太めのペンが好きなので、次は1.0mm幅にしようと思っています。

カネはない。ネットワークの勉強はしたい。-OpenWrt-

学習にはカネがかかる

自分のネットワークに関する知識の無さに辟易として、ちゃんとしたネットワークの勉強をしようと思った。
ネットワークの勉強をするには、ちゃんとしたルーターが必要なのは理解できる。ただそんなものを買うお財布の余裕はない、と。
自らの業務範囲的にCisco製品は対象外。お布施高いのもあるんだけど。
そうするとYAMAHAとかを買うのが一番いいだろうと。実際問題、YAMAHAは業務でもちょいちょい触ってはいるんだけど、やはり自由に遊びながら使えるルーターはあってもいい。
RTX1200かRTX810の中古でも買おうかなとは思っているのだけど、如何せん先立つものがねえ、と。

ヤマハ ギガアクセスVPNルーター RTX1210

ヤマハ ギガアクセスVPNルーター RTX1210

 
ヤマハ ギガアクセスVPNルーター RTX1200

ヤマハ ギガアクセスVPNルーター RTX1200

 
ヤマハ ギガアクセスVPNルーター RTX810

ヤマハ ギガアクセスVPNルーター RTX810

 

 

なんかあった

と思いながら自宅をがさがさしていたら、使っていないルーターを発掘。
NetgearのWNDR4300。
・450Mbps 5GHz帯
・300Mbps 2.4GHz帯
・有線1Gbps x4
・USB対応
とまあそこそこ今でも使える性能なのですが、一昨年にファームウェアアップデートに失敗し、文鎮と化していた。
もったいないなとは思っていたので、今回はこいつで遊ぶことにする。

 

OpenWrtを突っ込む

ルーターなどに使われる、組込向け汎用Linuxディストリビューション
一般に販売されている家庭用ルーターでも大抵の場合は組み込み用Linuxが走っているのですが、こちらは有志により開発されているもの。所謂カスタムファームウェアと呼ばれる類のものです。

突っ込み方

ファームを落としてくる

リンク先よりダウンロードし、適当なところに展開する。
"C:\fw\"とかでいいんじゃないかね。デスクトップに展開しちゃうと、ディレクトリ深くてファイルパスを指定するのが面倒だし。
Netgear WNDR4300 [OpenWrt Wiki]
f:id:tam_sam:20160528192932p:plain
f:id:tam_sam:20160528192939p:plain
f:id:tam_sam:20160528192950p:plain


 

FFTPクライアントの準備

Windows標準のやつでいいと思う。
普通にインストールすると入ってないので注意。

[コントロールパネル]→[プログラムと機能]

f:id:tam_sam:20160528190757p:plain

[Windowsの機能の有効化と無効化]→[TFTPクライアント]

f:id:tam_sam:20160528190937p:plain

 

WNDR4300をリカバリモードに

ファームウェアを書き込むために、リカバリモードへ移行する。
焼いてしまうと元通りに戻すのが面倒なので、そこらへんは注意して。
裏面にResetピンがあるので、押しながら電源投入。
f:id:tam_sam:20160528191507j:plain
※リセットボタンが凹んでしまったので分解していますけど、本来は分解しなくてもOkay

ファームウェアを転送

OpenWRTのデフォルトIPアドレスは192.168.1.1なので、操作端末のIPアドレスを192.168.1.xに。接続するポートはWAN側の1番ポート。
FFTPクライアントで192.168.1.1を指定して、WNDR4300にファイルを転送。

Windowsコマンドプロンプトを起動して、

tftp -i "IPアドレス" put "イメージのパス"

f:id:tam_sam:20160528191555p:plain

 

しばし待つ

ファームウェアを転送すると、電源LEDが点滅します。
緑色の点灯になれば、ファームウェア書込が完了し、ブラウザからアクセスできるようになっています。

OpenWRTのスクショ

設定画面

設定に関しては個々の環境で違うと思いますので、
ほぼ初期状態のスクショだけ。

パスワードの設定

f:id:tam_sam:20160528192115p:plain

"Administration"画面

rootのパスワードやSSH設定など
f:id:tam_sam:20160528192307p:plain

"OverView"画面

現在のステータスなど
f:id:tam_sam:20160528192352p:plain

"Routes"画面

f:id:tam_sam:20160528192425p:plain

"Interfaces"設定画面

f:id:tam_sam:20160528192847p:plain

"Interfaces LAN"設定画面

f:id:tam_sam:20160528192747p:plain

"Interfaces WAN"設定画面

f:id:tam_sam:20160528192821p:plain



 

ところで

OfficeLensって便利

Microsoftが提供してる"OfficeLens"ってアプリが地味に便利でして。
こんな基板の写真も補正してくれるという。
シルクの確認なんかに便利かもしれない。
f:id:tam_sam:20160528193422j:plain

play.google.com