【python】自作モジュールのImportError: No module named 'xxx'時にまず確認すること

ググればいくらでも出てくる内容ですが、後の自分のためにも残しておきます。

結論

import時の検索パス直下に自作モジュールが存在しないことが原因なので、検索パスを追加してあげる。

説明

import my_module

ImportError: No module named 'my_module'が出る場合は以下のコードでimportの検索パスを確認する。

import sys
print(sys.path)

検索パスに自作モジュール(my_module.pyとする)を含むディレクトリ(/path/to/my_module/とする)が含まれない場合は以下のコードでimportの検索パスを追加する。

sys.path.append('/path/to/my_module/')

これでmy_moduleimportが成功するようになっているはずです。

コード

import sys
# /path/to/my_module/が含まれない
# print(sys.path)
sys.path.append('/path/to/my_module/')
# /path/to/my_module/が追加されてるはず
# print(sys.path)
import my_module

注意点

環境の違いなどにより上記の対応では解決しないことがあると思います。 しかし、エラー内容に対する対応としてはこれが正しいものかと思います。

参考にしたURL

Python Tips:ライブラリ読み込み対象ディレクトリを追加したい - Life with Python

リソースファイル(.resx)を使ったWPFアプリの多言語対応の落とし穴

タイトルの通りですが、リソースファイル(.resx)を使ってWPFアプリを多言語対応させました。
その時にちょっと困ったことがあったので残しておきます。

WPFアプリの多言語対応についてはググればいろんな方法が出てきます。
www.k-karakuri.com

grabacr.net

blog.okazuki.jp


↑の記事を参考にしながら「Resources.ja-JP.resx」を新規作成すれば良いんだなと学んだので、早速新規ファイルの追加です。

f:id:panda531531:20190118002738p:plain
リソースファイルを追加する

ここで、


Resources.ja-JP.resx」だから、「Resource1.resx」の「1」部分を「.ja-JP」に書き換えればおっけー☆(ゝω・)v


と思って追加すると失敗します。。。


よく見てください。


Resources.ja-JP.resx
Resource1.resx


Resources
Resource


「s」が付いてない。。。


というわけで、多言語用のリソースファイルを新規追加する際はデフォルトのファイル名が「Resources」ではなく「Resource」になってるから注意しようねという話でした。
こんな穴に落ちてしまうのは私だけかもしれませんが、後の自分のためにも書き残しておきます。

以上です。

育休からの復職月にボーナスがでる場合はもうちょっとだけ延長した方がいいかも

今年の5月中旬から6月中旬まで1ヶ月間、育休を取っていました。
育休中は社会保険料の支払いが免除されるのですが、ボーナスも同じように免除の対象です。
実際、私が育休中に支払われたボーナスから社会保険料は控除されておらず、ラッキーと思っていたのですが、先日会社から「間違ってたから次のボーナスから引いとくね(๑˃̵ᴗ˂̵)」と言われてしまいました。

育児休業期間中に賞与を支給した場合の社会保険料の取扱い | 出る杭はもっと出ろ!
詳細は上記の記事を見てもらいたいのですが、社会保険料の支払いが免除されるのは

育児休業等を開始した日の属する月からその育児休業等が終了する日の翌日が属する月の前月まで」

なのです!

私の場合、育休が終了した日の翌日が属する月が6月だったので、社会保険料の免除は5月までということになり、6月に支給されたボーナスの社会保険料は免除されませんよ。と…

長期で育休を取る場合はあまり関係無いかもしれないですが、私のように短期的に育休を取るケースはもっと増えてくると思われます。(父親も丸々一年取れるような環境があれば…)

これから育休取る予定の方は、復職月とボーナス支給月が重なっていないか確認してみましょう!
もし重なっているならもうちょっと延ばした方が良いかもしれませんよ!

Xamarin.FormsでDynamicResourceを使ったテーマカラーの切り替えでハマった

Xamarin.Formsで動的なテーマカラーの切り替えを実装していて少しハマった件について書いておきます。

【やりたいこと】

App.xaml内に定義したColorリソースの中身を入れ替えてDynamicResourceで参照している箇所を変えたい

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="sample.App">
  <Application.Resources>
        <ResourceDictionary>
            <Color x:Key="Primary">#000000</Color>
            <Color x:Key="PrimaryDark">#1976D2</Color>
            <Color x:Key="Accent">#00ff00</Color>
            <Color x:Key="LightBackgroundColor">#FAFAFA</Color>
            <Color x:Key="DarkBackgroundColor">#C0C0C0</Color>
            <Color x:Key="MediumGrayTextColor">#4d4d4d</Color>
            <Color x:Key="LightTextColor">#999999</Color>

            <Style TargetType="NavigationPage">
                <Setter Property="BarBackgroundColor" Value="{StaticResource Primary}" />
                <Setter Property="BarTextColor" Value="White" />
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

【やったこと】

以下のブログにズバリ書いてあるので、参考にしながら実装しました。
blog.xamarin.com

App.Current.Resources ["backgroundColor"] = Color.White;
App.Current.Resources ["textColor"] = Color.Black;

が、なんどやってもDynamicにリソースが変わってくれません。。。

【調査結果】

いろいろ調べた結果、原因はColorクラスでした。

なんと!
Xamarin.Formsで使えるColorクラスというのはどうやらいくつかあるようなのです!!
(知っている人には当たり前かもしれませんが ^^;)


・System.Drawing.Color ← これを使っていた(不正解)
・Xamarin.Forms.Color ← 正解はこれ
Android.Graphics.Color
・(もしかしたら他にもあるかも?)

Xamarin.Forms.Colorを使えば、Dynamicにリソース変更を反映させることが出来ます。

