2019年6月30日日曜日

UbuntuでSystem Settingが消えたとき

Ubuntuを使っていて、いつの間にかSystemSettingが消えてしまいました。Displayも表示できません。何かの際に消してしまったようですが・・・。

調べてみると、unity-control-centerを再インストールすれば良いようです。

$ sudo apt-get install unity-control-center

これで直りました。Unity-Tweak-Toolがおかしかったのも同時に直っています。

以下のコマンドではデスクトップを全部入れなおすようですが、ここまでやらなくても、ということで↑のが紹介されていました。

$ sudo apt-get install ubuntu-desktop

https://askubuntu.com/questions/453440/missing-system-settings-after-removing-some-packages

2019年6月22日土曜日

C++で括弧を省略できる

基本的なことみたいですが、初心者なりに混乱したので。

C++ ではforやifの括弧{}を省略できる


for ( int i = 0; i < N; i++){
    m += i;
}

for ( int i = 0; i < N; i++)
    m += i;

とだけ書いてしまってもいいと。
ストラウストラップの本でもそうなっていました。

しかしどこまでが、というと 『; が出てくるまで』ですね。

括弧を書いた方が安全性は高まるという議論があるようです。

https://el.jibun.atmarkit.co.jp/hidemi/2009/07/post-29fb.html
http://bashalog.c-brains.jp/09/08/05-004630.php

2019年6月18日火曜日

Pythonのimport mathのfactorial(階乗)

Pythonのimport mathでfactorial(階乗)が使えるのですが、その中身はどういうコードになっているのか調べてました。

ローカルの中では、
mathmodule.c

に書かれていました。

githubでソースを見ると・・
cpython\Modules\mathmodule.c

という場所にあります。

n! の計算 factorial は
binary split という計算方法のようです。

http://www.luschny.de/math/factorial/binarysplitfact.html
がオリジナル?

ビットをカウントしている部分の解説
http://www.mwsoft.jp/programming/java/java_lang_integer_bit_count.html

すごいテクい(死語?)んですけど・・・。
勉強になったけど自分では書けないですね〜。

2019年6月16日日曜日

isort、memory_profilerで日本語コメントが無視できない問題

Windows7, Python3.6

Pythonソースの中にコメントで日本語を入れていると、

isort, memory_profilerでエラーが出ていました。

ファイルのエンコーディングがcp932になっていたのでutf8にしたら直りました。

2019年6月15日土曜日

HEICファイルをjpgに (linux)

unbuntu16.04LTSでHEICファイルをJPEGにします。

・GIMP
・heif-convert

どちらの方法でもできました。

iOS11 以降で画像ファイルがHEICで圧縮されているとのこと。これをHTMLに表示するには、JPGにしたいです。

■GIMPを使う

GIMPがインストールされているなら簡単です。GIMPでHEICファイルも普通に読み込めますから、エクスポート保存するときにJPGにできます。


■heif-convertを使う

https://kameid.hatenadiary.org/entry/20181002/1538461121

このページで紹介されていた方法でやってみました。ライブラリのインストールに時間かかりまくりでビビります。コードはリンク先で。

--最初失敗していたとき--

heif-convertは入っているようですが、

Unknown file type in hoge.jpg

という出力が出ていて、jpgファイルタイプが認識されていないようです。

インストールのときのログを見ていると、

checking jpeglib.h usability... no
checking jpeglib.h presence... no
checking for jpeglib.h... no
checking for jpeg_CreateCompress in -ljpeg... no
checking for jpeg_destroy_compress in -ljpeg... no
checking for libpng... no
configure: Enable multithreading
configure: ---------------------------------------
configure: Multithreading: yes
configure: Symbol visibility: yes
configure: libde265 decoder: yes
configure: libx265 encoder: no
configure: JPEG output: no
configure: PNG output: no

こう出ていました。
やはり、jpegもpngもc++のライブラリか何かが足りていないようですが・・・。

yum がそもそもUbuntuでは使えていない!!という気付き。

ログをよく見ると
$ yum install git gcc-c++ automake libtool libjpeg-devel
The program 'yum' is currently not installed. You can install it by typing:
sudo apt install yum
ってなっていました。そういえばyumって使えないんでしたっけ。理由は判明。あまりにも初歩的だった・・・。

教訓: 複数行を同時に実行するときはログをきちんと見ましょう。OSに合ったコマンドを入れましょう。

RedHat系(Fedora, CentOSとか)ではyum、Debian系(Ubuntuとか)ではaptです。普段からubuntuの例しか見ていなかったので意識していませんでした。yumって何?とか思いながらコピペしてしまいました。

まずJPEG用のライブラリを2つインストールします。名前がCent系とちょこっと変わるみたいです。

