pipで入れたパッケージを一括更新する

python のパッケージをコマンド一行で最新版にアップデートする方法です コマンド 普段 sudo を使わずに,--user つけてpipを実行している場合 $ pip3 list --format freeze --outdated | while IFS='==' read pkg dummy; do pip3 install --user --upgrade …

PyGObjectのインストールエラーを回避する方法

pipコマンドで PyGObjectをインストールしようとすると $ pip3 install PyGObject以下のエラーが出る場合がある Package gobject-introspection-1.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `gobjec…

Windowsのドライブ(vfat)で rsync を正しく使う方法

vfat形式のドライブ(USBメモリなど)や,sambaなどでネットワーク経由でマウントしたストレージに対して rsync を使う場合は,いくつかオプションつけないと rsync の本来の性能が発揮されません.rsyncの特徴,例えば差分コピーによる高速ファイルコピーな…

TeXでページ番号を左上に表示する

TeX

TeXでページ番号を左上に表示する場合は fancyhdr パッケージを使います fancyhdr の使い方 \usepackage{fancyhdr} \pagestyle{fancy} \rhead{\thepage} フッターのページ番号を消すにはさらに \cfoot{ } とします fancyhdrの仕組み fancyhdrパッケージを使…

Linuxカーネルのソースコードを読む方法(その2)

Linux カーネルのソースコードを読んだのでメモを公開します.Linuxカーネルを読む際の参考になれば幸いです. 今回のお題: kernel.panic 今回はカーネル内部のエラー処理(カーネルパニック)の部分です.ソースコードのバージョンは linux-5.0.1 です. カ…

Linuxカーネルのソースコードを読む方法(その1)

Linux カーネルのソースコードを読んだのでメモを公開します.Linuxカーネルを読む際の参考になれば幸いです. 今回のお題: dmesg コマンド 今回は dmesg コマンドに関係する部分を読みました.printkや /dev/kmsg 等が関係する部分です.ソースコードのバー…

ラズパイのような少メモリ環境で安全にrsyncを実行する方法

組み込みLinuxのような少メモリの環境では気をつけないと rsync が原因でシステムがクラッシュする場合があります. クラッシュする理由はメモリ不足 rsync はファイルを転送する前に先ずファイルのリストを作ります.リストはメモリ上に一時保存されます.…

dmesg のアクセス制限を外す方法

dmesg を実行するとエラーが出る場合があります $ dmesg dmesg: read kernel buffer failed: 許可されていない操作です これは,Linuxカーネルの設定でアクセス制限を掛けているためです. アクセス制限の設定 アクセス制限を外すには sysctl を使います./e…

Linuxの起動が遅い原因の調査方法

Linuxの起動がものすごく遅い.10分ぐらい掛かる.そういう質問を受けたので原因調査の手順と解決法をまとめます. 起動時のログを見る方法 systemdにはシステム起動時のログを分析する機能があります.使い方も簡単まずは systemd-analyze を実行します $…

シェルスクリプトでエラーメッセージに色をつける

bash や sh のシェルスクリプトでエラーメッセージや警告メッセージをカラフルに色付けして表示するコードを公開します.スクリプトの雛形にどうぞ.なかなか便利です. スクリプトの雛形 #!/bin/bash # Colorize output only if stdout referers to termina…

コンパイラのAddressSanitizerを使ってバッファ オーバーフローを退治する

C言語やC++の欠点の一つは,バッファオーバーフローやオーバーランが起こりやすいことです.それは欠点であると同時にC/C++の利点であると言う人もいます.つまり,メモリ関連のチェックを省略することで,省略した分C/C++はオーバヘッドが少ない高速なプロ…

std::stringでprintfのような書式指定を行う方法 (C++11版)

C++11を使うと綺麗に実装できますまず format() というテンプレート関数を作ります.C++11で新しく導入された,可変引数テンプレート,および std::snprintf() を使います. #include <string> #include <cstdio> #include <vector> template <typename ... Args> std::string format(const std::string&</typename></vector></cstdio></string>…

QRコード(2次元バーコード)を生成するスクリプト・プログラムの作り方

その名も qrcode という python モジュールがあります qrcode というpythonのモジュール "qr" というコマンドラインのツール が用意されているので,簡単にQRコード(2次元バーコード)を生成するプログラムやスクリプトが実装できます インストール pip経…

iPhone/iPadでダブルタップのズームを禁止する方法

iOSのブラウザ(Safari)はダブルタップでページの拡大縮小が出来ます.この機能を無効にするには,JavaScript で "touchend" イベントを横取りします /* ダブルタップによる拡大縮小を禁止 */ document.addEventListener('touchend', function (event) { even…

iPhone (iOS 12.1.1)でバッテリ残量を取得する

iOS

iOS でバッテリ残量を取得するAPIについて調査しました.作業メモを公開します結論から言うと iOS 11までは隠しAPIが存在.残量,充電回数(サイクル数)など詳細が取得できた. iOS 12でもAPIはあるが,情報がほぼ何も取れなくなった. iOS 12でもエミュレ…

macOS Mojave で MacPorts をつかう方法

macOS の最新版 Mojave に合わせて MacPorts を更新したので,手順をメモします 概要 MacPortsインストール済みの macOS を Mojave にアップグレードすると以下のようなエラーメッセージがでて MacPorts は動作しなくなります Error: Current platform "darw…

quilt の使い方

debian や ubuntu の deb パッケージのメンテナンス(パッチの管理)で使う quilt コマンドの利用方法をまとめますdebパッケージのメンテナンスをしていると,以下の様なエラーが出る場合があります Applying patch 04_hyphen-manpage.diff patching file docs…

.changes ファイルの作り方,更新方法

debian や ubuntu で debパッケージを作成する際に登場する *.changes ファイルについての覚書です .changes ファイルとは *.changes ファイルは, *.deb のパッケージをリポジトリにアップロードする際に必要となる情報を保存しています.具体的には *.deb …

apt で NO_PUBKEY / GPG Error が出る場合の解決方法

apt コマンドで公開鍵に関するエラー, NO_PUBKEY / GPG Error が出る場合は,以下の手順で復旧できます例えば apt-get update で下記のエラーが出る場合は The following signatures couldn't be verified because the public key is not available: NO_PUB…

macOS に Tex Live 2018をインストールする

macOS High Sierra の TeX環境を texlive2018 に更新したので手順をまとめます.この記事は以下のエントリを macOS High Sierra と Tex Live 2018 に合わせて更新・加筆したものです. http://d.hatena.ne.jp/pyopyopyo/20170801 http://d.hatena.ne.jp/pyop…

bash と getopt の連携(2018年バージョン).

bash で getopt を使う雛形.エラー処理をちゃんと書いたバージョンです.実行時のエラー,実装上のバグ,どちらも正しく検出&対処できます. #!/bin/bash usage() { cat<

RaspberryPIにdebianを入れて headlessで運用する方法

ラズパイは非力なハードウェアです.ディスプレイやキーボードをつないで,OSとして Raspbian(ラズビアン)などを使えば,PCのように利用することもできます.しかし所詮はラズパイ.PCの代用としては処理速度が遅く,実用性に欠けます.またIoTやオーディ…

class を noncopyable にする

c++

今時のc++ (c++11など)でコピー禁止,代入禁止のクラスを作る方法 template <class T> struct CRTPnoncopyable { CRTPnoncopyable() = default; CRTPnoncopyable(const CRTPnoncopyable&) = delete; CRTPnoncopyable& operator=(const CRTPnoncopyable &) = delete; </class>…

glibc でバックトレースを表示する方法(その2)

C/C++で関数を書きました.デバッグに超便利なので,まるごと公開します.backtraceを取得して,FILE* に出力します.出力時の書式は format の引数で変更できます.CおよびC++両方に対応しています. C++のシンボル名は,自動で demangle(デマングル)します…

Linux で cab ファイルを展開する

拡張子がcabのファイル(Microsoftがファイルを配布するときに使う形式のファイル)を,Linuxで開くには cabextract というパッケージを使う パッケージのインストールは,debianやubuntuなら $ sudo apt install cabextract 使い方は $ cabextract cabファイ…

ログイン時のメッセージを非表示にする方法

コンソールからログインした場合や,リモートからsshで接続した際に表示されるメッセージを消すには $ touch ~/.hushlogin を実行して,~/.hushlogin というファイルを作れば良い.中身は空で良い詳細は man 1 loing 参照このメッセージは,ログインメッセー…

debian で無料のSSL/TLS証明書(Let's Encrypt) を使う

昔は,まともなSSL/TLSの証明書*1を取得するには,有料サービスに毎年数万円を支払う必要がありました.また証明書の申請には数日かかります.一度更新手続きや支払いを忘れると,数日間証明書が失効し,その間サービスがが止まってしまう,という恐ろしい事…

macOS に Tex Live 2017をインストールする

macOS Sierra の TeX環境を texlive2017 に更新したので手順をまとめます.この記事は以下のエントリを macOS Sierra と Tex Live 2017 に合わせて更新・加筆したものです. http://d.hatena.ne.jp/pyopyopyo/20161106 http://d.hatena.ne.jp/pyopyopyo/2015…

ポインタからクラス名を調べる方法

c++

c++で、ポインタからクラス名や型名を調べる処理は、以下の2ステップで実現できます typeid(obj).name() で型名の文字列を取る abi::__cxa_demangle() で demangle する サンプルコードは以下の通り #include <typeinfo> #include <cxxabi.h> #include <iostream> int main() { class MyCl</iostream></cxxabi.h></typeinfo>…

日本語フォルダ名を英語にする方法

デスクトップ,ダウンロード,公開,画像,ビデオのようなディレクトリ名を英語名に変更するには以下のコマンドを実行する $ LANG=C xdg-user-dirs-update --force 設定ファイルは ~/.config/user-dirs.dirs ~/.config/user-dirs.locale システムの既定値(…