それマグで!

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

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

任意のフォルダを隠しフォルダにして非表示にする ~.hidden を使って snap フォルダを隠す

Gnomeで指定したファイルを不可視にしたい。

通常であれば、ファイル名の先頭にドットをつけt,えdotfiles にして非表示にすることができます。

dotfilesにできないフォルダやファイルを非表示にしたい。特にSnapフォルダ

Ubuntuを使っていると、最近は snap フォルダができます。 snap フォルダは名前の変更がちょっとめんどくさいので、他の方法を探した。 環境変数を使わずに、手早く非表示にする方法があればいいなとおもったら、ありました。

snap フォルダを隠しフォルダにする。

これだけ。

echo snap > ~/.hidden

非表示になりました。

f:id:takuya_1st:20190807015626p:plain

.hidden を使って、好きなフォルダを非表示に

.hidden というファイルを使うことで、ドットファイルにできないフォルダでも非表示にすることができることがわかりました。

ArchWikiを読んでいて見つけました。

隠しファイル 他のファイルマネージャと同じように GNOME Files もデフォルトでファイルの名前がドットから始まるファイルを非表示にします。

さらに、GNOME Files ではファイルの名前が同一ディレクトリの .hidden ファイルに記載されていた場合、ファイルを表示しません (1行ごとにファイル名を記述します)。

任意のフォルダに .hidden が設置可能

.hidden ファイルは、任意のフォルダに設置して、任意のファイルをNautilusで不可視にすることができる。

これで、フォルダに普段使わないファイルやフォルダを保存していたとしても、よく使うものだけの表示にすることができる。これってすごく便利じゃないですかね。

こんかいは、 ~/snap フォルダに適用したけど、プロジェクトフォルダ、node_modules とかにも使えそうですね。

参考資料

GNOME Files - ArchWiki

0001docomo に PC/Mac から接続する- WAP2エンタープライズ

0001docomo の ドコモWifiMacから接続する。

docomoWiFiはめっちゃ優秀です。ガンガン使っていいレベルのインフラだと思います。 とくに、0001docomo は WAP2 エンタープライズなので、めっちゃ安全です。しかも通信速度も快適です。

接続方法

WPA2で接続するので、自動接続は使えない。

Macの場合は、「他のネットワークに接続」を明示的に選んで

f:id:takuya_1st:20190805184159p:plain

WAP2のユーザー名とパスワードを入れます。

f:id:takuya_1st:20190805184233p:plain

このID/PWは、マイドコモにログインして、接続情報から、WiFiパスワードを閲覧すれば、情報を得られます。

契約者であれば誰でも使えます。同じAPに同時に複数ログインはできない

iPhone/ mac の場合の問題点

WPA2のパスワードをMacが保存してKeychainに保存します。そのキーチェーンをiOSに同期してしまいます。 その結果、iPhoneEAP_SIM で動作せずにWAP2になってしまうので、iPhoneでドコモSIMかつキーチェーンを使っている場合は、パスワードを共有するApple仕様のために不便です。

接続情報はKeychainsに保存される。

次のように、キーチェーンに保存されます。このキーチェーンがMaciPhoneに同期されて、めんどくさいに事になります。

  • SIM認証が失敗する
  • Mac/ iPhone / iPad で接続の奪い合いになる。

f:id:takuya_1st:20190807182903p:plain

キーチェーンに保存しないでコマンドから接続するのが無難だと思います。

公衆無線LANは安全?危険

WPA2エンタープライズの0001docomo はユーザーごとに鍵交換を行うので、前提が違う。

「公衆無線LANは危険」とか区別もつかず暗黙的にお題目を言ってる人たちと一線を画している。

参考資料

docomo Wi-Fi:0001docomo - Windows PCを無線LAN接続

gas(google app script)でデザインや数式の入ったシートから値だけのシートにしてダウンロード

Google App Scriptを書いてみた

初めてのAppScriptだけど、すごく便利だったので、メモ

スプレッドシートから値だけを取り出してCSV的にする

