Home | First | Prev | Next | Last |
apache2 ウェブサーバ audacious オーディオファイル再生 audacity オーディオファイル録音・編集 build-essential コンパイル用ライブラリ default-jre JAVA 実行環境 fcitx5-mozc Google 日本語入力 filezilla FTP クライエント flatpak Flatpak 管理 foliate EPUB ファイル・ビューワ fonts-ipafont IPA 日本語フォントセット gdebi deb ファイル・インストーラ gparted ディスク・バーティション管理 graphicsmagick CLI 画像ファイル編集 gthumb 画像ファイル閲覧 hardinfo システム情報 lame MP3 ファイル変換 libsdl1.2-dev SDL ライブラリ micro CLI テキスト・エディタ mp3info MP3 ID タグ編集 notepadqq テキストエディタ papirus-icon-theme アイコンセット pdfarranger PDF ファイル分離・結合 pdftk CLI PDF ファイル操作 printer-driver-dymo DYMO ラベル印刷 python-is-python3 Python3 へのリンク sigil EPUB ファイル作成・編集 sqlite3 SQLite データベース sqlitebrowser SQLite データベース閲覧 texlive-extra-utils TEX 補助プログラム ttf-mscorefonts-installer Micfrosoft 基本フォント vlc 動画閲覧
AozoraEpub3 青空文庫ファイル変換(binary より) balenaEtcher 起動用 USB ドライブ作成(AppImage より) fsearch ファイル検索(flat より) glabels-qt レベル作成(deb より) go Go プログラミング(binary より) indicator-sensors システムセンサー表示(snap より) losslesscut 動画の結合と切り取り(flat より) marktext マークダウンテキスト表示(flat より) syasokoban 倉庫番ゲーム(source より) zoom オンラインミーティング(deb より)
ul { position: relative; } ul li { list-style-type: none!important; } ul li:before { content: "😀️"; position: absolute; left : 1em; }
func check_mtime(filename string) (string) { info, err := os.Stat(filename) if err != nil { fmt.Println(err) } mt_line := fmt.Sprintf("%s", info.ModTime()) return mt_line }os モジュールの Stat 機能を使っているのですが、上記のファンクションが返す情報は、次のような文字列です。
2024-01-31 11:21:45.664444516 -0600 CST 2024-01-31 11:21:59.256434838 -0600 CST文字列と文字列を比較しても、それが同一である(True)か、ない(False)かの BOOL 値しか返しませんので、どちらが新しく、どちらが古いかは判定できません。
items := strings.Split(mt_line, ".") check_line := items[0]を実行すると、
2024-01-31 11:21:45 2024-01-31 11:21:59といった文字列となります。
func num_only(line string) string { re := regexp.MustCompile("[0-9]+") matches := re.FindAllString(line, -1) num_line := "" for _, match := range matches { num_line = num_line + match } return num_line }これを通すと、次のような文字列が得られます。 を実行すると、
20240131112145 20240131112159あとは、これを数値に変えて、大小を比較すればいいので、数値の大きいほうが、新しく更新されたものになりますので、次のように pdf ファイルが新しくない場合、それを更新するよう、メッセージを出すことができました。
mt_line := check_mtime("myfile.odt") items := strings.Split(mt_line, ".") num_line := num_only(items[0]) odt_mtime, _ := strconv.Atoi(num_line) mt_line = check_mtime("myfile.odt") items = strings.Split(mt_line, ".") num_line = num_only(items[0]) pdf_mtime, _ := strconv.Atoi(num_line) if odt_mtime > pdf_mtime { fmt.Println("Update PDF file.") }
$ ffmpeg -loglevel quiet -i source.wav -ar 22050 output.wavffmpeg コマンドに -loglevel quiet オプションを加えたのは、ffmpeg のログ出力があまりにも多いので、繰り返し使用するとき、ログ出力を抑えてターミナル画面をすっきりさせるためです。
import cgi form = cgi.FieldStorage() firstname = form.getvalue('firstname')とすれば、簡単に情報を得ることができます。ところが、Python の新バージョンでは、 cgi モジュールが使えなくなるそうです。
s = sys.stdin.readline()文字列 s は
firstname=Tro&lastname=Yamadaという形式になっていましたので、まず、 '&' で項目ごとに分け、配列 items に格納しました。
items = s.split('&')
keys = [] vals = [] for item in items: (key, val) = item.split('=') keys.append(key) vals.append(val)そして、keys と vals から、次のようにして、辞書型のデータを作りました。
formdata = dict(zip(keys, vals))こうしておけば、key を指定すれば、それに対応する値を取り出すことができます。
firstname = formdata['firstname'] lastname = formdata['lastname']といった具合にです。関数 dict と zip を使って辞書データを作る方法を覚えました。これで、少しは form.getvalue() に近づけたかと思います。
#!/usr/bin/bash all_filenames=`ls ??????????.txt` for each_filename in "${all_filenames}" do first_line=`head -q -n 1 ${each_filename}` printf '%s\n' "${first_line}" doneここで使ったコマンドは
head -q -n 1 ${each_filename}で、オプションの -q は、ファイル名などが表示されるのを防ぐため、-n 1 は最初の1行だけを取り出すためです。
package main import ( "fmt" "io/ioutil" "log" "path/filepath" "sort" "strings" ) func main() { filenames, _ := filepath.Glob(`??????????.txt`) sort.Strings(filenames) for _, filename := range filenames { fmt.Println(readFirstline(filename)) } }ここで注意したのは、filepath.Glob の結果がファイルの連番の順になるよう、sort.Strings で並べ替えたことです。
func readLine(filename string) string { bytes, err := ioutil.ReadFile(filename) if err != nil { log.Fatal(err) } lines := strings.Split(string(bytes), "\n") var first_line string for _, line := range lines { first_line = line break } return first_line }ファイルの読み込み方法にはいくつかの方法がありますが、ここでは ioutil.ReadFile() を使いました。ファイルデータをすべて読み込んでから行ごとに分けてから、最初の行だけを取り出しました。 ほんとうは、if i == 0 を加えて、次のようにすべきなのかもしれませんが、i が 0 のときにループから出てしまいますので、それは省略しました。
for i, line := range lines { if i == 0 { first_line = line break } }
bookname="Mybook" inpfilename="${bookname}.pdf" `pdftk $inpfilename burst output PDF/`PDF/ には pg_0001.pdf pg_0002.pdf pg_0003.odf .... などのように出力されますので、最後のファイル名から、総ページ数を得てもよいのですが、より簡単に ls の出力の単語数を数えて、ファイル総数を得ることにしました。
pagesum=`ls PDF/*.pdf | wc -w`次に、1つの〝signature〟を5枚の紙を 2つ折りにしたものに設定しました。したがって、〝signature〟あたりのページ数は 20ページとなります。それで、PDF/ にある180の PDF ファイルを 20づつ結合して、〝signature〟ごとのファイルを作ることにしました。各ファイルの最初のページと最後のページは次のようにして得ました。ページの総数が20で割り切れない場合に対応するため、最後の〝signature〟の最終ページは総ページ数にしました。
for ((page=1; page<=${pagesum}; page=page+20)); do end=$((page + 19)) if [ ${end} -gt ${pagesum} ]; then end=${pagesum} fi done
part=1 for ((page=1; page<=${pagesum}; page=page+24)); do end=$((page + 23)) if [ ${end} -gt ${pagesum} ]; then end=${pagesum} fi if [ ${part} -lt 10 ]; then partn="0${part}" fi outfilename="${bookname}-${partn}.pdf" echo "${outfilename} .... done." part=$((part + 1)) done
pagen=${page} pagefiles="" for ((pagen=${page}; pagen<=${end}; pagen=pagen+1)); do ppage=`printf %04d ${pagen}` pagefiles="${pagefiles} PDF/pg_${ppage}.pdf" done `pdftk ${pagefiles} cat output ${outfilename}`この部分を上記の
outfilename="${bookname}-${partn}.pdf"と
echo "${outfilename} .... done."の間に入れて、スクリプトを完成させました。
lastfile=`ls *.sh | tail -n 1`
lastfile=${files[-1]}としても、エラーになります。
$ sudo apt update $ sudo apt install xfce4 xfce4-goodies
$ LANG=C xdg-user-dirs-gtk-updateで、フォルダー名を英語に変えておきました。
$ cat /etc/os-releaseで、現在のバージョンコードが mantic であることを確かめ、
$ sudo sed -i 's/mantic/noble/g' /etc/apt/sources.listで、apt のソースリストを書き換えました。
$ sudo apt update $ sudo apt upgrade -y $ sudo apt upgrade -y $ sudo apt dist-upgrade -yとし、再起動しました。再起動してから、もういちど
$ cat /etc/os-releaseで、バージョンコードが noble になっていることを確かめました。
$ sudo vmware-installer -u vmware-player
$ sudo apt install virtualboxメイン PC は Windows 11 をインストールできる規格がそろっていますので、ゲスト OS に Windows 11 PRO を入れることにしました。Windows 11 の ISO ファイルを仮想 ISO にマウントして、ゲスト OS に Windows 11 を指定し、起動すると、ISO ファイルが読み込まれ、インストールできました。
$ sudo apt-get install virtualbox-guest-additions-isoとして、Guest Additions の ISO ファイルを入れました。これは、/usr/share/virtualbox/ にあるので、これを、仮想ディスクにマウントしておきました。
Home | First | Prev | Next | Last |