2019年5月31日金曜日

Pythonで画像ファイルを縮小

PythonのPILモジュールを使って画像ファイルを縮小します。
・一定倍で小さくする
・ファイルの長辺の大きさで決める
・ファイルサイズで決める

というモード切り替えが可能です。

quality は 85  にしています。それ以上にすると ファイルサイズが大きくなるわりに画質は向上しない とのこと 
 

2019年5月27日月曜日

Ubuntuのアプリケーション切り替えAlt+Tabが2つ入っていた件

何故2つ入っているのか不明なのですが、Conpiz comfig setting → Application Switcherというのをオフにしたら1つに出来ました。こちらの方がよい感じですね。

Ubuntuの起動時にコマンドを実行したいとき

Startup Applications Preferenceで設定する


コマンドを直接記入すると動作しなかったので、.shファイルに記述して呼び出すことにしました。

起動時に実行したいコマンドは『CapslockボタンにEscapeを割り当てる』
$ xmodmap -e "keycode 66 = Escape NoSymbol Escape"
これをmy_command.shに記入します。
#!/bin/sh
# swap Capslock to Escape
xmodmap -e "keycode 66 = Escape NoSymbol Escape"
Startup Applications Preferenceで設定します。「session」とか「startup」で検索すると出てきます。



[Add] -> [Edit Startup Program] で

Name: Capslock2ESC
Command: /home/path/to/my_command.sh
Commend: Change Capslock to ESC

と入力します。Commandの項で.shコマンドのPATHを書いてください。



[Save]で追加します。


追加が確認できました。
Removeも、この画面から行います。


(失敗した方法)


/etc/profile.d/」以下に実行したいスクリプトファイル(*.sh)を配置
もやってみましたが、出来ませんでした。むしろ起動が止まってしまってCtrl-Alt-F2に仮想コンソールに入って、shを書き換えて再起動したりしました。
http://yng.hatenablog.jp/entry/2015/05/26/234737



2019年5月26日日曜日

解決: mozcでUbuntuでmozc の変換予測のウィンドウがスペース2回押さないと出ない

以前の記憶では、入力している時点で何もしなくても変換候補が続々と出ていた気がするのだが(現在もWindowsではそうなっている)、入力時は変換がでなくなりました。

何でだろう〜と思ってmozc設定を見てみると、自分で変えたのか変わってしまったのか、MozcSettings -> Privacy -> PresentationMode - > Temporally disable suggestionsというのにチェックが入っていました。

これを外すと直りました。





2019年5月22日水曜日

venv環境でjupyterが動作しなくなるので直す

症状


Jupyterのhomeは起動はするが、ipynbを開くとカーネルが止まってしまう。

原因


baseの環境がpy3.6で、py3.5のvenvを作った。
venv に入って、ターミナルではpython3.5が起動するが、jupyterでは3.5ではなく以前の3.6だった

対策


ipykernelを入れ直すのが良いらしいと判明

$ python -m ipykernel install --user

これでうまくいきました。jupyterのconfigはvenvと共通になっていたのが問題なのではないかと・・・(★要追記:変更の仕方がイマイチわからない)

jupyter --paths
jupyter --config-dir

で見ると同じものが出てくるのがわかります。

https://github.com/ipython/ipython/issues/10346

2019年5月18日土曜日

C++で2のD乗をビットの全組合せ文字列に直すプログラム

2乗を2進数と組み合わせているのが分かりにくいけど便利そう。
#include 
#include 
#include 

using namespace std;

int main(){

  // 2のD乗 の選択肢を ビットで計算する
  int D = 4;
  for (int mask = 0; mask < (1 << D); ++mask){
    int s = 0, num = 0, rest_max = -1;
    string bi = "";
    for (int i=0; i < D; ++i){
      /*
      // mask >> i & 1 は 右シフトして最下位のビットが1かを見るので、
      // maskを2進数表示したときの並びが下位から出てくる
      // 2**n の選択 の総当りに使える
      cout << "mask: "<> i): "<< (mask >> i)
        << " (mask >> i & 1): " << (mask >> i & 1) << endl;
      */
      if (mask >> i & 1){
        bi.insert(0, "1");
      } else {
        bi.insert(0, "0");
      }
    }
  cout << bi << endl;
  }
  cout << endl;
}

D=4としているので、2**4=16種類出てきて、4ビットの組合せが出力される
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

C++ でint 配列[] で0 を初期化しないとき、するときの違い

