2021-01-01から1年間の記事一覧

CMakeでCFLAGSのデフォルト値を変更する方法

CMakeで コンパイラに渡すオプションの初期値を変更する方法ですCMakeの公式FAQに「正しい」方法が書いてあるので、その方法を紹介します https://gitlab.kitware.com/cmake/community/-/wikis/FAQ 設定ファイルの作成 ファイル名はなんでもよいのですが、設…

GNU screen をマウスでスクロールさせる方法

~/.screenrc に以下の一行を加えるだけ termcapinfo xterm* ti@:te@ これでマウスのスクロール(マウスホイールや,mac のトラックパッドのmulti-touchのドラッグ)で GNU screen をスクロールできますデフォルト設定のGNU screenだと,スクロールは "C-a" "…

SFINAEでオーバーロードされた関数を検出する方法

c++

C++ のSFINAE (Substitution Failure Is Not An Error)を使って,クラス T に foo(int a, int b)があるか否かを調べる方法です. 簡単な例(class Tに オーバーロードされた関数がない場合) まずはシンプルに,クラス T に対してT::foo が存在するかどうか調…

debian の nvidia-graphics-drivers パッケージを自分で編集&更新する方法

debian の nvidia-graphics-drivers が古いまま(470.57.02 )でなかなか更新されないので,自力で 470.63.01 に更新しました.470.57.02 はLinux-5.14をサポートしていませんが(モジュールがビルドできない), 470.63.01 ならLinux-5.14もサポートしていま…

ムービーファイルから特定のチャプターだけを抜き出す方法

mp4などの動画ファイルから,特定の章(チャプター)を切り出す方法です.切り出しはffmpegを使うと簡単かつ高速です.音声・画質の劣化もありません. 手順1) チャプター情報の確認 ffmpeg付属のffprobeコマンドを使いチャプターの一覧を確認します $ ffpro…

python / numpy で特異値分解(SVD)を使って一般化逆行列を計算する

一般化逆行列(擬似逆行列,最小二乗法に対応するやつ)を python で計算するサンプル特異値分解(SVD)が必要なので,実装は numpy を使いますc++/eigen で実装したコード https://pyopyopyo.hatenablog.com/entry/2021/09/07/090000 のpython版になります im…

C++/Eigen で特異値分解(SVD)を使って一般化逆行列を計算する

一般化逆行列(擬似逆行列,最小二乗法に対応するやつ)をc++で計算するサンプル特異値分解(SVD)が必要なので,実装は Eigen を使いますpython/numpy の実装も用意しました.こちらです https://pyopyopyo.hatenablog.com/entry/2021/09/14/161955 #include <Eigen/Dense></eigen/dense>…

/dev/null みたいな std::ostream

c++

/dev/null みたいな std::ostream を作る方法. 方法1 : std::ostreamを継承して自前の null stream を作成する 以下のURLで紹介されている方法 stackoverflow.com #include <iostream> class NulStreambuf : public std::streambuf { char dummyBuffer[ 64 ]; protect</iostream>…

Linuxの起動が遅い原因の調査方法(その2)

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

debian/changelog からバージョン番号を取り出す方法

debianのソースパッケージから,生成されるバイナリパッケージのバージョン情報を抽出するには dpkg-parsechangelog を使うのが簡単.例 dpkg-parsechangelog --file path/to/changelog --show-field Version dpkg-parsechangelog --file path/to/changelog …

pythonで自分のIPアドレスを調べる方法

pythonでローカルのネットワークインタフェースのIPアドレスを調べる方法 def get_local_ip_address(): from socket import socket, AF_INET, SOCK_DGRAM s = socket(AF_INET, SOCK_DGRAM) try: s.connect(('10.255.255.255', 1)) ipaddr = s.getsockname()[…

Linuxで音声出力デバイスを環境変数で切り替える

Linuxで音声出力デバイスを環境変数で切り替える方法 概要 環境変数 PULSE_SINK を使うと,音声出力デバイスをかんたんに切り替えることができるたとえば $ PULSE_SINK=<出力デバイスの番号> <コマンド> とすると,コマンド単位で出力先を変更できる.出力デ…

ユーザー権限で systemd のサービスを稼働させる方法

root権限ではなくて,一般ユーザ権限で systemd のサービスを登録&稼働させる方法です サービスの登録 systemdのサービスは「ユニットファイル」と呼ばれる設定ファイルに記述します. ユーザ権限で起動するサービスは ~/.config/systemd/user/ ディレクト…

jupyter notebook からソースコードだけを抽出する方法

jupyter notebook からソースコードだけを抽出する方法です2行でまとめると nbconvertを使う方法が定番.でも動作が遅い 20倍以上高速な jq を使う方法がおすすめ となります.以下,詳細です. nbconvert を使う方法 input.ipynb からpythonコードを取り出…

RRDCached の使い方

RRDtool を高速化する rrdcached の使い方 RRDcached とは RRDcached は RRDtool のためのキャッシュサーバーです.RRDtool は加速度や湿度センサーの値,サーバーのCPU負荷,パケット数,と言った時系列データに特化したデータベースです.RRDtoolだけでも…

コマンドラインでUNIXタイムスタンプを日付や時刻に変換する

コマンドラインで,unix timestamp を日付や時刻に変換する方法をまとめます GNU系 (linux, debian,ubuntu,redhat,centos) date コマンドで "-d @タイムスタンプ” の書式で unixタイムスタンプを指定します $ date -d @1595812200 Mon Jul 27 10:10:00 JST 2…

大容量HDD/SDDを高速にフォーマットする方法

ext4ファイルシステムを高速にフォーマットする方法です 背景 linux で ext4でディスクを初期化すると,初期化処理は一瞬で終わるように見えます.しかし初期化処理はまだ完了していません.真の初期化処理はディスクを mount した時に始まり,その処理はシ…

ラズパイを軽量webサーバーにする

raspberry pi をwebサーバにする手順目的はフィジカルコンピューティングやIoTと呼ばれるたぐいのものです.具体的にはセンサ情報・ログのモニタリング,軽量なwebサーバである lighttpd を入れてCGI経由で python スクリプトを起動したりします.python ス…

openコマンドで起動するアプリケーションを設定する方法

ubuntu やmacOSでは,ターミナルで $ open hogehoge.pdf とコマンドを実行すると,pdfのビューアーが起動して pdfを表示できます. $ open http://www.google.com とコマンドを実行すると,ブラウザが起動して URLを開いてくれます.この設定を変更する方法…

vmplayer を起動すると polkit-agent-helper-1: pam_authenticate failed: Authentication というエラーがでる

vmplayer を起動すると polkit-agent-helper-1: pam_authenticate failed: Authentication や vmware-setup-helper requires root access というエラーが出るだけで vmplayer が起動できない場合の対処方法 症状 具体的には ==== AUTHENTICATING FOR org.fre…

LD_PRELOADで複数のライブラリを指定する方法

LD_PRELOADで共有ライブラリを複数指定する場合は,ファイル名を":"で区切って列挙する LD_PRELOAD=ライブラリ1:ライブラリ2 例 LD_PRELOADを使って,malloc()を自作関数に差し替える ソースコード main.c #include <malloc.h> int main() { void *p = malloc(1024); f</malloc.h>…