2025年3月16日日曜日
2020年4月19日日曜日
USB内に複数のパーティションができてしまった場合
USBにシステムのイメージファイルを書き込むと、よく複数のパーティションが作られます。困るのはUSBを元に戻そうとフォーマットしようとしても、最初(primary)のパーティションしかフォーマットできず、本来の容量に戻ってくれません。
そんな場合、以下の手順でパーティションを一つにします。
①「ファイル名を指定して実行」(Win+Rでできます)からdiskpartを起動します。
diskpart
(注:コマンドプロンプトで動きます)
②ディスクのリスト表示を行い、問題のUSBを探します。
list disk
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 465 GB 2048 KB
* ディスク 1 オンライン 14 GB 14 GB
(この場合、ディスク0は本体のHDDであり、USBはディスク1になります)
③USBのディスクを選択します。
select disk [ディスク番号]
④念のため選択したディスクの情報を確認しておきます。
detail disk
⑤ディスクの構成情報を消します。
clean
⑥プライマリパーティションを作成します
create partition primary
これで後は通常通りフォーマットすれば、元に戻ります。
注意として、最近のUSBは4GB以上のものが多いですが、FAT32でフォーマットしないと元の容量に戻りません。(FATでは4GB迄です)
そんな場合、以下の手順でパーティションを一つにします。
①「ファイル名を指定して実行」(Win+Rでできます)からdiskpartを起動します。
diskpart
(注:コマンドプロンプトで動きます)
②ディスクのリスト表示を行い、問題のUSBを探します。
list disk
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 465 GB 2048 KB
* ディスク 1 オンライン 14 GB 14 GB
(この場合、ディスク0は本体のHDDであり、USBはディスク1になります)
③USBのディスクを選択します。
select disk [ディスク番号]
④念のため選択したディスクの情報を確認しておきます。
detail disk
⑤ディスクの構成情報を消します。
clean
⑥プライマリパーティションを作成します
create partition primary
これで後は通常通りフォーマットすれば、元に戻ります。
注意として、最近のUSBは4GB以上のものが多いですが、FAT32でフォーマットしないと元の容量に戻りません。(FATでは4GB迄です)
2019年8月20日火曜日
eclipseの日本語、等幅フォント
時々、Linux上で大きなプログラムをいじるとき、昔はemacsだけでやってましたが、最近はもう統合開発環境がないとダメな情けない体になってしまいました。
デフォルトで入っているのが、eclipseなのでよく使います。その時、困るのがフォントです。デフォルトは、monospaceという(英語の)等幅フォントなのですが、日本語のコメント入れると、もうずれまくりです。ぐぐると「こんなフォントを入れるといいよ」とか色々ありますが、ネットに繋がっていない環境でプログラムをいじることが多いので、デフォルトで入っている"Dejavu Sans Mono"を使っています。
デフォルトで入っているのが、eclipseなのでよく使います。その時、困るのがフォントです。デフォルトは、monospaceという(英語の)等幅フォントなのですが、日本語のコメント入れると、もうずれまくりです。ぐぐると「こんなフォントを入れるといいよ」とか色々ありますが、ネットに繋がっていない環境でプログラムをいじることが多いので、デフォルトで入っている"Dejavu Sans Mono"を使っています。
2018年9月30日日曜日
WindowsのSocket(TCP)
WindowsのSocketはAPIに変遷の歴史があり、ちょっと苦手です。(最初に作った時は、まだWinSock(1)のころで、Linuxとかなり似たAPIでした。その後、WinSock2になり、M$は.NetやMFCを推奨してきて嫌になります)
QtのSocketクラスを使えば、その辺をラップしてくれて楽ができます。ちょっと試しにServerのconsoleプログラムを作ってみました。telnet等をclientにして簡単に実験ができます。
proファイルですが、networkの追加を忘れずに。
MyTcpServer.pro
mainは以下の通りです。
main.cpp
MyTcpServerクラスのヘッダは最低限の関数だけ定義します。
mytcpserver.h
本体です。connectして文字列を送ったら、後は受信するだけのものです。相手がcloseしたり、勝手に切ったり、エラーが起きたらServer側はcloseするようにしてあります。また、"bye"を受信したらやはりcloseします。(windowsだと、受信文字列の最後にCR/LFが含まれますが、Linux等では行末記号は含まれてきません。)
mytcpserver.cpp
さて、ここでこのサンプルを作った本題に入ります。前からLinuxでSocket(TCP)のプログラムで悩んでいたのが、通信しているプログラムの片方が、socketをつないだまま、異常終了すると、しばらくその時のportが使えなくなる現象に困っていました。一方、昔winsockを見ていた時、windowsのAPIには、portを強制的にconnectするというフラグがあり、どう違うのか疑問に思っていました。
このサンプルプログラムで、windowsとLinux(or Mac)での挙動の違いを調べてみました。
(1)通信中にServerを強制終了すると、Linux(Mac)ではやはり当該portは使えなくなります。(already useのエラーメッセージがでます)しかし、windowsは何事もなかったようにconnectできます。
(2)Linux(Mac)でも、client側が強制終了しても、サンプルのServerでは相手との通信が切れたことを検知して、portをcloseするようにしてあるので、再度clientは接続できます。(これまでLinuxでうまくいかなかったのは、この処理を入れてなかったことに気づきました)
Windowsは「楽観的」というか「危険」というか、考え方がかなり違います。
QtのSocketクラスを使えば、その辺をラップしてくれて楽ができます。ちょっと試しにServerのconsoleプログラムを作ってみました。telnet等をclientにして簡単に実験ができます。
proファイルですが、networkの追加を忘れずに。
MyTcpServer.pro
QT -= gui QT += core QT += network CONFIG += c++11 console CONFIG -= app_bundle
mainは以下の通りです。
main.cpp
#include <qcoreapplication>
#include "mytcpserver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyTcpServer server;
return a.exec();
}
MyTcpServerクラスのヘッダは最低限の関数だけ定義します。
mytcpserver.h
#ifndef MYTCPSERVER_H
#define MYTCPSERVER_H
#include <qobject>
#include <qtcpsocket>
#include <qtcpserver>
#include <qdebug>
class MyTcpServer : public QObject
{
Q_OBJECT
public:
explicit MyTcpServer(QObject *parent = 0);
signals:
public slots:
void newConnection();
void readData();
void socketError(QAbstractSocket::SocketError);
void deleteLater();
private:
QTcpServer *server;
QTcpSocket *socket;
};
#endif // MYTCPSERVER_H
本体です。connectして文字列を送ったら、後は受信するだけのものです。相手がcloseしたり、勝手に切ったり、エラーが起きたらServer側はcloseするようにしてあります。また、"bye"を受信したらやはりcloseします。(windowsだと、受信文字列の最後にCR/LFが含まれますが、Linux等では行末記号は含まれてきません。)
mytcpserver.cpp
// mytcpserver.cpp
#include "mytcpserver.h"
#include <qdatastream .h>
MyTcpServer::MyTcpServer(QObject *parent) :
QObject(parent)
{
server = new QTcpServer(this);
// 誰かがconnectしてきたら、signalを出してnewConnection()をCall
connect(server, SIGNAL(newConnection()),
this, SLOT(newConnection()));
if(!server->listen(QHostAddress::Any, 9999))
{
qDebug() << "Server could not start";
}
else
{
qDebug() << "Server started!";
}
}
void MyTcpServer::newConnection()
{
// socketのインスタンスを生成
socket = server->nextPendingConnection();
qDebug() << " connect";
// 切断した時の処理を定義
connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
// 受信した時の処理を定義
connect(socket, SIGNAL(readyRead()), this, SLOT(readData()));
// エラー処理の定義
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
// 切断したときの処理としてSLOT関数を設定する。
connect(socket, SIGNAL(disconnected()), this, SLOT(deleteLater()));
// クライアントのIPアドレスを取得
QString ippaddr = socket->localAddress().toString();
// 送信データをstreamとして定義
QDataStream out(socket);
out.setVersion(QDataStream::Qt_5_0);
out << "Hello client\r\n";
}
void MyTcpServer::readData()
{
QString s;
// 受信データを」streamとして定義
//QDataStream in(socket);
//in.setVersion(QDataStream::Qt_5_11);
//in >> s;
s = socket->readAll();
qDebug() << "receive : " << s << "( " << s.size() << " ) ";
if ("bye\r\n" == s)
{
qDebug() << "close process";
//deleteLater();
emit socket->disconnected();
}
}
void MyTcpServer::socketError(QAbstractSocket::SocketError )
{
qDebug() << " socket error!";
socket->close();
}
void MyTcpServer::deleteLater()
{
qDebug() << " socket disconnected";
socket->close();
}
さて、ここでこのサンプルを作った本題に入ります。前からLinuxでSocket(TCP)のプログラムで悩んでいたのが、通信しているプログラムの片方が、socketをつないだまま、異常終了すると、しばらくその時のportが使えなくなる現象に困っていました。一方、昔winsockを見ていた時、windowsのAPIには、portを強制的にconnectするというフラグがあり、どう違うのか疑問に思っていました。
このサンプルプログラムで、windowsとLinux(or Mac)での挙動の違いを調べてみました。
(1)通信中にServerを強制終了すると、Linux(Mac)ではやはり当該portは使えなくなります。(already useのエラーメッセージがでます)しかし、windowsは何事もなかったようにconnectできます。
(2)Linux(Mac)でも、client側が強制終了しても、サンプルのServerでは相手との通信が切れたことを検知して、portをcloseするようにしてあるので、再度clientは接続できます。(これまでLinuxでうまくいかなかったのは、この処理を入れてなかったことに気づきました)
Windowsは「楽観的」というか「危険」というか、考え方がかなり違います。
2018年9月9日日曜日
Raspberrry Pi3にOpenSUSE(64bit)をインストール
Raspbery Pi3のRaspbianでしばらく遊んでいましたが、折角CPUが64bitアーキテクチャになったというのに、Raspbianは32bitのままというのが寂しくなってきました。折角なので、64bitのOSを入れましょう。
1.適当なOSを探す
ぐぐってみるといくつかでてきました。ただ個人的にやられていそうな方は今後の継続性が怖いのと、一番例が多く見つかったOpenSUSEにすることにしました。(コンサバにいきます)
OpenSUSEのHPにいくと、頻繁に更新がされているらしく、DLしたいものをクリックしても、「リンクがありません」と言われたりします。しかしそこはしょせん単なるFTPサーバーみたいなものですから、「リンクがありません」と言われたURLから、目的としているファイル名だけ削除して、当該ディレクトリ内一覧を表示させ、より新しいバージョンが入っているのを見つけてDLしてきました。私がDLしてきたのは、Tumbleweed版のXFCE版です。(LXQt版というのもありましたが、どちらがいいかはまた時間があったら試してみます)
注意しないといけないのは、多数のパッケージが入っていますが、その中にRapberrry Pi以外のARMベースのものも混じっているらしいということです。ファイル名の中にきちんと"raspberry"の文字が入っているのをDLしてきましょう。(最初、これでなんでbootしないんだと、何回か失敗しました)
2.DLしたOSイメージをSDカードに焼く
この辺りは他の人が多数解説していますので、省きます。一つだけ注意があります。他の方はもう当たり前だと思って、書いていてくれませんでしたが、SDカードの初期化は専用アプリの"SD Card Formatter"を使いましょう。Windows標準でフォーマットさせると、32GBのSDがなんかちっこい2つのドライブにフォーマットされて、後からのOS image書き込みがうまくいきません。(Windowsは標準のFATでフォーマットしようとするんで、最近の32GB等の様な大容量には対応できていません)
2年くらい前にRaspberry Pi2を初めていじったときは、一生懸命調べてやってたんですが、すっかり忘れていました。
3.OpenSUSEの起動
後はもう特に注意点はありません。最初の起動に時間がかかるのはいつものことです。(設定諸々やっていいたり、SD内の使える領域を全域にしたりの作業をしていますから)
4.Wi-Fiの設定
さて、ここからが今回の本題です。Raspberry Pi3には折角内蔵のWi-Fiがついています。(Broadcom BCM43438のチップがついています)
OpenSUSEの記事を色々みていると、みなさんかなり苦労しているようです。とりあえず標準的な方法として、設定ツール"YaST"→"Network Setting"から試してみます。
画面の表示から、とりあえず最初の起動で、BCM43430 WLAN CArdの文字がでてきています。(チップの認識に問題があるのか、それとも製造ロットで違いがでた?)
これならYaSTで設定できるかと思い作業を進めていきましたが、どうもうまくいきません。YaSTで設定していて、最後のOK押すと画面に右下にメッセージで「無線ネットワークが認識されました」みたいなものが出てくるんで、成功したかと思うとだめ。ifconfigコマンドで確認してみると、wlan0は認識していますが、DHCPのアドレスが割り当てられていません。
そもそも、YaSTのwi-fiのSSIDと暗号key設定のところのIFが分かりにくいんですよね。keyのnegotiationで失敗している可能性が大きいです。
そこで今度は別のHPをぐぐると、以下のファイルにSSIDとkeyを登録しろとの情報が。
/etc/wpa_supplicant/wpa_supplicant.conf
ここのファイルの最後に以下を追加しろとありました。(でもYaSTはここに何も書いていてくれないんですが…不安がよぎります)
network={
ssid="調べたSSID"
psk="WiFiのパスワード"
}
まあダメ元でと試してみましたが、やはりkeyのnegotiationに失敗とのログが残ります。少し考えて、上記の例との違いに気づきました。例ではssidやpskの前にインデントがしてあります。私は何も考えずにTabで行ってしまいましたが、もしかしてTabはまずかった?Tabを削除してマシンを再起動し、やっとWi-Fiがつながりました。
5.総論
OpenSUSEと言えば結構有名どころなんですが、まだ落ち着いているとはいいがたい状況ですね。特に今回のWi-Fiまわりは皆さん苦労しているようで、他のHPのデータを見るたびにbroadcomのライブラリ名称や個数が変わってきたりで苦労している後が見えます。(このあたりのドライバ回りまで64bitにするのが大変なので、本家がなかなか対応できないんでしょうが)
後、OpenSUSEとRaspbianを使った感想ですが、一言「OpenSUSE遅すぎ!」もうイライラしてくるレベルです。Raspbianの時は、最初のPi2の頃からは大幅に改善されていて「使い物になるじゃん」と感じたのとは大違いです。Graphic回りがまだまだ作りこみに問題があるのかわかりませんが、もう少し様子見した方がよさげです。
1.適当なOSを探す
ぐぐってみるといくつかでてきました。ただ個人的にやられていそうな方は今後の継続性が怖いのと、一番例が多く見つかったOpenSUSEにすることにしました。(コンサバにいきます)
OpenSUSEのHPにいくと、頻繁に更新がされているらしく、DLしたいものをクリックしても、「リンクがありません」と言われたりします。しかしそこはしょせん単なるFTPサーバーみたいなものですから、「リンクがありません」と言われたURLから、目的としているファイル名だけ削除して、当該ディレクトリ内一覧を表示させ、より新しいバージョンが入っているのを見つけてDLしてきました。私がDLしてきたのは、Tumbleweed版のXFCE版です。(LXQt版というのもありましたが、どちらがいいかはまた時間があったら試してみます)
注意しないといけないのは、多数のパッケージが入っていますが、その中にRapberrry Pi以外のARMベースのものも混じっているらしいということです。ファイル名の中にきちんと"raspberry"の文字が入っているのをDLしてきましょう。(最初、これでなんでbootしないんだと、何回か失敗しました)
2.DLしたOSイメージをSDカードに焼く
この辺りは他の人が多数解説していますので、省きます。一つだけ注意があります。他の方はもう当たり前だと思って、書いていてくれませんでしたが、SDカードの初期化は専用アプリの"SD Card Formatter"を使いましょう。Windows標準でフォーマットさせると、32GBのSDがなんかちっこい2つのドライブにフォーマットされて、後からのOS image書き込みがうまくいきません。(Windowsは標準のFATでフォーマットしようとするんで、最近の32GB等の様な大容量には対応できていません)
2年くらい前にRaspberry Pi2を初めていじったときは、一生懸命調べてやってたんですが、すっかり忘れていました。
3.OpenSUSEの起動
後はもう特に注意点はありません。最初の起動に時間がかかるのはいつものことです。(設定諸々やっていいたり、SD内の使える領域を全域にしたりの作業をしていますから)
4.Wi-Fiの設定
さて、ここからが今回の本題です。Raspberry Pi3には折角内蔵のWi-Fiがついています。(Broadcom BCM43438のチップがついています)
OpenSUSEの記事を色々みていると、みなさんかなり苦労しているようです。とりあえず標準的な方法として、設定ツール"YaST"→"Network Setting"から試してみます。
画面の表示から、とりあえず最初の起動で、BCM43430 WLAN CArdの文字がでてきています。(チップの認識に問題があるのか、それとも製造ロットで違いがでた?)
これならYaSTで設定できるかと思い作業を進めていきましたが、どうもうまくいきません。YaSTで設定していて、最後のOK押すと画面に右下にメッセージで「無線ネットワークが認識されました」みたいなものが出てくるんで、成功したかと思うとだめ。ifconfigコマンドで確認してみると、wlan0は認識していますが、DHCPのアドレスが割り当てられていません。
そもそも、YaSTのwi-fiのSSIDと暗号key設定のところのIFが分かりにくいんですよね。keyのnegotiationで失敗している可能性が大きいです。
そこで今度は別のHPをぐぐると、以下のファイルにSSIDとkeyを登録しろとの情報が。
/etc/wpa_supplicant/wpa_supplicant.conf
ここのファイルの最後に以下を追加しろとありました。(でもYaSTはここに何も書いていてくれないんですが…不安がよぎります)
network={
ssid="調べたSSID"
psk="WiFiのパスワード"
}
まあダメ元でと試してみましたが、やはりkeyのnegotiationに失敗とのログが残ります。少し考えて、上記の例との違いに気づきました。例ではssidやpskの前にインデントがしてあります。私は何も考えずにTabで行ってしまいましたが、もしかしてTabはまずかった?Tabを削除してマシンを再起動し、やっとWi-Fiがつながりました。
5.総論
OpenSUSEと言えば結構有名どころなんですが、まだ落ち着いているとはいいがたい状況ですね。特に今回のWi-Fiまわりは皆さん苦労しているようで、他のHPのデータを見るたびにbroadcomのライブラリ名称や個数が変わってきたりで苦労している後が見えます。(このあたりのドライバ回りまで64bitにするのが大変なので、本家がなかなか対応できないんでしょうが)
後、OpenSUSEとRaspbianを使った感想ですが、一言「OpenSUSE遅すぎ!」もうイライラしてくるレベルです。Raspbianの時は、最初のPi2の頃からは大幅に改善されていて「使い物になるじゃん」と感じたのとは大違いです。Graphic回りがまだまだ作りこみに問題があるのかわかりませんが、もう少し様子見した方がよさげです。
2018年8月23日木曜日
Windows10 VS2015でもPython
ちょっと古いネタですが、メモとして残しておきます。
VS2015から、Pythonが扱えるようになりました。ただ、インタープリタ本体はM$は提供してくれないので、自分で別途設定する必要があります。
問題は、VS2015を使うとき、「どのPython」を使うのか、どうやってVSに指定したらいいのかです。Pythonって、色々なものがあり、どれがベストとは言い切れない状態です。ただ、今から始めるなら2.*系に将来はないので、3.*系を使えとは皆さん言います。
だけど結構、2.7を使う開発環境がいまだに多いんですよね~ まあ、今回は開発環境はWinのVSなので、本家のpython.orgの3.6をインストールしました。実行状況を以下に示します。
matplotlibを後から追加でインストールして、簡単なデータ解析用の使い捨てプログラムが簡単に作れます。
ただ、問題はPCに入っている、どのPython環境を使うかの設定です。VSの場合、「ソリューション エクスプローラー」の「Python Environments」で指定できます。
御覧の様に、Python3(正確にはPython3.6)を設定してあります。VSインストール時に、Python環境がインストールしてあれば自動的に検出してくれるようですが、後からPython環境をインストールした場合は、自力で設定してやる必要があります。自動検出という手もありますが、大抵はうまくいかないので「Custom」で手動の作業になります。どのバイナリ(python.exe)を使うのか、作業フォルダはどこかとか設定してやる必要がありますが、そのあたりは自動検出に成功しているのを参考にしてやればうまくいきます。(不幸にも、PythonなしでVSインストールした方にはちょっと難題ですが・・・。そもそも、Pythonを初めてやろうと思うなら、潔く一旦VSをアンインストールして、Python環境をインストールしてからVSをインストールした方がいいと思います)
ネットでググると、このあたりの設定はVSCodeに関するものが圧倒的に多いですが、まあ似たようなものです。VSとVSCodeの実装はまるで違うものでしょうが、GUIとかは同じようになってしまいますから。(作っている環境が同じなら、そうなってしまうでしょう)
ちょっと注意が必要なのは、Customで設定しているとき、Pythonのバージョンを指定する選択リストがあったんですが、VS2015ではPython3.5までしかありませんでした。自動コードチェック等に影響があるのかもしれませんが、まあそんな変わらないだろうと仕方なく「python3.5」を選択して、Custom設定は終わらせました。
VS2015から、Pythonが扱えるようになりました。ただ、インタープリタ本体はM$は提供してくれないので、自分で別途設定する必要があります。
問題は、VS2015を使うとき、「どのPython」を使うのか、どうやってVSに指定したらいいのかです。Pythonって、色々なものがあり、どれがベストとは言い切れない状態です。ただ、今から始めるなら2.*系に将来はないので、3.*系を使えとは皆さん言います。
だけど結構、2.7を使う開発環境がいまだに多いんですよね~ まあ、今回は開発環境はWinのVSなので、本家のpython.orgの3.6をインストールしました。実行状況を以下に示します。
matplotlibを後から追加でインストールして、簡単なデータ解析用の使い捨てプログラムが簡単に作れます。
ただ、問題はPCに入っている、どのPython環境を使うかの設定です。VSの場合、「ソリューション エクスプローラー」の「Python Environments」で指定できます。
御覧の様に、Python3(正確にはPython3.6)を設定してあります。VSインストール時に、Python環境がインストールしてあれば自動的に検出してくれるようですが、後からPython環境をインストールした場合は、自力で設定してやる必要があります。自動検出という手もありますが、大抵はうまくいかないので「Custom」で手動の作業になります。どのバイナリ(python.exe)を使うのか、作業フォルダはどこかとか設定してやる必要がありますが、そのあたりは自動検出に成功しているのを参考にしてやればうまくいきます。(不幸にも、PythonなしでVSインストールした方にはちょっと難題ですが・・・。そもそも、Pythonを初めてやろうと思うなら、潔く一旦VSをアンインストールして、Python環境をインストールしてからVSをインストールした方がいいと思います)
ネットでググると、このあたりの設定はVSCodeに関するものが圧倒的に多いですが、まあ似たようなものです。VSとVSCodeの実装はまるで違うものでしょうが、GUIとかは同じようになってしまいますから。(作っている環境が同じなら、そうなってしまうでしょう)
ちょっと注意が必要なのは、Customで設定しているとき、Pythonのバージョンを指定する選択リストがあったんですが、VS2015ではPython3.5までしかありませんでした。自動コードチェック等に影響があるのかもしれませんが、まあそんな変わらないだろうと仕方なく「python3.5」を選択して、Custom設定は終わらせました。
2018年8月14日火曜日
ANACONDA Navigatorのアイコンが消えた!?
これまでpythonのプログラムを書くときは、editorだけで済ませてきました。しかし、最近はVisualStuioもPython書ける様になっていますし、やはりIDEに慣れてしまうとそっちを使って楽をしたくなります。
PythonのIDEというと、Spyderが上がってくると思います。anacondaをインストールするとSpyderも入っており、これまではデバッガとしてしか使っていませんでした。IDEとしてのSpyderの使いごごちを見てみようと、久しぶりにANACONDA Navigatorを立ち上げて見たところ、Spyderの更新が出ているとの表示がありました。何も考えずに、Updateをしたところ、NavigatorのSpyder等、ICONが全て消えてしまいました!
通常は、上記の様に各種プログラムの起動ICONが出ていますが、これが消えて灰色に・・・
当初、どうしたらいいかわからず、$HOME/.anaconda/navigator/内の設定ファイルを見ても見当がつかず、途方にくれました。ぐぐってみても回答らしきものが見つからず悩んでいましたが、何度か検索しているうちに英語だけでらしき検索wordを入れると、stackoverflowにそれらしき質問が!見て見ると、完全に自分とは同じ状況ではありませんが、ICONが消えるのは同じで、回答は「Environmentsのupdate Indexボタンを押せ」とのこと。(以下の画面)
真ん中、上にあるボタンです。これで元に戻ってくれました。回答者はどうもNavigatorのメンテナンスをしている人らしく、1.8.3ではfixしてreleaseすると言ってました。
まあ無理にANACONDA Navigatorを使う必要はなく、コマンドラインから起動してもいいんですが、何かが調子悪いままというのは気持ち悪いので。
PythonのIDEというと、Spyderが上がってくると思います。anacondaをインストールするとSpyderも入っており、これまではデバッガとしてしか使っていませんでした。IDEとしてのSpyderの使いごごちを見てみようと、久しぶりにANACONDA Navigatorを立ち上げて見たところ、Spyderの更新が出ているとの表示がありました。何も考えずに、Updateをしたところ、NavigatorのSpyder等、ICONが全て消えてしまいました!
通常は、上記の様に各種プログラムの起動ICONが出ていますが、これが消えて灰色に・・・
当初、どうしたらいいかわからず、$HOME/.anaconda/navigator/内の設定ファイルを見ても見当がつかず、途方にくれました。ぐぐってみても回答らしきものが見つからず悩んでいましたが、何度か検索しているうちに英語だけでらしき検索wordを入れると、stackoverflowにそれらしき質問が!見て見ると、完全に自分とは同じ状況ではありませんが、ICONが消えるのは同じで、回答は「Environmentsのupdate Indexボタンを押せ」とのこと。(以下の画面)
真ん中、上にあるボタンです。これで元に戻ってくれました。回答者はどうもNavigatorのメンテナンスをしている人らしく、1.8.3ではfixしてreleaseすると言ってました。
まあ無理にANACONDA Navigatorを使う必要はなく、コマンドラインから起動してもいいんですが、何かが調子悪いままというのは気持ち悪いので。
2018年3月10日土曜日
gdbによるQtプログラムのデバッグ
GUIを使わないプログラムなのに、Qtを使いまくっているプログラムがあって、それのデバッグしてて困ったことを。
Qtには、STLより効率がいいとのことで同様のQVector, QLIstが実装されています。同じように使えますが、困ったことにgdbでbreakして変数の中身を見ようとしてもエラーがでてきて見えません。
サンプルのプログラムをいかに示します。
これでgdbによりfor文のところでbreakして、list[0]の中身を見たいと思います。
なんか怒られました。どうもQtのテンプレート定義のoperator []に関する多重定義のところで問題が起きているようです。ちなみに、list自体をprintすると以下の様になります。
かなり複雑な構造をしているようですが、"d"というメンバがいるのはわかります。Stackoverflowなんかで調べても、中々ヒットせず、唯一呪文のようなものがひっかかり、それが正解でした。以下にそれを示します。
要は、"d"というポインタのメンバにarray[]で配列にしているということのようです。それを強引にテンプレートで定義したQString型だとして、toStdString()関数をCallしてやれば、QListの中身も表示できます。
なんというか、こんな手間をかけないとデバッグできないならSTLを素直に使ったほうがいいんでないか?という感じです。
PS
QListはコンテナ・クラスですが、通常このてのものはテンプレートを使い、内容物の型を定義するものです。ところが、Qtは上記のarrayのところを(void*)で定義しているものですから、こんなややこしい事になっています。素直に全部テンプレートで実装してくれれば、こんな面倒なことにならずに済むのですが、Qtは様々なコンパイラに対応しています。テンプレートはc++の第3版で正式に定義されましたが、それまで定義があいまいなところがあり、実装がコンパイラ毎にバラバラな時代が10年くらい続いた記憶があります。今でも、時折、コンパイラが変わると、テンプレートまわりで修正が必要なことが発生したりします。(10年以上前は、大騒ぎでした)おそらくそれを嫌ったのと、とにかく速度を稼ぎたかったんでしょうね。(void*)で定義したほうが、圧倒的に速いですから。(そのかわり、バグが入り込みやすく、面倒はプログラマが見ないといけません。)
ちなみにQtCreatorのデバッグ設定がきちんとできていれば、こんな面倒なことはする必要はありません。GUIは使わない組み込みに近いプログラムを作るのに、Qtの一部だけを使っている場合の特殊な状況の話です。
Qtには、STLより効率がいいとのことで同様のQVector, QLIstが実装されています。同じように使えますが、困ったことにgdbでbreakして変数の中身を見ようとしてもエラーがでてきて見えません。
サンプルのプログラムをいかに示します。
#include <qlist>
#include <iostream>
int main()
{
QList< QString> list;
list << "1st" << "2nd" << "3rd";
for (int i=0; i<list.size(); i++)
{
std::cout << list[i].toStdString() << std::endl;
}
return 0;
}
これでgdbによりfor文のところでbreakして、list[0]の中身を見たいと思います。
(gdb) p list[0]
Could not find operator[].
なんか怒られました。どうもQtのテンプレート定義のoperator []に関する多重定義のところで問題が起きているようです。ちなみに、list自体をprintすると以下の様になります。
(gdb) p list
$15 = {> = {}, {p = {static shared_null = {ref = {atomic = {\
_q_value = -1}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d = 0x604ee0}, d = 0x604ee0}}
かなり複雑な構造をしているようですが、"d"というメンバがいるのはわかります。Stackoverflowなんかで調べても、中々ヒットせず、唯一呪文のようなものがひっかかり、それが正解でした。以下にそれを示します。
(gdb) p ((QString)list.d->array[0]).toStdString()
$17 = "1st"
要は、"d"というポインタのメンバにarray[]で配列にしているということのようです。それを強引にテンプレートで定義したQString型だとして、toStdString()関数をCallしてやれば、QListの中身も表示できます。
なんというか、こんな手間をかけないとデバッグできないならSTLを素直に使ったほうがいいんでないか?という感じです。
PS
QListはコンテナ・クラスですが、通常このてのものはテンプレートを使い、内容物の型を定義するものです。ところが、Qtは上記のarrayのところを(void*)で定義しているものですから、こんなややこしい事になっています。素直に全部テンプレートで実装してくれれば、こんな面倒なことにならずに済むのですが、Qtは様々なコンパイラに対応しています。テンプレートはc++の第3版で正式に定義されましたが、それまで定義があいまいなところがあり、実装がコンパイラ毎にバラバラな時代が10年くらい続いた記憶があります。今でも、時折、コンパイラが変わると、テンプレートまわりで修正が必要なことが発生したりします。(10年以上前は、大騒ぎでした)おそらくそれを嫌ったのと、とにかく速度を稼ぎたかったんでしょうね。(void*)で定義したほうが、圧倒的に速いですから。(そのかわり、バグが入り込みやすく、面倒はプログラマが見ないといけません。)
ちなみにQtCreatorのデバッグ設定がきちんとできていれば、こんな面倒なことはする必要はありません。GUIは使わない組み込みに近いプログラムを作るのに、Qtの一部だけを使っている場合の特殊な状況の話です。
2018年3月5日月曜日
Qtの開発環境(Windows)
相変わらずQtの開発環境づくりに苦労しています。Qtのデフォルトの言語の設定がg++らしく、WindowsでもMinGWにすれば簡単なんですが、やはりVisual Studioにしたい。
どうも、MSがVisual Studioの外部ツールと連携する際のAPIを変更したらしく、これまでのQtで配布していたAddInが使えなくなってます。
色々調べていたら、VStoolというのがあるのでそれを入れれば、Visual StudioでQtの開発ができるとの情報がありました。早速入れてみると、一瞬はうまくいったようなのですが、すぐにダメになりました。このあたりの理由はよくわかりませんが、ちょうどWindowsの更新が煩雑にあった頃のため、何かまたAPIに変更があったのかもしれません。
QtのHPを調べると、何とVisual Studioとの連携をするVStoolはcommercialライセンスにしかなくなっています。(この前、DLできたのはギリギリのタイミング?)
仕方ないので、Qt Creatorの環境を作ります。一方、Visual Studioの方についたQtのAddInは削除する方法が見つかりません。気持ち悪いので、TotalUninstallerというツールでVisual Studioの環境をバッサリ削除し、再インストールしました。
何だかんだと苦労しましたが、いったんきれいな状態にマシンをしてから再度Qtをインストールするとうまくいきました。Qt Creatorの設定画面でもきれいにVisual Studioが認識されています。
色々やっていた時に、WDKをインストールしてあるせいか、デバッグもきちんとできました。
どうも、MSがVisual Studioの外部ツールと連携する際のAPIを変更したらしく、これまでのQtで配布していたAddInが使えなくなってます。
色々調べていたら、VStoolというのがあるのでそれを入れれば、Visual StudioでQtの開発ができるとの情報がありました。早速入れてみると、一瞬はうまくいったようなのですが、すぐにダメになりました。このあたりの理由はよくわかりませんが、ちょうどWindowsの更新が煩雑にあった頃のため、何かまたAPIに変更があったのかもしれません。
QtのHPを調べると、何とVisual Studioとの連携をするVStoolはcommercialライセンスにしかなくなっています。(この前、DLできたのはギリギリのタイミング?)
仕方ないので、Qt Creatorの環境を作ります。一方、Visual Studioの方についたQtのAddInは削除する方法が見つかりません。気持ち悪いので、TotalUninstallerというツールでVisual Studioの環境をバッサリ削除し、再インストールしました。
何だかんだと苦労しましたが、いったんきれいな状態にマシンをしてから再度Qtをインストールするとうまくいきました。Qt Creatorの設定画面でもきれいにVisual Studioが認識されています。
色々やっていた時に、WDKをインストールしてあるせいか、デバッグもきちんとできました。
2018年2月18日日曜日
Qtの開発環境とAnacondaの問題
QtでGUIを作成する環境をWindowsやMacで作ろうとOpenSource版を設定しようとしたんですが、どうもうまくいきません。
しばらく悩んでましたが、別途インストールしていたAnaconda内に既にQtの環境がPyQtのために入っており、Anaconda側が自分の方を優先したPATH設定にしているため、そちらとぶつかっていました。
色々、設定を考えていましたがAnacondaをインストールした状態で、別途C++用に別バージョンのQt開発環境を設定するのは無理なようです。どうしてもPython(Anaconda)とC++でQtを使いたいなら、Anaconda内のQt環境で我慢するしかなさそうです。ちょっとこれは頭が痛い問題です。
PythonでQt使えばいいじゃないかという声もありますが、ちょっと周りではPythonはメジャーでなくて、GUIはC++でばかり開発してたものですから、それも受け入れられそうにありません。
しばらく悩んでましたが、別途インストールしていたAnaconda内に既にQtの環境がPyQtのために入っており、Anaconda側が自分の方を優先したPATH設定にしているため、そちらとぶつかっていました。
色々、設定を考えていましたがAnacondaをインストールした状態で、別途C++用に別バージョンのQt開発環境を設定するのは無理なようです。どうしてもPython(Anaconda)とC++でQtを使いたいなら、Anaconda内のQt環境で我慢するしかなさそうです。ちょっとこれは頭が痛い問題です。
PythonでQt使えばいいじゃないかという声もありますが、ちょっと周りではPythonはメジャーでなくて、GUIはC++でばかり開発してたものですから、それも受け入れられそうにありません。
2017年11月25日土曜日
Unity カメラコントロール
ちょっと3Dのプログラムを作ろうとしてUnityをかじっています。(大昔はInventorでやってましたが、今時は流行らないしそもそも皆、OpenGLでガリガリ書く時代に逆戻りしちゃってます)
少し癖が強いですが、わかってくると楽にできそうです。ちょっと難点はスクリプトをべったりと1階層にしか置けなさそうな点。複数人で開発するとき困るんだけど。(それともできるんだろうか?VisualStudioも階層構造が見た目と、実際のディレクトリとはまるで別に管理しているのを見て驚きましたが。Unix系から始めていると、ディレクトリ構造をストレートに見た目に反映してくれたほうが分かりやすいんですが。)
ところで別にゲームを作る気は全然なくて、3DのViewerが作りたいので、カメラコントロールをどうしようかと思い、探してみました。(Inventorだと標準についているViewerで簡単にできて、楽だったんですが)ありました、マウスで簡単に制御できるスクリプトが。本格的にやるならそれ用のボタンも作った方がいいんですが、とりあえずは十分です。このスクリプトをCameraにコンポーネントとしてアタッチするだけで、機能してくれます。
少し癖が強いですが、わかってくると楽にできそうです。ちょっと難点はスクリプトをべったりと1階層にしか置けなさそうな点。複数人で開発するとき困るんだけど。(それともできるんだろうか?VisualStudioも階層構造が見た目と、実際のディレクトリとはまるで別に管理しているのを見て驚きましたが。Unix系から始めていると、ディレクトリ構造をストレートに見た目に反映してくれたほうが分かりやすいんですが。)
ところで別にゲームを作る気は全然なくて、3DのViewerが作りたいので、カメラコントロールをどうしようかと思い、探してみました。(Inventorだと標準についているViewerで簡単にできて、楽だったんですが)ありました、マウスで簡単に制御できるスクリプトが。本格的にやるならそれ用のボタンも作った方がいいんですが、とりあえずは十分です。このスクリプトをCameraにコンポーネントとしてアタッチするだけで、機能してくれます。
2017年10月14日土曜日
anaconda内のQt
久しぶりに、少しQtを復習しようかと思いました。とりあえず、まずは慣れているmacで初めて、簡単なプログラム(signal, SLOTの復習です)を入力し、
$ qmake
としたら、何かmacx用のテンプレートがない、というようなことを言われました。
はて?macには今年の春、Qt5.8をインストールしたはずと思い、試しにwhichでqmakeの場所を調べてみると、何とanaconda内のqmakeになっています。どうもanaconda内のpythonパッケージに含まれるPyQtが最低限のバイナリとして持っていて、そこにPATHが通ってしまっています。ぐぐってみると、結構記事があり、PyQtでQtの勉強しよう、というのもありましたが、とりあえずanacondaのqtでは単独で使用するのは難しそうです。(独自にPyQt5をbrewでインストールしてしまう、という荒技もありますが、今度はanacondaのパッケージ管理で問題が出そうなのでやめておきます。)
win10にもanacondaをインストールしていたので、調べてみるとこっちも同じ状況です。win10にはQt5.9をanacondaの後にインストールしていますが、なぜかPATHが通ってません。(元々、コンソールで使うつもりなかったし、そのためかな)試しにPATHを通して見ましたが、デフォルトがg++を使う設定で、win10にはcygwinは入れてありません。(Visual Studioで開発するつもりでしたから、それにcygwin好きじゃないし)
これはおそらくLinuxも同じ様な状況になっているんだろうな。仕方ないので、再度Macに戻り、PATH設定をしてqmakeしました。今度はうまく行きましたが、anacondaのpythonでPyQt使う時何か問題でるかな?(今の所、全然使う予定ないので、逆にanacondaからPyQt外した方がいいかもしれません)
PS
ところで、最後にmacでバイナリが作れましたが、macのqmakeでビルド後にできるバイナリは、Finderからクリックできる構造の*.appになっているのにびっくりしました。コンソールから試すだけだから、そんな構造にインストールしてくれなくてもいいのに… .proに何かオプションを追加すればいいのかもしれません。
2017年9月23日土曜日
Visual StudioでのPython(win10でのpython環境)
いつの間にかVisualStudio上でpythonが開発できることに今更気づきました。このところVSCodeでpythonのデバッグ環境を作っていたので、これなら本家のVisual Studioだってできるだろうと思いつき、調べてみたら2013くらいからできるようになったようです。
win10上でのpython環境は、Visual StudioではPython Toolsのパッケージをインストールしないとデバッグできませんが、pythonインタープリタ自体は自分で好きなものをインストールしろとのこと。runtimeには含めていないようです。配布を考えると、どっちが楽なんだろうか微妙なところですが、これまでwindowsではpythonはメジャーではなかったし、元々OS非依存で開発されていましたからこんな形になったんでしょう。
うちにある最新のwin10マシンにはVisual Stuido 2017 Communityが入れてありますが、真っ先にAnacondaが入れてあるため、そちらがデフォルトのpythonインタープリタになっています。もう一つのマシンには2015 Communityが入っていて、2013年に入れたおそらくpython.orgのpython27が入っていました。
しかしおかげで一つのマシン内に複数のpythonがインストールされている状態です。実際、Visual Studioの機能でd「python環境」というwindowがあり、そこでデバッグ/実行するときのpython環境を選べるようになっているくらいです。(いや、それCLIで実行するときはどうするんだよ、と突っ込みを入れたくなりますがそれも含めて考えてデバッグしろということでしょう。面倒くさい。)
この際、古いマシンの方のpythonをpython3にしようかと考えたんですが、ちょっとググってみたら、M$の推奨は悩んだらAnacondaが無難、Visual StudioのC++, C#と連携を考えるならIronPythonとのこと。調べると、IronPythonって、C#で実装されているとのこと。そのおかげで、Cythonもいけるらしい。しかしながら、python3がなくいまだに2.7というところが悲しいですが、ちょっと連携を試してみたいのでIronPythonを入れてみます。
Macもpythonは多数のバージョンがpyenvのおかげで入っていてひどいことになっています。python好きなんだけど、バージョン管理をなんとかして。(配布の時のハードルがかなり高いです)
win10上でのpython環境は、Visual StudioではPython Toolsのパッケージをインストールしないとデバッグできませんが、pythonインタープリタ自体は自分で好きなものをインストールしろとのこと。runtimeには含めていないようです。配布を考えると、どっちが楽なんだろうか微妙なところですが、これまでwindowsではpythonはメジャーではなかったし、元々OS非依存で開発されていましたからこんな形になったんでしょう。
うちにある最新のwin10マシンにはVisual Stuido 2017 Communityが入れてありますが、真っ先にAnacondaが入れてあるため、そちらがデフォルトのpythonインタープリタになっています。もう一つのマシンには2015 Communityが入っていて、2013年に入れたおそらくpython.orgのpython27が入っていました。
しかしおかげで一つのマシン内に複数のpythonがインストールされている状態です。実際、Visual Studioの機能でd「python環境」というwindowがあり、そこでデバッグ/実行するときのpython環境を選べるようになっているくらいです。(いや、それCLIで実行するときはどうするんだよ、と突っ込みを入れたくなりますがそれも含めて考えてデバッグしろということでしょう。面倒くさい。)
この際、古いマシンの方のpythonをpython3にしようかと考えたんですが、ちょっとググってみたら、M$の推奨は悩んだらAnacondaが無難、Visual StudioのC++, C#と連携を考えるならIronPythonとのこと。調べると、IronPythonって、C#で実装されているとのこと。そのおかげで、Cythonもいけるらしい。しかしながら、python3がなくいまだに2.7というところが悲しいですが、ちょっと連携を試してみたいのでIronPythonを入れてみます。
Macもpythonは多数のバージョンがpyenvのおかげで入っていてひどいことになっています。python好きなんだけど、バージョン管理をなんとかして。(配布の時のハードルがかなり高いです)
2017年8月23日水曜日
win10 VSCodeでpython(githubへup)
これまで基本自分はLinuxかMacでプログラムを作り、gitでコード管理、githubへupしていました。ただ一応、windowsでもeclipseではgithubにupしてました。
しかし、このところどうにもwindowsでプログラムを作らないとやっていけなさそうな状況になってきて、更にM$がVScodeをOpenSourceにしてきて、ずいぶん力を入れてきています。まだまだ、eclipseにはかないませんが、かなり頑張ってきています。これは一つ、今のうちに使い方を覚えていこうと試してみました。
とりあえず、せっかくVScodeを使うので言語は好きなpythonで行ってみます。(これはまた設定でかなり悩みましたが、それは別の時に)VScode自体は、ローカルではgitの管理機能を持っていますが、eclipseと違い、残念ながらまだリモートへのpush/pullの手段を持っていません。
そのために、VScodeの「統合ターミナル」で直にgitコマンドを実行しないといけません。しかし、更に問題なのがwindowsは標準ではsshのアクセスコントロール機能を持っていません。つまり、githubにアクセスするRSAキーを素では扱えないんです。
ネットでぐぐると、その他のGUIツール(例えば亀とか)を使えと書いてありますが、それもいやなので、しばらく考えてみました。
思いついたのが、gitのremote originを登録するとき、git@ではなく、https://github.com/ならどうだろうか?ということです。試してみたら、pushしたところで、githubのアカウントとパスワードを問い合わせるDialogが出てきて、入力したらうまくいきました。
一応、1回pushできればアクセス・コントロールは通るので、次からはVScodeのUIでいけるようです。(まあダメでも、アカウントとパスワードの入力くらいなら構いません)
ただ、ローカルのgitの初期化後の最初のcommitもかなり苦労しました(;^_^A もう何度、統合ターミナルで直にgitコマンド打ち込んでやろうと思ったことか。(元々、gitは直にコマンド打ち込む方が好きなんです)しかし、なんかそれでは負けなような気がして、VScodeのエラーログや画面をにらめっこして、やっとうまくいきました。(実は、本日いきなりVScodeの更新が入り、なんか少し設定ファイルやら変わったよう。それもあってかネットの情報そのままでは素直に動いてくれませんでした)
しかし、このところどうにもwindowsでプログラムを作らないとやっていけなさそうな状況になってきて、更にM$がVScodeをOpenSourceにしてきて、ずいぶん力を入れてきています。まだまだ、eclipseにはかないませんが、かなり頑張ってきています。これは一つ、今のうちに使い方を覚えていこうと試してみました。
とりあえず、せっかくVScodeを使うので言語は好きなpythonで行ってみます。(これはまた設定でかなり悩みましたが、それは別の時に)VScode自体は、ローカルではgitの管理機能を持っていますが、eclipseと違い、残念ながらまだリモートへのpush/pullの手段を持っていません。
そのために、VScodeの「統合ターミナル」で直にgitコマンドを実行しないといけません。しかし、更に問題なのがwindowsは標準ではsshのアクセスコントロール機能を持っていません。つまり、githubにアクセスするRSAキーを素では扱えないんです。
ネットでぐぐると、その他のGUIツール(例えば亀とか)を使えと書いてありますが、それもいやなので、しばらく考えてみました。
思いついたのが、gitのremote originを登録するとき、git@ではなく、https://github.com/ならどうだろうか?ということです。試してみたら、pushしたところで、githubのアカウントとパスワードを問い合わせるDialogが出てきて、入力したらうまくいきました。
一応、1回pushできればアクセス・コントロールは通るので、次からはVScodeのUIでいけるようです。(まあダメでも、アカウントとパスワードの入力くらいなら構いません)
ただ、ローカルのgitの初期化後の最初のcommitもかなり苦労しました(;^_^A もう何度、統合ターミナルで直にgitコマンド打ち込んでやろうと思ったことか。(元々、gitは直にコマンド打ち込む方が好きなんです)しかし、なんかそれでは負けなような気がして、VScodeのエラーログや画面をにらめっこして、やっとうまくいきました。(実は、本日いきなりVScodeの更新が入り、なんか少し設定ファイルやら変わったよう。それもあってかネットの情報そのままでは素直に動いてくれませんでした)
2017年8月12日土曜日
Win10でPython
今まではPython使うときは、基本MacかLinuxでした。しかし、大抵の人はWindowsで動くプログラムを希望します。
仕方ないので、Windows10でのPython環境を構築することを考えて、anacondaで試してみました。特に地図表示が欲しいので、basemapパッケージをインストールしたいのですが、これまでwindowsだけは単にinstallコマンドだけではダメでした。しかし、最近やっと一発で行けるようになったようです。以下のコマンドでできました。
> conda install -c conda-forge basemap
> conda install -c conda-forge basemap-data-hires (地図データです)
参考にしたHPでは、basemapのバージョン指定をしていましたが、元のHPを見ると、バージョン番号は省いても最新のものを入れてくれるように今はなっていました。
ただ、このconda-forgeを使うと、conda自体を古いバージョンにしてしまうらしく、再度最新のものにしておかないと、今後の管理に支障をきたす恐れがあります。
> conda update conda
実際、自分が試した時もconda-forgeを使うと一つ古いバージョンに戻されていました。
さて実際に使ってみましたが(Python入門にあったロケットシミュレーションです)、なんかグラフの軸のラベルが文字化けして、□が出てくるだけです。(どうも日本語がダメです)おかしいと思い、半年くらい前に最初に試したMacで動かしてみると、packageのimportでエラーが出ます。どうもいくつか更新したものの相互依存関係が壊れているようなので、全部最新に更新します。それで動かしてみると、あれ?windowsと同じようにグラフの軸のラベルが文字化けしています。最初からこうだったけ?どうも何か問題が起きているようです。(どうも最新のmatplotlibのデフォルトフォントが日本語対応していないようです。plt.rcParams['font.family']='IPAexGothic'とフォントを指定していますが、システムにそれがない模様。)
ただ、windowsでもほぼ同様なpython環境が実現できているようです。
fontについてその後
少し調べてみましたが、以下のコマンドでシステムに登録されているTTFのフォントリストが得られます。
>> import matplotlib.font_manager
>> print([f.name for f in matplotlib.font_manager.fontManager.ttflist])
大量にフォントが出力されてきて、どれが日本語に対応しているのかわかりませんが以下で日本語が出力されました。
・win10
mpl.rcParams['font.family'] = 'HGMaruGothicMPRO'
・Mac
mpl.rcParams['font.family'] = 'AppleGothic'
(一部文字がまだ豆腐でした。Macは少し前にOSがSierraに変わったときにフォントが変わってしまったようです。)
conda-forgeとは
anacondaは元々、continuum社がパッケージをまとめたものですが、github社がその他のグループのリポジトリを集めて公開しているもののようです。そのため、より先進的なパッケージが集まっています。今回試したbasemap(windows版)が、anaconda.orgにはなくても、conda-forgeにはありました。
仕方ないので、Windows10でのPython環境を構築することを考えて、anacondaで試してみました。特に地図表示が欲しいので、basemapパッケージをインストールしたいのですが、これまでwindowsだけは単にinstallコマンドだけではダメでした。しかし、最近やっと一発で行けるようになったようです。以下のコマンドでできました。
> conda install -c conda-forge basemap
> conda install -c conda-forge basemap-data-hires (地図データです)
参考にしたHPでは、basemapのバージョン指定をしていましたが、元のHPを見ると、バージョン番号は省いても最新のものを入れてくれるように今はなっていました。
ただ、このconda-forgeを使うと、conda自体を古いバージョンにしてしまうらしく、再度最新のものにしておかないと、今後の管理に支障をきたす恐れがあります。
> conda update conda
実際、自分が試した時もconda-forgeを使うと一つ古いバージョンに戻されていました。
さて実際に使ってみましたが(Python入門にあったロケットシミュレーションです)、なんかグラフの軸のラベルが文字化けして、□が出てくるだけです。(どうも日本語がダメです)おかしいと思い、半年くらい前に最初に試したMacで動かしてみると、packageのimportでエラーが出ます。どうもいくつか更新したものの相互依存関係が壊れているようなので、全部最新に更新します。それで動かしてみると、あれ?windowsと同じようにグラフの軸のラベルが文字化けしています。最初からこうだったけ?どうも何か問題が起きているようです。(どうも最新のmatplotlibのデフォルトフォントが日本語対応していないようです。plt.rcParams['font.family']='IPAexGothic'とフォントを指定していますが、システムにそれがない模様。)
ただ、windowsでもほぼ同様なpython環境が実現できているようです。
fontについてその後
少し調べてみましたが、以下のコマンドでシステムに登録されているTTFのフォントリストが得られます。
>> import matplotlib.font_manager
>> print([f.name for f in matplotlib.font_manager.fontManager.ttflist])
大量にフォントが出力されてきて、どれが日本語に対応しているのかわかりませんが以下で日本語が出力されました。
・win10
mpl.rcParams['font.family'] = 'HGMaruGothicMPRO'
・Mac
mpl.rcParams['font.family'] = 'AppleGothic'
(一部文字がまだ豆腐でした。Macは少し前にOSがSierraに変わったときにフォントが変わってしまったようです。)
conda-forgeとは
anacondaは元々、continuum社がパッケージをまとめたものですが、github社がその他のグループのリポジトリを集めて公開しているもののようです。そのため、より先進的なパッケージが集まっています。今回試したbasemap(windows版)が、anaconda.orgにはなくても、conda-forgeにはありました。
2017年8月5日土曜日
MacBookのバッテリー交換
2010年より前に購入(つまり10年くらいたってる)したMacBookがあります。当時、Intel搭載の最初のMacBookとして非常に人気が高かったものです。今ではもうOSの更新はとうにできませんが、時々使っています。(さすがにネットサーフィンは怖くて、これではしません)
いや~、見事に膨張していますね。上にのっけたWalkmanが傾いています。これはもう使用は危険です。いつ爆発するかもしれません。(最悪の話ですが)爆発はしなくても、煙くらい吹いてもおかしくありません。これは使用中止かと思いましたが、特定用途でまだ使っているので、試しにバッテリーなしで100Vをつないだ状態で電源を入れてみたら動きます。
それでも、その状態で使い続けるのも危ないので、AMAZONで探してみたら、互換品ですがまだ売ってるんですね交換用バッテリー。早速注文しました。
PS
交換用バッテリー届きました。もちろん純正品ではなく、チャイナ系のメーカーです。容量も少し大きくなっています。早速セットしてみると、微妙にサイズが厚いようで、ロックするのに苦労しました。まあ、それくらいは想定内、ちょっとおそるおそる電源を入れてみると普通に動きます。しばらくは様子に注意しながらの運用です。
今日、持ってみたら何か裏面に違和感が… バッテリーが膨らんでいる!?
いや~、見事に膨張していますね。上にのっけたWalkmanが傾いています。これはもう使用は危険です。いつ爆発するかもしれません。(最悪の話ですが)爆発はしなくても、煙くらい吹いてもおかしくありません。これは使用中止かと思いましたが、特定用途でまだ使っているので、試しにバッテリーなしで100Vをつないだ状態で電源を入れてみたら動きます。
それでも、その状態で使い続けるのも危ないので、AMAZONで探してみたら、互換品ですがまだ売ってるんですね交換用バッテリー。早速注文しました。
PS
交換用バッテリー届きました。もちろん純正品ではなく、チャイナ系のメーカーです。容量も少し大きくなっています。早速セットしてみると、微妙にサイズが厚いようで、ロックするのに苦労しました。まあ、それくらいは想定内、ちょっとおそるおそる電源を入れてみると普通に動きます。しばらくは様子に注意しながらの運用です。
2017年7月22日土曜日
Windows Visual StudioによるPython環境について
自分はよくPythonでプログラムを作っているんですが、ほとんどMacかLinuxでした。WindowsでPythonやろうと思うと、パッケージを別途インストールしないといけないし、そのメンテンナンスも面倒だし。(Macなんてbrewで更新一発ですよ。最近は、anacondaも試しています。)
ところが、この前Visual StudioでもPython開発環境ができたことを知りました。いや不勉強にも、Visual Studio 2015くらいからあったようです。いや、何だかんだ言っても、仕事でプログラムを作っていると、お客さんはどうしてもWindowsで動くようにして欲しいという要望が多いんです。はっきり言って、システム作る方はWindowsでは作りたくありません。動作環境がM$の都合でコロコロ変わり、動作保証するのが大変なんです。おまけに、余分なプロセスが一杯動いていて、自分の作ったプログラムがどうしても遅くなるし。
ただまあ、お客様の希望は聞かないといけません。ちょっとWindowsでのPython開発環境を試してみました。ただ、その辺は色んなHPに一杯書かれているので省き、一番大事な問題、作ったPythonプログラムをどうやって動かすかです。
どのHPみても(M$のドキュメント見ても)、皆Visual Studioから起動することしか教えてくれません。いやいや、開発中はそれでもいいんですが、開発終わったらアイコン等から直接動かしたいでしょう。ところが肝心の、直接動かす設定に関する情報がどうしても見つかりません。仕方ないので、ちょっと調べてみました。(イリーガルなところがあるかもしれません)
まずそもそもVisual Studio自体が、Python環境としてどこを使っているのかが問題です。(コマンドプロンプトではpythonがどこにあるのかわからない、と言ってきます)実際、anacondaインストールすると、Visual Studioは自動的にその環境を検出してくれて、元々Visual Studioが持っているPython環境とどちらを使うか選択させてくれます。色々ぐぐってみましたが、全然情報が見つからないので、やむなくC:\から「検索」で調べてみました。すると以下の所にPython.exeがありました。
C:\Program Files\Python36\
64bitのPythonインタープリタなのに、何故こちら?とは思うんですが、どうもここです。まあ、PATH設定に追加してしまうのが簡単なんですが、ちょっと場所が気持ち悪いところにあるので何時変わるかもしれません。どうせ単独動作させるときは.batファイルから起動することが多いでしょうから、そこだけPATHを設定してしまいましょう。
Pythonのプログラムを起動する.batファイルを作り、最初に以下を入れておきます。
set PATH=C:\Program Files\Python36;%PATH%
これで、この.batファイルから起動されるプロセスだけにPythonのPATHが通ります。この後、Pythonプログラムの起動プログラムを書いてやればいいだけです。
ところが、この前Visual StudioでもPython開発環境ができたことを知りました。いや不勉強にも、Visual Studio 2015くらいからあったようです。いや、何だかんだ言っても、仕事でプログラムを作っていると、お客さんはどうしてもWindowsで動くようにして欲しいという要望が多いんです。はっきり言って、システム作る方はWindowsでは作りたくありません。動作環境がM$の都合でコロコロ変わり、動作保証するのが大変なんです。おまけに、余分なプロセスが一杯動いていて、自分の作ったプログラムがどうしても遅くなるし。
ただまあ、お客様の希望は聞かないといけません。ちょっとWindowsでのPython開発環境を試してみました。ただ、その辺は色んなHPに一杯書かれているので省き、一番大事な問題、作ったPythonプログラムをどうやって動かすかです。
どのHPみても(M$のドキュメント見ても)、皆Visual Studioから起動することしか教えてくれません。いやいや、開発中はそれでもいいんですが、開発終わったらアイコン等から直接動かしたいでしょう。ところが肝心の、直接動かす設定に関する情報がどうしても見つかりません。仕方ないので、ちょっと調べてみました。(イリーガルなところがあるかもしれません)
まずそもそもVisual Studio自体が、Python環境としてどこを使っているのかが問題です。(コマンドプロンプトではpythonがどこにあるのかわからない、と言ってきます)実際、anacondaインストールすると、Visual Studioは自動的にその環境を検出してくれて、元々Visual Studioが持っているPython環境とどちらを使うか選択させてくれます。色々ぐぐってみましたが、全然情報が見つからないので、やむなくC:\から「検索」で調べてみました。すると以下の所にPython.exeがありました。
C:\Program Files\Python36\
64bitのPythonインタープリタなのに、何故こちら?とは思うんですが、どうもここです。まあ、PATH設定に追加してしまうのが簡単なんですが、ちょっと場所が気持ち悪いところにあるので何時変わるかもしれません。どうせ単独動作させるときは.batファイルから起動することが多いでしょうから、そこだけPATHを設定してしまいましょう。
Pythonのプログラムを起動する.batファイルを作り、最初に以下を入れておきます。
set PATH=C:\Program Files\Python36;%PATH%
これで、この.batファイルから起動されるプロセスだけにPythonのPATHが通ります。この後、Pythonプログラムの起動プログラムを書いてやればいいだけです。
2017年5月18日木曜日
【雑談】NTTの光モデムがやばい
自分が何時、家のネット回線をADSLから光に変えたか忘れてしまいましたが、昔からずっとNTTです。当時の光は3台装置が必要だったんです。光-電気変換器(正式な名称があるんだろうけど忘れました^^;)、CTU、最後にモデムです。この当時は1portしかEtherがなく、複数台のPCで使いたい場合はその1portをブリッジに繋げるしかありませんでした。(本当はルータにして、そこでproxy噛ませたかったんですが、NTTはDHCPの機能はNTTが持つので、ブリッジしか許してくれませんでした。)
1、2回雷が誘雷したのか壊れて交換しましたが、数年前CTUとモデムを一体型にした新型に交換してくれと電話がきたことがありました。その時は交換が面倒だったので断りましたが、数ヶ月前NTTの携帯と回線の契約をまとめると少し料金がお得になりますという甘言に負けて、契約したらその一体型のモデムに無理やり交換させられてしまいました。開通の設定が少し手間がかかりましたが無事使える様にしました。この新しいモデムですが、無線LANのカードを別売りで追加することはできるは、Etherも4port持ってます。さすがに10年以上前みたいに一家にPCが1台だけだとは思わなくなった様です。
ただLANの配線をし直すのも大変なので、従来のブリッジからの1portとメインのPCをモデムにつなぎました。(ブリッジ経由より、少しは速度が有利なんじゃないかという軽い気持ちでした)
ここからが本題なんですが、家ではNASを使っていて、半年〜1年に1回くらいUSB-HDDにバックアップをとってます。半日くらいかかりますが、まあしかたありません。ところが、今回バックアップをメインのPCにUSB-HDDをつないで行うと、なんかむちゃくちゃ遅い…。しかもよくNASからレスがなくなり、コピーできませんと言ってきます。どうしたのか、色々調べました。NAS周りのLAN回線がどこか接触不良した様子もありませんでした。しかも別の部屋(そこまでWiFiが届かないので、別途回線を通して別のWiFi親機を設置しています)でタブレット等でネットに繋ごうとすると、何時もは何も問題が起きないのに今日に限って全然つながりません。しばらく試していて、どうも別の部屋でタブレットを使うタイミングで、メインPCとNASの接続がおかしくなる様です。
ここまできてやっと推測ができました。メインPCはNTTのモデムに直結しています。4portあるうち、1portの通信量が増えて、他のportからのDHCPの要求に応えれなくなった様です。(能力がこのモデム足りなさすぎ)NASもDHCP機能を使って家庭内LANに接続してますから、時々DHCPアドレスの更新要求を出していますが、その時に別の部屋でタブレットがアクセスしようとすると、両方のDHCP応答が時間内にできない状態になっていたようです。メインPCをNTTのモデムに直結はやめ、NTTのモデムにはブリッジだけつなぎ、あとはブリッジ経由にしました。そうしたところ、NASのバックアップの速度が速くなり、別の部屋でのタブレット使用も問題なくなりました。
しかし、このNTTのモデム一体どんな回路構造になっているのやら。4portつけても、どれかが大量にデータ転送すると(まあ普通の一般家庭では、まずそんなことしないかもしれませんが)、他のportの機能の応答に支障がでるとは。かなりおそまつなCPUを使ってるんだろうな。
1、2回雷が誘雷したのか壊れて交換しましたが、数年前CTUとモデムを一体型にした新型に交換してくれと電話がきたことがありました。その時は交換が面倒だったので断りましたが、数ヶ月前NTTの携帯と回線の契約をまとめると少し料金がお得になりますという甘言に負けて、契約したらその一体型のモデムに無理やり交換させられてしまいました。開通の設定が少し手間がかかりましたが無事使える様にしました。この新しいモデムですが、無線LANのカードを別売りで追加することはできるは、Etherも4port持ってます。さすがに10年以上前みたいに一家にPCが1台だけだとは思わなくなった様です。
ただLANの配線をし直すのも大変なので、従来のブリッジからの1portとメインのPCをモデムにつなぎました。(ブリッジ経由より、少しは速度が有利なんじゃないかという軽い気持ちでした)
ここからが本題なんですが、家ではNASを使っていて、半年〜1年に1回くらいUSB-HDDにバックアップをとってます。半日くらいかかりますが、まあしかたありません。ところが、今回バックアップをメインのPCにUSB-HDDをつないで行うと、なんかむちゃくちゃ遅い…。しかもよくNASからレスがなくなり、コピーできませんと言ってきます。どうしたのか、色々調べました。NAS周りのLAN回線がどこか接触不良した様子もありませんでした。しかも別の部屋(そこまでWiFiが届かないので、別途回線を通して別のWiFi親機を設置しています)でタブレット等でネットに繋ごうとすると、何時もは何も問題が起きないのに今日に限って全然つながりません。しばらく試していて、どうも別の部屋でタブレットを使うタイミングで、メインPCとNASの接続がおかしくなる様です。
ここまできてやっと推測ができました。メインPCはNTTのモデムに直結しています。4portあるうち、1portの通信量が増えて、他のportからのDHCPの要求に応えれなくなった様です。(能力がこのモデム足りなさすぎ)NASもDHCP機能を使って家庭内LANに接続してますから、時々DHCPアドレスの更新要求を出していますが、その時に別の部屋でタブレットがアクセスしようとすると、両方のDHCP応答が時間内にできない状態になっていたようです。メインPCをNTTのモデムに直結はやめ、NTTのモデムにはブリッジだけつなぎ、あとはブリッジ経由にしました。そうしたところ、NASのバックアップの速度が速くなり、別の部屋でのタブレット使用も問題なくなりました。
しかし、このNTTのモデム一体どんな回路構造になっているのやら。4portつけても、どれかが大量にデータ転送すると(まあ普通の一般家庭では、まずそんなことしないかもしれませんが)、他のportの機能の応答に支障がでるとは。かなりおそまつなCPUを使ってるんだろうな。
2017年4月9日日曜日
Pythonで地図を描く:Basemap
anaconda関係で色々調べていたら、Basemapというパッケージのことを知りました。これは地図を描画してくれるライブラリとのこと。昔から、地図のGUIには苦労していたので、早速試してみました。(ちなみにコードはpython3でかいてます。遂に2.7から3系に移行する決心をつけました)
とりあえず実行例を示します。
環境はmac OSXです。(最近は、Linuxよりmacの方が楽になってきました(^_^;))
これは、matplotlibというグラフ描画パッケージが元にあり、その上で動くようです。しかもGUIまで自分で持ってます。以下にコードを示します。
さて、実際に使うときは任意の緯度経度にマークをつけたくなります。定番の日本標準時の明石の位置に赤丸を表示してみました。
コードは以下を追加することになります。
座標のXYはリストで与えてもいいようなので、簡単にGISデータの描画ができます。
PS
ただ気になったのは、これの海岸前の元データはどこからきたんだろう?ということです。自分が知っている限り、(日本のは)国土地理院しかありません。あそこは基本、利用はプライベートの利用は許可していますが、著作権はどこかに表示してね、というスタンスだったはずです。同様なデータがNatural Earthというサイトにありますが、この海岸線(及び国境線)のデータに関するライセンスの記述がありません。自分が見つけられないだけ?ならいいんですが、少しグレーな気がします。
とりあえず実行例を示します。
環境はmac OSXです。(最近は、Linuxよりmacの方が楽になってきました(^_^;))
これは、matplotlibというグラフ描画パッケージが元にあり、その上で動くようです。しかもGUIまで自分で持ってます。以下にコードを示します。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
# 緯度経度で範囲を指定する
north = 46.
south = 30.
east = 147.
#west = 128.
west = 128.
# 地図の表示('merc"は純粋に緯度経度を直行座標系にplotしている)
m = Basemap( projection='merc', llcrnrlat=south, urcrnrlat=north, llcrnrlon=west, urcrnrlon=east, resolution='l' )
# 陸地を茶色に, 湖を水色に
#m.fillcontinents(color='#8B4513', lake_color='#90FEFF')
m.fillcontinents(color='coral', lake_color='aqua')
# 海を濃い青に
#m.drawlsmask(ocean_color='#00008b')
#m.drawlsmask(ocean_color='blue')
m.drawmapboundary(fill_color='blue')
# NASA 'Blue marble' image
#m.bluemarble()
# 海岸線を引く
m.drawcoastlines(linewidth=0.5, color='black')
# 5度ごとに緯度線を描く
m.drawparallels(np.arange(25, 50, 5), labels = [1, 0, 0, 0], fontsize=10)
# 5度ごとに経度線を描く
m.drawmeridians(np.arange(125, 150, 5), labels = [0, 0, 0, 1], fontsize=10)
# 画面に表示
plt.show()
ちょっと色々試行錯誤したあとがコメントに残ってます。面白いのはNASA 'Blue marble'で、衛星写真ぽいテクスチャを貼り付けてくれます。さて、実際に使うときは任意の緯度経度にマークをつけたくなります。定番の日本標準時の明石の位置に赤丸を表示してみました。
コードは以下を追加することになります。
# 地図に色をつけると見えなくなる! zorderが配置の意味をつけるらしい
x = 135.
y = 35.
m.scatter(x, y, s=200, c='red', latlon=True, zorder=10)
これはかなり苦労しました。scatterというメソッドを最初は例題を見ていると、matplotlibのpltのメソッドをcallする例が多数でしたが、どうもうまくいきません。大体、なんで表示領域の座標系をpltが理解できるんだ?ということに気づき、継承しているBasemapからcallしてみたらやっとうまくいきました。(latlon=Trueという引数があり、これを呼ばないと全然位置があいません)また更に罠なのが、zorderという引数です。よく考えれば当たり前なんですが、どう見てもこれ大元にOpenGL使ってるよねという感じです。(引数の中にはalphaまでありました)だったら、描画位置の指定をしないと隠れてしまいます。ですから、マークは少しZ軸で手前に置いて描きます。座標のXYはリストで与えてもいいようなので、簡単にGISデータの描画ができます。
PS
ただ気になったのは、これの海岸前の元データはどこからきたんだろう?ということです。自分が知っている限り、(日本のは)国土地理院しかありません。あそこは基本、利用はプライベートの利用は許可していますが、著作権はどこかに表示してね、というスタンスだったはずです。同様なデータがNatural Earthというサイトにありますが、この海岸線(及び国境線)のデータに関するライセンスの記述がありません。自分が見つけられないだけ?ならいいんですが、少しグレーな気がします。
2017年3月20日月曜日
Pythonのanacondaを導入してみる
pyenv, spyderをmac osxに導入してみる。
SpyderはpythonのIDEで、anacondaパッケージ内に一緒に入っている。
(というか、anaconda内にpython,numpy等全部入ってしまっている模様。逆に事前に入れてあるpythonやライブラリとは独立した生態系になってしまい、混乱することもあり)
とりあえず、macではpyenvのインストールが必須とのこと
$ brew install pyenv
.bash_profileを修正(赤字部分を追加)
export PYENV_ROOT="${HOME}/.pyenv"
export PATH=/opt/lo/bin:/sbin:$PATH:/usr/local/share/python:${PYENV_ROOT}/bin
eval "$(pyenv init -)"
$ pyenv install -lで、インストール可能なバージョン一覧がでるので、確認。
Python3系を使いたい方
$ pyenv install anaconda3-4.0.0
$ pyenv global anaconda3-4.0.0
Python2系を使いたい方
$ pyenv install anaconda-4.0.0
$ pyenv global anaconda-4.0.0
pyenv globalは全体の環境で、anacondaの使うバージョンを指定しています。特定ディレクトリ以下では別のバージョンが使いたい場合、当該ディレクトリでpyenv local (バージョン)としてやります。
condaというバッケージ管理システムがあり、anaconda内のpythonやライブラリはcondaコマンドで管理します。(brewと共存してしまうのがややこしい。気をつけないと何を動かしているのかわからなくなりそう)
それまでbrewでインストールしたpythonはpipコマンドでライブラリのパッケージ管理をします。
(補足:anacondaの環境にはこれまで使っていたchainerが当然入っていません。anaconda内にもpipコマンドがありますので、こいつでanaconda環境内に再度chainerをインストールしてやれば、とりあえずこれまで通りchainerを動かすことはできますが。。。)
(補足:anacondaの環境にはこれまで使っていたchainerが当然入っていません。anaconda内にもpipコマンドがありますので、こいつでanaconda環境内に再度chainerをインストールしてやれば、とりあえずこれまで通りchainerを動かすことはできますが。。。)
またpythonの仮装環境を作るvirtualenvに対する、pyenv-virtualenvというのもあり、condaのpyenv localとsource activateがバッティングしても、こちらが解決してくれるとのこと。
これまでpython2系ばかり使ってきましたが、そろそろpython3系にも手を出したいと考えていました。しかし、このあちこちに異なるバージョンのpythonが入ってしまう状況、頭が混乱しそうで使い方を整理してから始めないと。。。
登録:
投稿 (Atom)