$ sudo apt-get install libtool-bin
$ sudo apt-get install libjpeg-dev

これを入れてから、再度ライブラリのインストールをします。

途中のログはこのようになって、jpegのライブラリがyesになっています。

checking jpeglib.h usability... yes
checking jpeglib.h presence... yes
checking for jpeglib.h... yes
checking for jpeg_CreateCompress in -ljpeg... yes
checking for libpng... no
configure: Enable multithreading
configure: ---------------------------------------
configure: Multithreading: yes
configure: Symbol visibility: yes
configure: libde265 decoder: yes
configure: libx265 encoder: no
configure: JPEG output: yes
configure: PNG output: no

これでheif-convertも使えるようになりました。

heif-convert使い方

例としてhoge.jpgというファイルを出力します。

$ heif-convert IMG_3046.HEIC hoge.jpg
とすると、このような出力が出ます。

File contains 1 images
Written to hoge.jpg

この例では、元のHEICファイルは1.2MBでしたが、JPGに戻すと1.7MBになりました。確かにHEIC圧縮率が高いということが分かります。

参考にしたページ
http://atasatamatara.hatenablog.jp/entry/20120723/1343044059
http://kz-engineer-scrap.hatenablog.com/entry/2017/02/12/003718
https://forums.ubuntulinux.jp/viewtopic.php?id=8530
https://askubuntu.com/questions/625523/libtool-installed-but-not-on-path-after-installation

Python日時関係のメモ


■日付をYYYY/MM/DD 00:00:00 で表示したい

strftimeを使うことで日時を好みのフォーマットで表示できます。

from time import gmtime, strftime
strftime("%Y/%m/%d  %H:%M:%S", gmtime())
# Output: 
'2019/06/15  01:46:25'

■UTCからの時間の差をdatetimeに含める

datetimeでtimezone設定をします。

from datetime import datetime, timedelta, timezone
datetime.now(timezone(timedelta(hours=9)))
# Output:
datetime.datetime(2019, 6, 15, 10, 45, 28, 719254, tzinfo=datetime.timezone(datetime.timedelta(0, 32400)))
# 32400 sec = 9 hours of timezone

■タイムゾーンtzありと、tzなしのdatetime.datetimeを比較しようとしたらエラーが出る

2019-03-01 09:55:06,033, error, ERROR, 669, Cannot compare tz-naive and tz-aware datetime-like objects
揃えるためにタイムゾーンを消します。
from datetime import datetime, timedelta, timezone

# with timezone
t = datetime.now(timezone(timedelta(hours=9)))

# timezone drop
t2 = t.replace(tzinfo=None)  

Pythonでターミナルのサイズを調べる

ターミナルのウィンドウサイズを調べるときに使えます。

import shutil
shutil.get_terminal_size()

無設定で開いているときは、デフォルトのcolumns=80, lines=24 が返ります。もともとこの値に設定されているときと区別がつかないので注意が必要です。

Jupyterだと

os.terminal_size(columns=110, lines=12)

と出ました。columnsは正しそうですが、linesが実際のJupyterセルの行数と違っていて、何を指しているのかがよくわかりませんでした。

powershellやubuntu terminalで実行してみると、正しく表示されました。

os.terminal_size(columns=100, lines=65)


truncate は 切り詰める と訳していいのか謎

python docを見ていたら、原文が「truncating 」の部分の、日本語訳が「切り詰める」になっている。「上書きする」とか「先にファイルの中身を消す」で良いのでは?

しかし翻訳って難しいですよね〜。自分がやったとしても、ちぐはぐな日本語になりそうな気はします。

https://docs.python.org/3/library/functions.html#open

Character
Meaning
'r'
open for reading (default)
'w'
open for writing, truncating the file first
'x'
open for exclusive creation, failing if the file already exists
'a'
open for writing, appending to the end of the file if it exists
'b'
binary mode
't'
text mode (default)
'+'
open a disk file for updating (reading and writing)



文字
意味
'r'
読み込み用に開く (デフォルト)
'w'
書き込み用に開き、まずファイルを切り詰める
'x'
排他的な生成に開き、ファイルが存在する場合は失敗する
'a'
書き込み用に開き、ファイルが存在する場合は末尾に追記する
'b'
バイナリモード
't'
テキストモード (デフォルト)
'+'
ディスクファイルを更新用に開く (読み込み/書き込み)

Jupyter起動時のserver_extensionのWarningが消せない件

解決していないです。

githubのissueによると、Jupyter  4.2 からはnbextensionsを使うとのこと。


Lib/site-packages/notebook/notebookapp.py

を見てみると