スプレッド・シートは結構活用するのですが、スプレッドシートに数式や参照が含まれていて そのままコピペして送るのがちょっとあれだなと思ったので、スプレッドシートをコピーして数式を外した

Excelならコピーと貼り付けオプションでできるし、Gsuiteでももちろんできるんだけど

シートの枚数が多いのでめんどくさくなってきた。なのでGAS書いてみた。

gas であれこれやるサンプルになる

GASであれこれやるのに、参考資料として使えそうなので、資料を残すことに。

  • シートの作成
  • シートの選択
  • シートのコピー
  • ファイル形式変換して取得
  • メール送信

この辺のサンプルになるなと。

gas.js

function MailSpreadSheet(){
  
  // created_at : 2018-12-25 
  // auther     : takuya_1st 
  // description: 指定したファイルから数式とデザインを除外して、値だけのファイルにして、メールにして送る
  
  var file_id = "13OAD2yER60___GoogleDriveのファイルID____UMNw5MrSVA";
  var mail_to = "takuya@example.com";
  var subject = "実験-"+ (new Date()).toISOString();
  var body = "これは実験です。";
  var attachment_files =  [];
  
  var fetchOpt = {
    "headers" : { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
    "muteHttpExceptions" : true
  };
  
  /// 新規スプレッドシートを作る。
  const createNewSpreadSheetFile = function (){
    // https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app
    const name = (new Date()).toISOString()
    const app = SpreadsheetApp.create(name);
    // Logger.log(app.getUrl());
    return app
  }

  const CopyFileToNewFile = function ( src_file_id ){
    // 元ファイルを取得
    const src_doc = SpreadsheetApp.openById(src_file_id)

    // 新規ファイルを作成:シートのコピー先ファイルを追加。
    const dest = createNewSpreadSheetFile();  
    const dest_file = SpreadsheetApp.openByUrl(dest.getUrl());

    // すべてのシートについて
    //    作業用一時シートに値で貼り付けて
    //    新規ファイルへシートをコピー
    for ( idx in src_doc.getSheets() ){
      const sheet = src_doc.getSheets()[idx];
      const range = src_doc.getDataRange();
      
      // 新規シートを作って選択範囲をコピペ。
      const temp_sheet_name = (new Date()).toISOString();
      const temp_sheet = src_doc.insertSheet(temp_sheet_name);
      const temp_range = temp_sheet.getDataRange();
      range.copyTo(temp_range,{contentsOnly:true});
      // 新規ファイルへシートをコピー
      const dest_sheet =temp_sheet.copyTo(dest_file);
      dest_sheet.setName( sheet.getName() );//名前を元シートに合わせる。
      //一時的なシートを削除
      src_doc.deleteSheet(temp_sheet);
    }
    
    // 新規ファイルからファイル作成時の空白シート(先頭)を削除
    dest_file.deleteSheet( dest_file.getSheets()[0] );
    
    //コピーされたファイルを返す。
    return dest_file;
  }
  const fetchFileAsExcel = function( file_id ){
    const file = DriveApp.getFileById(file_id);
    const fileName = file.getName();
    xlsxName = fileName + "-変換-" + (new Date()).toLocaleString() + ".xlsx";
    //const blob = file.getAs( MimeType.MICROSOFT_EXCEL )
    //blob.setName(xlsxName);
    //return blob
    // もし blob が取れないときはURL経由
    fetchUrl = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + file.getId() + "&exportFormat=xlsx&format=xlsx";
    const blob = UrlFetchApp.fetch(fetchUrl, fetchOpt).getBlob().setName(xlsxName);
    return blob
  }
  
  const SendMail = function(){    
    
    MailApp.sendEmail(mail_to, subject, body, {attachments:attachment_files});
  }
 
  
  
  const main = function() {
    const file = CopyFileToNewFile(file_id);
    const blob = fetchFileAsExcel( file.getId() );
    
    DriveApp.removeFile(DriveApp.getFileById(file.getId()));
    attachment_files.push(blob);
    body = body + blob.getName();
    
    SendMail();
  }
  
  
  main();
}