XAMLのIntelliSenseが効かない&&クイックアクションに「using Xamarin.Forms;」が出てこない
という状況だったのでハマってしまいました。

Xamarin Mac Agentを使ってMacに接続できない(する気配すらない)時の確認ポイント

ちまちまXamarinやってます。

iOS版のビルドなどを実行するにはMacと接続する必要があります。
そのために、「Xamarin Mac Agent」なるものを使うのですが、ハマったのでメモしておきます。

つながらない場合は以下の点を確認してみてください。
つながるようになるかもしれません。

1.Macのリモートログインが有効になっているか

「システム環境設定」→「共有」→「リモートログイン」のチェックボックスを入れてください。
ログインユーザーのアクセスが許可されているか確認して、許可されていない場合は「+」で追加します。

2. XCode(AppleID)の設定が完了しているか

基本的には↓の通りですが、一部異なる箇所がありました。
itblogdsi.blog.fc2.com

Accountボタンを押し、AppleIDを「+」で追加します。
追加したら、AppleIDが表示されますので、View Detailsボタンをクリックします。

私の環境では「View Details」ボタンはありませんでした。
代わりに「Manage Certificates...」ボタンを押します。

iOS Development のCreateボタンを押して、Doneボタンを押します。

私の環境では「iOS Development のCreate」ボタンはありませんでした。
代わりに左下の「+」を押して出てくる「iOS Development」をクリックした後Doneします。

3.ネットワークに繋がっているか

ここでだいぶはまって心が折れかけました。
Xamarin Mac Agentの「接続」ボタンを押せども押せども接続する気配すら見せてくれません。
VirtualBox上のWindowsからMacに接続しようとしていたのですが、なんとネットワークが切断されていました。
直前までは繋がっていたのでなかなか気づけなかった。。。
VMを再起動して問題は解決しました。


以上、誰かの助けになれば幸いです。
誤りなどありましたらご指摘ください。

VisualStudio2017のネイティブメモリ診断機能が使えなくなった時の対処法

VisualStudio 2017便利ですね。

なんと、ネイティブメモリの解析が出来てしまいます。
スナップショット取って比較したり出来るので、メモリリークも簡単に見つかります。

以下の記事は2015ですが、概要はだいたい同じだと思います。
qiita.com

さて、本題ですが、私の環境でネイティブメモリ診断機能を使用していたときに遭遇したエラーと対処方法を忘備録として残しておきます。

【現象】
デフォルトではネイティブメモリの診断機能は無効になっているため、
デバッガーでアプリケーションを起動して有効にした後にデバッガーを再起動する必要があります。
再起動後、診断ツールの「メモリ使用量」にこんなメッセージが出ていました。

既に処理中のヒープセッションが存在するため、ネイティブメモリのプロファイルセッションを開始できません。Windowsは、コンピューターごとに1つのアクティブヒープセッションしかサポートしません。ほかのVisual Studioインスタンスまたはほかのパフォーマンス分析ツールを閉じてください。

なんのこっちゃ。

【対処法】
タスクマネージャーを開いて下のやつをkillってください。
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Common\DiagnosticsHub.Collection.Service\StandardCollector.Service.exe

その後、再びデバッガーを起動すれば診断ツールが復活していることでしょう。
(少なくとも私の環境では復活しました)

誰かのお役に立てば幸いです。

それではまた。

std::tr2::sys::pathクラスの内容出力系関数の比較

今回はC++の話です。

たまに使おうとするといつも使い方を忘れているstd::tr2::sys::pathクラスについて、
文字列出力関係の関数と出力結果をまとめておきます。


パスの連結や比較なども機能として用意してあるようです。以下にまとめてあります。
が、この記事だと出力系がわかりにくかったので。。。
path クラス (C++ 標準テンプレート ライブラリ)


以下のパスを入力として与えてそれぞれの関数で出力した結果は以下の通りです。
(Windowsを想定しているので「\\」で区切っています)

C:\\TestDir1\\TestDir2\\TestFileName.bmp
関数 出力 区切り文字 説明(違ってたら指摘お願いしますm(_ _)m)
basename() TestFileName - ファイル名(拡張子無し)
branch_path() C:/TestDir1/TestDir2 / ファイルのあるディレクトリまでのパス
directory_string() C:\TestDir1\TestDir2\TestFileName.bmp \ フルパス
extension() .bmp - 拡張子部分
external_directory_string() C:\TestDir1\TestDir2\TestFileName.bmp \ フルパス
external_file_string() C:\TestDir1\TestDir2\TestFileName.bmp \ フルパス
filename() TestFileName.bmp - ファイル名(拡張子有り)
file_string() C:\TestDir1\TestDir2\TestFileName.bmp \ フルパス
leaf() TestFileName.bmp - ファイル名(拡張子有り)
parent_path().string() C:/TestDir1/TestDir2 / ファイルのあるディレクトリまでのパス
relative_path() TestDir1/TestDir2/TestFileName.bmp / ドライブ文字以外?(相対?)
remove_filename() C:/TestDir1/TestDir2 / ファイル名以外
remove_leaf() C:/TestDir1 / leaf()以外?(そうなってないけど。。。)
root_directory() / / ルートディレクトリ名
root_name() C: - ルート名
root_path() C:/ / ルートディレクトリパス
stem() TestDir1 -
string() C:/TestDir1 /


なんだかよくわからない結果ですね。。。
同じ出力結果もちらほらとでています。
Linuxなどで出力した結果を比較するともっとわかりやすくなるのかもしれません。
時間があるときに試してみたいと思います。

わかりやすいリファレンスの場所をご存知の方がいらっしゃれば是非教えてください!