L977にこんなのが

    @observe('server_extensions')
    def _update_server_extensions(self, change):
        self.log.warning("server_extensions is deprecated, use nbserver_extensions")
        self.server_extensions = change['new']

observeはtraitlets にあるsyntax sugar。
これでserver_extensionsを判定して存在していれば
def _update_server_extension, warning messageを出す

・・・いまいち分からないまま放置です。

Python文字フォーマットの2種類の方法

you are <ここに文字列を入れる>

という挿入をするとき、2通りのやりかたがあります。

word = "great"
print("you are {}".format(word))
print(f"you are (word)")
どちらも望み通りの結果になります。
後者は  f が文字列の前についているのがポイント。

2019年6月1日土曜日

日誌2019年6月

2019/06/01
もう今年も半年終わってしまいます。常々早いなと思っています。

キーボードを購入したいしたいと思いつつ、値下げのタイミングを図っているのですが、この時間が無駄なのでさっさと買ってしまいたいものです。最適な対応を求めて時間をロスする現象?に名前ってついていないんでしょうか。最適化による時間の無駄、くらいかな。

ダイクストラ法をヒープでやるという速くなる方法を試してみましたが、例題の入力数が小さいので当たり前ですが恩恵が良く解らないです。

vimのleximaで<> の括弧の補完をしようとか思ったのですが、普通にも使うから意味ないな、と思って止めました。最初から設定されていないのには理由がありますよね。

2019/06/02

C++のラムダ式というのを少し勉強しました。

vimのleximaが使えなくなる時があるのですが、どうやらcawと衝突しているようです。どちらも有効にしたいですが・・・とりあえずcawを消しています。

最近は、解決したい問題はgithubに書き込むことにしました。単にそこが管理しやすいかなという理由です。


2019/06/07

vimでソートができて、ついでに重複を消したりできるようです。

:sort -u

とするだけ。こりゃ便利ですね。

AtCoderで解けた問題の統計的な情報はAtCoder Problemsというサイトで見れるのですが、どの回のAが未だ、というのは確認しないと分からないんですよね〜。分かるのかな?
ということで、自分でスクレイピングで見れたらいいなとか思っているのですが。

2019/06/15

vimにもずいぶんなれてきた気がします。
jupyterのvimモードを入れました。しかし、vimモードではこれまでのショートカットが使えなくてちょっと困っています。


思うこと: マニュアル、ドキュメント、ヘルプって自分が知りたいときに役に立たないときが多いんですが。これを自在にフィットできるようになれば儲かるのでは・・・?


WindowsがUbuntuよりも優れているポイントは、マウスの操作でしょうか。マウスがとてもスムーズです。Ubuntuは・・・なぜなんでしょう。あとGnomeがよく死亡しています。


メモをとるときにシャーペン、消しゴムを使うのですが、消しカスので出ないやつを2つくらい比較してみました。というかこの2つしか売っていなかった。

プラスステーショナリー AIR- IN DUST FREE  こちらのほうがよくまとまる気がしますが、コシがないので消すときに細かいところが消しにくいです。

KOKUYO リサーレプレミアム 色が派手なのもあって見つけやすくていいですね。色が入っているときに消す能力はどうなんでしょう。白の方がいいのかな、とか思ってしまうのですが。少し消えにくい、まとまりにくいですが、けっこういいです。



htmlで手打ちのホームページを更新する必要があったのですが、モバイルフレンドリーではないので少しいじりました。viewportとかいう機能がGoogleで紹介されていたのでそれで。
https://developers.google.com/web/fundamentals/design-and-ux/responsive/


なんだか今日は散逸的に沢山更新してしまいました。ストレスでも溜まっているのでしょうか?今日は雨が変な感じで大量に降っていました。梅雨という概念は雨季になってしまったような気がしますね。


2019/06/19

「正しいコピペのすすめ」という本を読みました。これは分かりやすくてよいですね。著作権に関する学生向けの本ですが、あれもこれも厳密にいうと違法になり得る・・・という話。


2019/06/26
Ubuntuのマシンをほとんどつけっぱなしなのですが、switching to greeterのエラーでログインに時間がかかるようになるときは再起動せざるを得ず、面倒です。スタートアップのコマンドがうまくできていないので、そこをなんとかしたいものですが・・・

2019/06/28

swtich to greeter の件、lightdm をいうデスクトップマネージャを再インストールすることでどうにかなったようです。これで直ったと信じたいですが・・・。

bloggerの目次を<h>タグで自動で入れてくれるプラグインを使おうとしましたが、使えませんでした。いまいちよくわかりません・・・。むりやり#でジャンプさせることはできますが、設定をいちいち記入するのが面倒です。