Anaconda + Tensorflow + Visual Studio Code
目的
WindowsでVisual Studio Codeを使用したTensorflow開発をで行えるようにしてみる。
手順
1.Anacondaのインストール + Tensorflow 開発環境の構築
以下を参考にtensorflowの開発環境を構築。
Windows版AnacondaでTensorFlow環境構築 - Qiita
2.Visual Studio Codeのインストール
ここからダウンロードしてインストールするだけ。
Download Visual Studio Code - Mac, Linux, Windows
Visual Studio Code を起動したら、「Ctrl + Shift + X」でMarketplaceを開いて、検索窓に「Python」を入力すると引っかかってくる。
4.ワークスペース設定の変更
Pythonを実行したりデバッグしたりするとき、tensorflow用のPython.exeを使用してくれないと色々困るので、ワークスペース用の個別設定を実施する。
「ファイル」からtensorflow開発用のフォルダを開いたら、「ファイル」⇒「基本設定」⇒「設定」を開く。
「ユーザー設定」タブが開くので、右上のプルダウンを「ワークスペース設定」に変更し、内容を以下に変更する
{ "python.pythonPath": "{Anacondaのインストールフォルダ}/envs/tensorflow/python" }
5.ビルドタスクの構成
いちいちターミナルから実行するのも面倒なので、ビルドタスクを構成する。 「タスク」⇒「タスクの構成」を選択すると、tasks.jsonが開くので、以下の通り記述する。
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "taskName": "Python", "command": "${config:python.pythonPath}", "type": "shell", "group": { "kind": "build", "isDefault": true }, "args": [ "${file}" ] } ] }
6.動作確認
1で作成したtensorflow_intro.pyを開き、「Ctrl + Shift + B」を押下。
「ターミナル」ウィンドウの出力結果が1で実行した結果と一致していればOK。
7.デバッグ確認
「Ctrl + Shift + D」でデバッグウィンドウを開いて、左上の歯車アイコンをクリック。
launch.jsonが作成されるので、左上のプルダウンを「Python」に設定する。
再度tensorflow_intro.pyを開き、「F5」を押下。
ちゃんと動作すればOK。
補足
「Pylintがインストールされてない」のような警告が出るが、インストールされているとコンパイルエラー等を事前検知してくれるので便利。
【Thunderbird】LightningとMicrosoft Exchangeのカレンダーを連携
※注意: この記事は未完です。
調べてみたけど、古めの情報しか出てこなかったのでメモ。
環境: Thunderbird 38.3.0
諸事情あってGoogleからMS Exchangeへの移行を余儀なくされた。
メールはIMAPだったのでさくっと移行できたけど、Lightningの予定とMS Exchangeの予定表を同期したかった。
まず、Exchange側からICSを取得する。
- 予定表の歯車マークから、「オプション」→「予定表」→「予定表の公開」
- 「予定表の選択」で同期したい予定表を選択
- 「アクセス許可の選択」から公開したい内容を選択
- HTMLとICSのURLが表示されるので、ICSの方をコピー
次に、Lightningに対して先程取得したICSを設定する。
- 「ファイル」→「新規作成」→「カレンダー」
- 「ネットワークのサーバに保存する」にチェックを入れ、「次へ」
- フォーマットで「iCalendar(ICS)」にチェックをいれ、場所欄に先程取得したICSを貼り付けて「次へ」
- カレンダー名を入力
- 画面にしたがって完了
これでカレンダーがLightningでカレンダーを見られるようになった。
しかし、Lightning側で予定を追加しようとしたら弾かれた。ICSだしそりゃそうか。
時間がないので今日はここまで。
catch句の存在しないtry-catch-finally
こんな要件があった。
実装するには、メソッドBではExceptionをcatchせずにfinallyで残処理をやらせて、メソッドAでcatchさせればいい。
しかし、try-catch-finallyでfinallyを省略することはあっても、catchを省略することなんてあったか……そもそもできるのか?
試してみた。
Main.java
package sample; public class Main { public static void main(String[] args) { try{ throwException(); }catch(Exception e){ // 例外をここでcatch System.out.println("例外発生"); e.printStackTrace(); } } private static void throwException(){ int arr[] = new int[3]; try{ // 意図的にArrayIndexOutOfBoundsExceptionを発生させる arr[10] = 5; System.out.println("処理正常終了"); }finally{ // catchを書かずにfinally System.out.println("finally句に入りました"); } } }
実行結果
finally句に入りました 例外発生 java.lang.ArrayIndexOutOfBoundsException: 10 at sample.Main.throwException(Main.java:20) at sample.Main.main(Main.java:7)
できたできた。
けど、こういう書き方って普通しないのかなあ?
もっといい書き方があれば教えてください。
poiを使用したExcelデータの読み込み@Java
忘れないようにサンプルコードを残しておく。
1. xlsファイル
public void printDataFromXls() { String filePath = "D:/test/file.xls"; try { //Excelのワークブックの読み込み POIFSFileSystem poiFile = new POIFSFileSystem (new FileInputStream(filePath)); HSSFWorkbook wb = new HSSFWorkbook(poiFile); //シートの読み込み HSSFSheet sheet = wb.getSheet("Sheet1"); //値読み込み for(int i = 1; i <= sheet.getLastRowNum(); i++) { HSSFRow row = sheet.getRow(i); HSSFCell cell = row.getCell(0); String cellString = cell.getStringCellValue(); System.out.println(cellString); } } catch (Exception e) { e.printStackTrace(); } }
2. xlsxファイル
public void printDataFromXlsx() { String filePath = "D:/test/file.xlsx"; try { //Excelのワークブックの読み込み FileInputStream fis = new FileInputStream(filePath); XSSFWorkbook wb = new XSSFWorkbook(fis); //シートの読み込み XSSFSheet sheet = wb.getSheet("Sheet1"); //値読み込み for(int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); XSSFCell cell = row.getCell(0); String cellString = cell.getStringCellValue(); System.out.println(cellString); } } catch (Throwable e) { e.printStackTrace(); } }
はまった所
- xlsxファイルの取込で、コンパイルは通るのに実行するとNoClassDefFoundError
poiを取得した際に一緒についてくる、ooxml-libディレクトリ内のxmlbeans-2.3.0.jarをビルドパスに通してなかったせい。
コンパイル通っても気を抜いちゃだめですね。
Windowsキー + カーソルキー。
ご操作でWindows + → 押したら面白い動きをしたのでメモ。
- Windows + ←
押すたびにウィンドウが以下のように繰り返す
- アクティブウィンドウがディスプレイの左半分に寄る
- アクティブウィンドウがディスプレイの右半分に寄る
- アクティブウィンドウがそのディスプレイで元のサイズに戻る
マルチディスプレイの場合は1と2の間で次のディスプレイに移動。
- Windows + →
押すたびにウィンドウが以下のように繰り返す
- アクティブウィンドウがディスプレイの右半分に寄る
- アクティブウィンドウがディスプレイの左半分に寄る
- アクティブウィンドウが元のサイズに戻る
マルチディスプレイの場合は1と2の間で次のディスプレイに移動。
- Windows + ↑
アクティブウィンドウが最大化する
- Windows + ↓
- アクティブウィンドウが最大化している時、元のサイズに戻る
- アクティブウィンドウが最大化していない時、最小化される
DOCTYPEとQuirksモード
IEでブラウザの互換テストをする時に、ドキュメント(レンダリング)モードってなんだよ、と思ったのが始まり。
- Quirksモードとは
ブラウザのレンダリングモードを過去のブラウザのそれに合わせるモード。
(後方)互換モード、等と呼ばれることも。
- Quirksモードが使用される条件
ブラウザのレンダリングモードはサイト側、クライアント側どちらでも指定することが可能。
クライアント側はブラウザに依存するので割愛。
サイト側では、DOCTYPE宣言の内容によって使用するレンダリングモードを指定する。
DOCTYPEの宣言例として、DOCTYPEスイッチ-HTMLの基本に一覧がある。
- IEのQuirksモードには二つある
IEのQuirksモードには「Internet Explorer 5 Quirks」と「Quirks」がある。
これは、IE10以降ではQuirksモードでもHTML5が動作するよう変更されたもので、IE9以前のQuirksモードとは別物のため両方搭載されている。
テスト時には組み合わせに気をつけよう。
参考: IE6〜9とIE10とでQuirksモードの動作が違う、どうすれば解決できるか? - ふろしき.js