勘違いしていたのでメモ

初期化しないとき

#include <iostream>

using namespace std;

int main(){
  int p[10]; // 配列p の宣言 要素は10

  p[0] = 0;
  p[1] = 1;

  for (int i=0; i<10 br="" i="">    cout << p[i] << endl;
  }

return 0;
}
出力
0
1
0
0
4196688
0
4196240
0
1565145232
32765
-1563105536
-1766918773

ということで、配列の初期値にはよくわからないintが入っていました。

初期化するとき

= {} を使うと0で初期化できます。

#include <iostream>

using namespace std;

int main(){
  int p[10] = {1};

  p[0] = 0;
  p[1] = 1;

  for (int i=0; i<10 br="" i="">    cout << p[i] << endl;
  }

return 0;
}
出力
0
1
0
0
0
0
0
0
0
0

2019年5月17日金曜日

Chromeで文字がにじんでいる、汚いときはtop-chrome-mdをいじって直す

GoogleChromeで、あるとき突然文字がにじんできたり、汚くなったりします。

そういうときは、アドレスに

chrome://flags/#top-chrome-md

を入れて開いて、


Touch UI Layout
Enables touch UI layout in the browser's top chrome. – Mac, Windows, Linux, Chrome OS


#top-chrome-touch-ui

の項目をDefaultからAutomaticにします。クロムを再起動すると、直りました。

バージョン: 74.0.3729.157(Official Build) (64 ビット)

Pythonでパッケージがimportされているかをdirで調べる

パッケージがimportされているかをdirで確認します。

import numpy as np

とやったかどうかを忘れてしまって(?)、importしているか?を確認したいときは、

dir()

とすると、現在のスコープの中にあるオブジェクト名が全て出せます。

dirのヘルプによると・・・

dir(...)
 
    If called without an argument, return the names in the current scope.
    Else, return an alphabetized list of names comprising (some of) the attributes
    of the given object, and of attributes reachable from it.

となっています。

今はnumpyをnpとしてインポートしていますから、名前が'np'として入っています。


dirの中身が多いときは、
 [i for i in dir() if i =='np']

などとすると、確認したいnpだけを見られます。

dir(np)とやって存在しなければエラー、としても良いですが、存在しているときはnpのメソッド名が多数出力されてしまいます。




2019年5月15日水曜日

未解決:Anacondaのcondaインストールがどんどん重くなる件

Anacondaを使っていると、パッケージが増えるにつれてどんどん重くなってきます。いろいろとインストールしてくれるので時間がかかりまくるのですが。

今のところ、新しい環境を作るくらいしか解決策はないですが、condaのコントリビュータたちも課題として認識しているようです。

https://github.com/conda/conda/issues/7239

2019年5月13日月曜日

Python3.6.3でpipがエラーになる件

Python3.6.6では修正されていました。pip10.0.1

pip 9.0.1では

setup.py からインストールしようとするとurf-8のエラーが出ていました。

