サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
pyopyopyo.hatenablog.com
プログラミングは得意だけど数学は苦手. プログラミングはわかるけど数学はわからない. そういうときは数学の話をプログラミングの話に置換して考えてみましょう. お題:1+1=2の証明 例として 1+1=2 の証明を取り上げます ja.wikipedia.org ここにある「ペアノ算術による証明」をc++で実装してみます. c++を使った 1+1=2の証明(ペアノ算術による証明) c++を使って 1+1=2を証明します. ただし,定数や変数,加算の演算子"+"は使用しません. 変数や演算子は使わずに「型」を使って 1+1が2になることを示します. 第1ステップ:c++で整数を定義する 変数や定数を使わず,整数自体を「型」で定義します. 整数 Zero の定義 整数のゼロ("0")をZero型と定義します. struct Zero {}; 整数 One の定義 整数の1に対応する型をOne型とし
systemdのバージョン256に /homeディレクトリ以下のファイルを削除してしまうバグがあったそうで,修正版の 256.1 がリリースされています. systemdのissuesによると,一時ファイルを一括削除する systemd-tmpfiles --purge コマンドが /home以下を不要ファイルと誤判定して削除するそうです tmpファイルを消すだけのコマンドと見せかけて,home以下も消すという邪悪なバグなので注意が必要です. 心配な人は systemd のバージョンを確認しておきましょう systemdのバージョンの確認方法 以下のコマンドを実行してsystemdのバージョンを確認します $ systemctl --version バグ有り,/homeが消える可能性がある場合 1行目にsystemd 256 (256-1)と表示されます.バグあり版です.何かの拍子に/ho
C言語(C++を含む)を習得したい人,ポインタを勉強したい人はgcc-14を使いましょう.難しいところは gcc-14 が丁寧に解説してくれます C言語の難しいところ 例を示します.C言語で記述された,たった6行のソースコードです int main() { int buf[10]; buf[10] = 0; return 0; } このソースコードには問題があります.初見でわかるでしょうか? : : : 問題があるのは buf[10]=0 の部分です.C言語でやりがちなミスですが,これがバグやセキュリティホールの原因になります. C言語が難しい理由は二つあります.この手の問題を見逃しやすい点と,この手の問題を理解することが難しい点の二つです gcc 14 に解説してもらいましょう 上記の6行のソースコードをgcc14を使ってコンパイルしてみます ソースコードのファイル名は test.c と
root権限ではなくて,一般ユーザ権限で systemd のサービスを登録&稼働させる方法です サービスの登録 systemdのサービスは「ユニットファイル」と呼ばれる設定ファイルに記述します. ユーザ権限で起動するサービスは ~/.config/systemd/user/ ディレクトリ以下にユニットファイルを配置します. 例えばサービス名を myjob とすると,ユニットファイルのファイル名は ~/.config/systemd/user/myjob.service となります. ユニットファイルの雛形 ユニットファイルの雛形です. [Unit] Description=my job service [Service] ExecStart=起動コマンド ExecStop=/bin/kill ${MAINPID} Restart=always [Install] WantedBy=defa
no matching host key type found. Their offer: ssh-rsa,ssh-dss というエラーメッセージでssh接続できない場合は ~/.ssh/config の末尾に以下の三行を加えればとりあえず接続できるようになります Host * HostKeyAlgorithms=+ssh-rsa PubkeyAcceptedAlgorithms=+ssh-rsa 説明 2005年ごろまでに設定されたsshdでは,サーバの署名としてSHA-1のRSA鍵が広く利用されていました.しかしSHA-1は2005年に攻撃方法が発見され,2010年にはSHA-1は廃止,より安全な鍵に移行するという方針になります.そして2021年ついにOpenSSHもSHA-1の鍵をデフォルトで無効化しました. そのため新しいOpenSSHのクライアント(sshコマンド)で,未だにSH
Linux カーネルのソースコードを読んだのでメモを公開します.Linuxカーネルを読む際の参考になれば幸いです. 今回のお題: dmesg コマンド 今回は dmesg コマンドに関係する部分を読みました.printkや /dev/kmsg 等が関係する部分です. ソースコードのバージョンは linux-4.20.3 です. /bin/dmesg の仕組み /bin/dmesg は Linux カーネルが出力したログを見るためのコマンドです. Linuxカーネルはログを出力するために printk() という関数を用意しています.printk()は printf() のカーネル版です.カーネルの中でprintk()で文字列を出力すると,その文字列はカーネル内部にあるリングバッファに記録されます.printk()は様々なところで使用されています.たとえばカーネルモジュール(デバイスドライバ
Linuxを起動する方法はたくさんあります.本エントリでは MBR (Master Boot Record)にインストールした grub2 を使う方法 ESP(Efi System Partition)にインストールした grub2 を使う方法 の2つを共存させたディスクを作成する方法についてまとめます 前者は,従来のBIOS経由での起動方法で,古いマザーボードだと必須となる方法です.後者は,EFI経由の起動方法で,最近のマーザーボードで使える"新しくて便利な"方法となります. 具体的な手順について 以下,実例として 新品のSSDを用意 既存のシステムを新品のSSDにコピー OSは debian (ubuntu や cent OS などでも同じ手順で作業できるはずです) の場合について手順を詳細に説明します SSDは64GB で /dev/sdb に繋いであるものとします なお既存のディス
内容を更新した新しい記事を用意しました.pyopyopyo.hatenablog.com debian や fedora などの linux が稼働しているPCに,新しいHDDに接続して,そのHDDにdebian をインストールする方法をまとめます この方法は installerを使うより早い (数分で新しい debain 環境が用意できます) 既存の設定のコピーが簡単 というメリットがあります 予備機を作る場合,同じ設定のPCを大量に用意する場合などに使うと便利です ディスクのフォーマット 新しいHDDのデバイスファイルを /dev/sdX とします $ sudo gdisk /dev/sdX UEFIを使う場合 EFI system 用パーティションを作成する Command (? for help): n Partition number: 1 First sector: <ente
以下の手順で,インストール済みの linux環境 を新しいHDDやSSDに複製できます (2016/3/22追記: 細かい点について説明を加筆しました) 新しいHDDのフォーマット 予め新しいHDDやSSDをPCに接続し,フォーマットしておきます おすすめの手順は別エントリに書いてます http://d.hatena.ne.jp/pyopyopyo/20160604/p1 以下,フォーマット済みのパーティションを /dev/sde1 とし, /mnt にmountするものとして手順を説明します $ sudo mount /dev/sde1 /mnt 既存システムのマウント システムを複製する場合は /proc や /sys などの複製しなくて良いディレクトリを除外する必要があります 除外する方法はいくつかありますが,今回は手っ取り早い方法として 既存システムの / パーティションを /me
ルーターの設定,シリアルコンソール,arduinoのような自作デバイスで使うUSB-シリアル変換器は,udev を使うと デバイスファイル名 パーミッション 所有者 を自動設定できます. うまく設定すると rootアカウントや sudo を使わずに シリアルポートが使えるようになり大変便利になります. 以下,具体的な手順をまとめます USBデバイスのIDを調べる デバイスの識別子(ID)としては USBデバイスのベンダーIDとプロダクトIDの組み合わせ 製品固有のシリアル番号 などが利用できます これらの識別子は dmesg で簡単に確認できます. たとえば arduino uno を繋いだ場合は以下の通りです [518136.789084] usb 3-5: new full-speed USB device number 22 using xhci_hcd [518136.964454
(2020/04/09: 少し加筆しました) debian で wake-on-lan (WOL) を有効するには /etc/network/interfaces.d/eth0 で設定する方法 /etc/network/interfaces で設定する方法 BIOSで有効にする方法 カーネルモジュール側で有効にする方法 などがありますが(詳細は後述),条件によってはうまく動かない場合があります そこで別アプローチで /etc/network/if-up.d/wake-on-lan を用意する方法 を考えたので手順をまとめます /etc/network/if-up.d/wake-on-lan を用意する方法 ethtoolをインストールします $ sudo apt-get install ethtool /etc/network/if-up.d/wake-on-lan を作成します.中身は
ssh のブルートフォースアタック(=総当り攻撃、Brute Force Attack)対策を調べたので、メモ。 特定のユーザのみssh接続を許可 (有効性:★、作業の難易度:簡単) /etc/sshd/sshd_config に以下の行を書くと、それ以外のユーザは ssh でログインできなくなる AllowUsers ユーザ名1 ユーザ名2似た機能に AllowGroups もある 特定のIPアドレスからのみ接続を許可 (有効性:★★★、作業の難易度:簡単) /etc/hosts.allow に、許可する接続元を書く。 sshd : 192.168.1. sshd : 10.1.2.3 sshd : .example.com接続元は、ネットワークアドレス、IPアドレス、ドメイン名が使える /etc/hosts.deny には、一行だけ ALL:ALL と記述 パスワード認証は禁止 (有効
とりあえず,数値を+1するプラグインを書いてみた.つまり,script-fu で (inc 10)とすると,(11) を返すプラグインである. #include <libgimp/gimp.h> static void query (void); static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals); GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_proc */ NULL, /* quit_proc */ query, /* query_proc */ run, /* run_proc */ }; MAIN () static void query (void)
bashでちょっと高度なシェルスクリプトを書くときに役立ちそうな小技をまとめてみました. && と || を積極的に使う bashでは コマンド1 && コマンド2 と記述すると,コマンド1が成功した場合のみ,コマンド2が実行されるようになります. (コマンド1が失敗すると,コマンド2は無視されます.) "||"は"&&"の逆で コマンド1 || コマンド2 と記述すると,コマンド1が失敗した場合のみ,コマンド2が実行されるようになります. (コマンド1が成功すると,コマンド2は無視されます.) これがなんの役に立つのか?まだピンとこない人は,次の errorとabortの例をみてください. エラー処理は error関数と abort関数を使う エラー処理は error関数と abort関数を作ると作業が捗ります. エラーメッセージを出す関数: error function error {
bash で Ctrl-C をフックする方法、つまりSIGINTを自前のシグナルハンドラで捕捉する方法についてメモ。 概要 シグナルハンドラを設定するには、trap というbashのビルトイン・コマンドを使います #!/bin/bash hander() { echo "recv!!" } trap hander SIGINT while /bin/true; do : ; done Ctrl-Cを押すと SIGINT という名前のシグナルがプロセスに通知されるので、trapコマンドで SIGINT を受け取ったら hander という関数を呼ぶように設定しています このシェルスクリプトは実行すると末尾で無限ループになるだけです。ただCtrl-C を押しても、シェルスクリプトは終了せず、代わりに hander()関数が呼ばれて"recv!" という文字列が画面に表示されます Ctrl-Cで
perfのインストール方法は、http://d.hatena.ne.jp/pyopyopyo/20140702/p1 を参照してください。 要点だけまとめると debian や ubuntu なら $ apt-cache search linux-perf $ sudo apt install linux-perf-5.3 でカーネルのバージョンに合わせた linux-perf パッケージをインストールするだけです インストール後は $ perf_5.3 のように perf_バージョン番号 のコマンドがつかえるようになります 以下コマンドの使用例を簡単に列挙します。表記の都合上,コマンド名は perf としておきます 詳細は $ perf --help $ perf record --help のような感じで、コマンドラインから help が参照できます。 パフォーマンスカウンタの統計情報
Macbook Air (OS X Marvericks) の TeX環境を texlive2014 に更新したので手順をまとめます. 2018年5月9日追記: Tex Live 2018版の記事をhttp://d.hatena.ne.jp/pyopyopyo/20180509 に用意しました. 2016年11月6日追記:Tex Live 2016版の記事をhttp://d.hatena.ne.jp/pyopyopyo/20161106 に用意しました. 2015年7月10日追記:texlive2015版の記事をhttp://d.hatena.ne.jp/pyopyopyo/20150710に用意しました. BasicTeX パッケージはMacTeXのサブセット版である BasicTeX を使いました. https://tug.org/mactex/ https://tug.org/mac
OSXに mac portsを入れると,システムには /usr/bin/gcc /opt/local/bin/gcc-mp-4.9 /opt/local/bin/gcc-mp-4.8 のような感じで,複数のgccが共存する状態になります.ややこしいですね. ここで port コマンドの select オプションを使うと,デフォルトのgccを切り替えることができます. port select の使い方 まず,利用可能なバージョンの一覧を調べます. $ port select --list gcc Available versions for gcc: mp-gcc48 (active) mp-gcc49 none ためしに gcc に"-v"オプションを付けて,gccのバージョンを確認してみます $ gcc -v (省略) gcc version 4.8.2 (MacPorts gcc48
MacPortsを使っている Macbook airを Mavericks に更新したので手順をまとめます. Mavericks正式リリース直後は相性問題などトラブルが多かった様ですが,さすがに一週間も経過すると大体問題は解決しているようです.人柱・開発者の皆様に感謝しつつ作業を進めましょう. 2013/10/28 若干トラブルがあったので内容を更新しました. バックアップ Time Machine でバックアップをとりましょう Mavericks へupgrade App Store 経由で更新します Xcode の更新 App Store 経由で Xcode を更新します Xcodeの更新が終わったら,Command Line Tools を更新します Xcodeを起動 メニューの[Xcode]から[Preference]を選択 設定のダイアログが開くので,[Downloads]タブを
debian でアカウント情報をOpenLDAPで管理する手順をまとめます. インストール(LDAPサーバ側) $ sudo apt-get install ldap-server ldap-utils 設定(LDAPサーバ側) 以前はopenldapの設定ファイルといえば /etc/ldap/slapd.conf でしたが,最近のldapではこのファイルは使いません.設定自体も ldapのデータベース上に保存するようになっています. ですので,LDAPサーバの再設定を行なう場合はとりあえず $ sudo dpkg-reconfigure slapd とするのが簡単です. 本エントリでは,ここで base は dc=local rootdnは cn=admin,dc=local と設定した場合を想定して,以下手順を説明していきます. 初期設定 slapdの設定が終わったら,とりあえず動作確
WindowsやFreeDOSを使わずに,LinuxだけでマザーボードのBIOSを更新する手順をまとめます. 同じ手順で,マザーボードだけでなく,NICやRAIDカード,グラッフィックボードまで様々なデバイスのファームウェアが更新できます. 手順1) flashrom のインストール BIOS更新には flashrom というツールを使います. インストール方法は,debianやubuntuなら $ sudo apt-get install flashrom です.fedora等なら yum 経由でインストールできるそうです. 手順2) flashrom の動作確認 flashrom がマザーボードに対応しているか調べるために,試しに BIOSのバックアップを取ってみます. $ sudo flashrom 以下のような出力が出るはずです. flashrom v0.9.6.1-r1563 o
debian 用の nvidia のドライバ ・ライブラリ( nvidia-kernel-dkms やnvidia-glx等) を自分で改造・更新する際の手順をまとめます. ソースのダウンロード. $ apt-get source nvidia-graphics-drivers たとえば新しいバージョンへupgradeする場合は次のようにします $ cd nvidia-graphics-drivers-* $ rm *.run $ debchange --distribution UNRELEASED --newversion バージョン番号-1 $ wget ftp://download.nvidia.com/XFree86/Linux-x86/バージョン番号/NVIDIA-Linux-x86-バージョン番号.run $ wget ftp://download.nvidia.com/XF
systemdを使うと起動処理が劇的に速くなります.手元のdebian(unstable)なPCでは,grubの画面から数秒でgdmの画面に切り替わります.debianをデスクトップ用途で使っている人は是非 systemd に乗り換えましょう. 乗り換えは非常に簡単です.まず,予め unstable のパッケージを使えるようにしておきます.あとは,以下の2コマンドを実行するだけです. $ sudo apt-get install systemd-sysv -t unstable $ echo "systemd-sysv hold"| sudo dpkg --set-selections ただし,途中で,systemd に乗り換えることを確認するメッセージがでるので,メッセージに従って "Yes, do as I say" とタイプする必要があります. これで,次回起動時からsystemdを
MacOS に日本語TeX環境(texlive2012)をインストールしたので,手順をメモします. GUI は不便なので,設定コマンドラインから tlmgr コマンドで行います. (2012/10/07追記.ついでにTeXのTipsもまとめ直しました) MacTeX のインストール MacTexを使います. http://www.tug.org/mactex/ からMacTeX.pkg をダウンロード&インストールします. 日本語関連の設定 pxdvi 等を追加インストールします. まずtlptexlive リポジトリを追加します $ sudo tlmgr repository add http://www.tug.org/~preining/tlptexlive/ tlptexlive 確認 $ sudo tlmgr repository 次に pinning.txt という設定ファイル
pam 関連で, /var/log/messages や /var/log/security 等に set_loginuid failedというエラーが有る場合は,まず AUDIT が有効になっているか確認する.例えば $ ls /proc/*/loginuid このコマンドで一つもファイルが表示されない場合は AUDIT が有効になっていない. AUDITはカーネルの機能なので,AUDITを有効にするには CONFIG_AUDIT=y CONFIG_AUDITSYSCALL=y の設定でカーネルを再構築する. カーネルの再構築が出来ない場合は /etc/pam.d 以下の設定ファイル中の下記の行をコメントアウトすると,とりあえず set_loginuid failed 問題は回避できる. session required pam_loginuid.soただしこれは機能を無効にしているだけ
Adobe Readerは Linux だと32bit版バイナリしか提供されていません。 64bit版の debian でこのような32bitアプリを実行するためには、以下手順で環境をマルチアーキテクチャ化して、32bit/64bitアプリが共存できるようにします。以下詳細を説明します。 なお以前のdebian であれば、マルチアーキテクチャ化は $ sudo apt-get install ia32-libs あたりをインストールするだけで済みましたが、最近(?)debianで仕様変更があり ia32-libs パッケージはメンテナンスが打ち切られる方向になったみたいです。残念。 ダウンロード http://get.adobe.com/reader/otherversions/ から acrobat reader の deb パッケージをダウンロードします。 Linux English
BIOSの更新等で時々必要になるDOSの起動ディスク(USBメモリ).それをLinux上で作る方法です. (MacOSを使っている場合についてはこちら) 用意するもの USBメモリ 容量は50Mバイト以上あればOKです.中身はパーティション情報も含めて完全に消えてしまうので注意してください. FreeDOSのイメージファイル http://derek.chezmarcotte.ca/wp-content/uploads/2012/01/FreeDOS-1.1-USB-Boot.img.bz2 からダウンロードできます. ちなみに Size: 117652 bytes SHA1: 7d8a3c73f9cfdc71611e3f7a5b7b134529179821 です. 作成方法 USBメモリのデバイスファイル名を調べます. デバイスファイル名は /dev/disk/by-id を見るとすぐに
自作PCを使ってるとBIOS更新等でDOSの起動ディクスが必要になる場合が時々あります.でもWindow7ではDOSの起動ディスクは簡単には作れません.そんなDOSの起動ディクスをMacだけで作成する方法です. なおDOSは無料で利用できる FreeDOS を使います. (2012/9/13追記: Linux上で作る方法について別エントリを用意しました) 手順1) 空のUSBメモリを用意する メディアは USBメモリ を使います.サイズは50MB以上のものであれば何でもOKです. ただし中身は完全に消えてしまうので注意してください. 手順2) USBメモリのデバイスファイル名を確認する. USBメモリをMacに刺します. そしてUSBメモリのデバイスファイル名を調べます. 調べ方はいろいろありますが、今回は dh コマンドを使います. たとえば,容量2GB,名前が"NONAME"のUSBメ
TeXの余白(スペース,隙間)を調整する方法をまとめます. てっとりばやくスペースを調整したい場合 TeXとしては最悪の方法ですが"その場しのぎ"には成ります. 一行隙間を詰める \vspace{-1zh} 一行隙間を広げる \vspace{1zh}"zh"は,全角文字の高さ,に相当します.一行詰める場合は,高さ -1*zh の空白を挿入,一行広げる場合は,高さ 1*zh の空白を挿入する,ということになります. 文章全体で一括して余白を変更したい場合 それぞれ以下のようにします. 表のスペース column,横方向の余白 \tabcolsep = 1pt row,縦方向の余白 \tabrowsep = 1pt 図のスペース 図と図の間の余白 \setlength\floatsep{0pt} 本文と図の間の余白 \setlength\textfloatsep{0pt} 本文中の図の余白 \
次のページ
このページを最初にブックマークしてみませんか?
『pyopyopyo - Linuxとかプログラミングの覚え書き -』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く