Exception:
Traceback (most recent call last):
  File "C:\Users\...\anaconda3\lib\site-packages\pip\compat\__init__.py", line 73, in console_to_str
    return s.decode(sys.__stdout__.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 5: invalid start byte

githubのイシューによるとpy3.6からコンソールIOにUTF-8に変更したとのことで。
https://github.com/pypa/pip/issues/4251

修正するよりも、pipのバージョンを変える方が良さそうですね。

2019年5月12日日曜日

Ubuntu で g++を5.5から6.5にアップグレードした

(ubuntu16.04)

-std=C++11 って毎回打ちたくない

g++はversion5.5を使っていて、C++97がデフォルトになっていました。いちいち-std=C++11とか入力するのがめんどうだな〜と思い始めたのですが、設定方法も紹介されてないようです。g++をアップグレードすればデフォルトが変わるのでは、ということでアップグレードしました。

https://gcc.gnu.org/projects/cxx-status.html#cxx14
のC++14 Support in GCCのところを見ると、

"This mode is the default in GCC 6.1 and above; it can be explicitly selected with the -std=c++14 command-line flag, or -std=gnu++14 to enable GNU extensions as well."

とのことで、GCC6.1以降ではC++14がデフォルトになっています。(C++11がデフォルトになっているバージョンはないようです)。AtCoderではC++14が標準画面で現れるようになっているし、ちょうどいいかなということでC++14にします。(とはいえAtCoderではGCCは5.4.1を使っているようです)

2019/05時点で、version6の中では6.5が最新でしたのでこれを入れることにします。


GCC 6.5 released [2018-10-26]
https://gcc.gnu.org/

インストールする

https://askubuntu.com/questions/781972/how-can-i-update-gcc-5-3-to-6-1
ここに書いてあるコマンドを一通りやると、バージョン6を入手して6の中の最新まで上げられました。
$ g++ --version

g++ (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt update
$ sudo apt install gcc-6
$ sudo apt install g++-6
(ここでバージョン確認しても上がっていない)
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-6    

これが必要です。

$ g++ --version

g++ (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026

6.5まで上がっていることが確認できました。
#include <iostream>
int main()
{
 std::cout << __cplusplus << std::endl;
}
このコードを実行してC++スタンダードを確認すると
201402
と出力されますので、C++14をデフォルトで使っていることが確認できました。

2019年5月11日土曜日

解決: UbuntuでUnity-tweak-toolが起動エラー

Unity-tweak-toolが起動しなくなりました。

直りました。結局、全部入れなおすとよかったです。

↓以下は修正の試行錯誤の失敗の記録です。

$ unity-tweak-tool
/usr/lib/python3/dist-packages/UnityTweakTool/__init__.py:40: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
  from gi.repository import Gtk
Error: schema com.canonical.indicator.bluetooth not installed
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

こんなエラーが出ます。bluetoothのindicatorがない?とか。


The following schema is missing
com.canonical.indicator.bluetooth
In order to work properly, Unity Tweak Tool recommends you install the necessary packages


https://askubuntu.com/questions/843433/missing-bluetooth-applet-on-16-04
これの通りにインストールしてみましたが、NG。
$ sudo apt-get install --reinstall blueman



$ unity-tweak-tool
/usr/lib/python3/dist-packages/UnityTweakTool/__init__.py:40: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
  from gi.repository import Gtk
        Another instance of Unity Tweak Tool seems to be running with
        process id 6498. Switching to the already existing window.
        If you believe there is no other instance running, remove the
        file /home/shimo/.cache/unity-tweak-tool/pid.lockfile and try again.

Error: schema com.canonical.indicator.bluetooth not installed
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.


これはいまいち分からない synaptic をインストールするらしい
https://ubuntuforums.org/showthread.php?t=2181375


unity-tweak-toolをリセットしてみるものの、NG。

$ unity-tweak-tool --reset-unity
/usr/lib/python3/dist-packages/UnityTweakTool/__init__.py:40: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
  from gi.repository import Gtk
WARNING: You are about to reset Unity to its default configuration.
    This will result in loss of configuration.
    It is normal for your desktop to flicker during the process.
    Type yes to continue, anything else to exit.
  
Do you wish to continue?yes
Initialising Unity reset
Killing Unity and Compiz
Resetting compiz plugins
Schema org.compiz.session successfully reset
Schema org.compiz.scaleaddon successfully reset
Schema org.compiz.core successfully reset
Schema org.compiz.clone successfully reset
Schema org.compiz.ring successfully reset
Schema org.compiz.scale successfully reset
Schema org.compiz.composite successfully reset
Schema org.compiz.wallpaper successfully reset
Schema org.compiz.screenshot successfully reset
Schema org.compiz.mblur successfully reset
Schema org.compiz.workarounds successfully reset
Schema org.compiz.animation successfully reset
Schema org.compiz.shift successfully reset
Schema org.compiz.winrules successfully reset
Schema org.compiz.opengl successfully reset
Schema org.compiz.water successfully reset
Schema org.compiz.matecompat successfully reset
Schema org.compiz.fade successfully reset
Schema org.compiz.mousepoll successfully reset
Schema org.compiz.gnomecompat successfully reset
Schema org.compiz.grid successfully reset
Schema org.compiz.shelf successfully reset
Schema org.compiz.kdecompat successfully reset
Schema org.compiz.opacify successfully reset
Schema org.compiz.obs successfully reset
Schema org.compiz.cube successfully reset
Schema org.compiz.annotate successfully reset
Schema org.compiz.freewins successfully reset
Schema org.compiz.staticswitcher successfully reset
Schema org.compiz.maximumize successfully reset
Schema org.compiz.firepaint successfully reset
Schema org.compiz.trailfocus successfully reset
Schema org.compiz.resize successfully reset
Schema org.compiz.splash successfully reset
Schema org.compiz.neg successfully reset
Schema org.compiz.profile successfully reset
Schema org.compiz.wobbly successfully reset
Schema org.compiz.unityshell successfully reset
Schema org.compiz.extrawm successfully reset
Schema org.compiz.switcher successfully reset
Schema org.compiz.titleinfo successfully reset
Schema org.compiz.place successfully reset
Schema org.compiz.snap successfully reset
Schema org.compiz.scalefilter successfully reset
Schema org.compiz.resizeinfo successfully reset
Schema org.compiz.vpswitch successfully reset
Schema org.compiz.commands successfully reset
Schema org.compiz.widget successfully reset
Schema org.compiz.decor successfully reset
Schema org.compiz.showdesktop successfully reset
Schema org.compiz.expo successfully reset
Schema org.compiz.addhelper successfully reset
Schema org.compiz.rotate successfully reset
Schema org.compiz.td successfully reset
Schema org.compiz.move successfully reset
Schema org.compiz.crashhandler successfully reset
Schema org.compiz.wizard successfully reset
Schema org.compiz.thumbnail successfully reset
Schema org.compiz.imgsvg successfully reset
Schema org.compiz.mag successfully reset
Schema org.compiz.put successfully reset
Schema org.compiz.cubeaddon successfully reset
Schema org.compiz.wall successfully reset
Schema org.compiz.ezoom successfully reset
Schema org.compiz.imgjpeg successfully reset
Schema org.compiz.notification successfully reset
Schema org.compiz.bench successfully reset
Schema org.compiz.workspacenames successfully reset
Schema org.compiz.fadedesktop successfully reset
Schema org.compiz.showmouse successfully reset
Schema org.compiz.unitymtgrabhandles successfully reset
Schema org.compiz.showrepaint successfully reset
Resetting more compiz plugins
Schema org.compiz.gwd successfully reset
Schema org.compiz successfully reset
Schema org.compiz.integrated successfully reset
Resetting Unity settings
Schema com.canonical.Unity.Dash successfully reset
Schema com.canonical.Unity successfully reset
Schema com.canonical.Unity.FilesLens successfully reset
Schema com.canonical.Unity.Interface successfully reset
Schema com.canonical.Unity.Runner successfully reset
Schema com.canonical.Unity.Devices successfully reset
Schema com.canonical.Unity.ApplicationsLens successfully reset
Schema com.canonical.Unity.Decorations successfully reset
Schema com.canonical.Unity.Gestures successfully reset
Schema com.canonical.Unity.IntegratedMenus successfully reset
Reset complete. Reloading unity
GLib-GIO-Message: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.
compizconfig - Info: Backend     : gsettings
compizconfig - Info: Integration : true
compizconfig - Info: Profile     : unity
We're already using profile 'unity', no need to switch
unity-panel-service stop/waiting
unity7 stop/waiting
unity-panel-service start/running, process 7945
unity7 start/running, process 8049
Please log out and log back in.

リセットの中にbluetoothがないようです。今このPCではbluetoothがいつのまにか認識されなくなっています()使っていないし)。そこらへんのデバイスのモジュールと同時にライブラリが消えてしまったのでしょうね。

2019年5月7日火曜日

mprofでmatplotlibが見つからないときの対処

memory_profilerでmprofコマンドを使うと、入っているはずのmatploblibが無い、というエラーが出ました。ターミナルはPowershellです。

結論


matplotlibをアンインストール→再インストール

--

出るエラーはこのようなものです。

(略)...\profiler_mutiprocessing\memory> mprof plot
matplotlib is needed for plotting.
DLL load failed: 指定されたプロシージャが見つかりません。

jupyter環境では問題ありませんでした。その場合は、mprof.pyを直接すべて読み込んでいるようです。

mprof.py の中を見ると、
try:
    import pylab as pl
except ImportError as e:
    print("matplotlib is needed for plotting.")
    print(e)
ということで、pylabが入っていないようです。
これはmatplotlibと一緒にインストールされているはずなのですが、ないようです。何らかの操作で消えてしまったんでしょうか。

conda uninstall maplotlib
conda install matplotlib

としたら解決しました。

2019年5月6日月曜日

PowershellからExport csv してPythonで読んで保存するときの文字化け対策

日本語フォントが入っているときのcsv出力の注意です。

PowershellでGet-Child-Items を -Exportで出力し、
Export-Csv -Encoding UTF8
としてエンコードをUTF8に設定できます。

これをPythonで読もうとするとき、
pandas.read_csv
を使うと utf-8 で読めます(日本語になっている)。

しかし、ここから保存するときにutf-8にすると文字化けしてしまいました。

何がだめだったか


「~」が入っているからなようです。

http://tanakahisateru.hatenablog.jp/entry/20080728/1217216409
で紹介されているように、波型は2つのユニコードを持っているようです。

それで判定できなくて文字化けしていると。

対策としては、UTF8ではなくcp932にすること。
Export-Csv -Encoding default
にしたらcp932になって解決。
(Winの場合はcp932がデフォルでした)

2019年5月3日金曜日

Pythonで何行目にいるかを出力する

Pythonで今いる行が何行目かを知りたいときに使います。loggingのlinenoと同じです。

関数lineno()が存在する行番号を返すサンプルプログラムです。

sample.py

import inspect

def lineno():
    """Returns the current line number in our program."""
    return inspect.currentframe().f_back.f_lineno

if __name__ == "__main__":
    print(lineno())

$ python sample.py
→ 8  # 8行目にlineno()がある。


2019年5月1日水曜日

日誌2019年5月

2019/05/11
AtCoderをやってみることにしました。目的はC++の勉強です。とりあえずABCというビギナコンテストの一番簡単な問題だけを解いていくことにします。10問くらいは問いてみて、さすがにできるな、という感じですが、よりスマートに解けるように解説読んでいきたいです。

2019/05/15
AtCoderやってます。よくわからないことが多いですが、ちまちま解決しています。タイピング速度よりも正確性が大事だし、アルゴリズムのひらめきとデバッグのスピードが肝要なのかと。。

2019/05/16
C++の文字の連結とかがよくわかっていません。Pythonは楽だったんだなぁ、、と思う今日このごろです。AtCoderはサーバが落ちることがよくあるのですが、なかなか管理が難しいのでしょうか。

2019/05/17
総当りの計算をしてみるか、と思ったら組合せが最大10*1000になってしまって終わった感。これはいけませんね。

最近のキーボード事情、RealForceがやはりいいのかな、と思って会社用と自宅用にもう1つ買おうかな、という気持ちすら起きています。マイクロソフトのエルゴノミクスもけっこう好きなのですが・・・パームレストが不要なのが地味によかったりします。

2019/05/21
アルゴリズムの前に、C/C++の基礎が解っていないような気がします。基本的な実装方法から勉強しなくては・・・。

2019/05/22
CとC++ってけっこう違うな〜と初心者なので思ってしまいます。入出力の基礎を少し勉強しました。

2019/05/22
Vim のNERDTreeで、NERDTreeCWDが動かないのですが。pwdでは正しく表示されるのだが、なぜかNERDTreeの認識しているカレントディレクトリが違うようだ。

2019/05/23
VimでClang-vimを導入したいのですが、うまくいかず・・・。nvimに変更してからdeoplete, deoplete-clangにするのが良いのでしょうか。枯れた技術というのがなく、日々アップデートしすぎていて情報がいまいち安定していないのが苦労してしまうところですね。c++でメソッドが自由で出せればよいなと思っていたのですが、いかんせんそこまで使いこなしがいがあるところまで自分の腕が進んでいないのが問題です。

vimよりeclipseとかのほうが楽なのかな?同じような気もしますが。

deopleteを入れたりしていたら、neocompleteが読み込まれなくなってしまった・・・。

  call dein#add('Shougo/neocomplete.vim')
  call dein#add('Shougo/vimproc.vim', {'build': 'make'})
  call dein#add('justmao945/vim-clang')
  call dein#add('Shougo/neoinclude.vim')

.vimrc内で、上のようにしていたのを下の三行を一度消して戻すと直りました。意味がわかりませんが、vimrcが読み込まれていなかったのかな?謎です。


2019/05/24
あちこちいじっていたらg++が動かなくなってしまいました。と思ったら、書いているのがCのコードだったので、gccでないとダメでした。

2019/05/27

やればやるほど、出来無いことが増えていくのですが、大丈夫でしょうか。

Ubuntuの挙動がいろいろ変で、いつのまにかSettingが消えているようですが・・・gnome当たりが設定変わってしまったのでしょうか。

vimのターミナルモードを使ってみましたが、コピペができなくて残念。できるような設定もあるのかしら。

もう1つリアルフォースを買おうと思っているのですが、せこい感じでクーポンやら割引やらがお得になるときを待っていたりします。ああ・・・。