{"version":"https:\/\/jsonfeed.org\/version\/1","title":"My Feed Title","home_page_url":"https:\/\/tm23forest.com\/contents","feed_url":"https:\/\/tm23forest.com\/contents.json","description":"TM23FOREST.COM ","author":{"name":"Tosh Morry"},"items":[{"title":"unix-socket\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30c1\u30fc\u30c8\u30b7\u30fc\u30c8","date_published":"2024-01-28T21:54:00+09:00","id":"https:\/\/tm23forest.com\/contents\/unix-socket-programming-cheetsheet","url":"https:\/\/tm23forest.com\/contents\/unix-socket-programming-cheetsheet","content_html":"
ソケット通信プログラミングでよく使用するURLなどをまとめる。<\/p>\n\n
凡例 最もよく見る記述 <\/strong><\/p>\n 構造体はこんな感じである。<\/p>\n 前提<\/strong><\/p>\n チェック項目<\/strong><\/p>\n というような背景からソケットプログラミング(特にサーバ)では多重化とマルチスレッドが必須となりどっちをやった場合でも抜け漏れが生じやすいです。...<\/p>","tags":["Linux"]},{"title":"serial\/chardev\u3067QEMU\u306e\u30b7\u30ea\u30a2\u30eb\u901a\u4fe1\u3092\u898b\u308b","date_published":"2024-01-21T09:19:00+09:00","id":"https:\/\/tm23forest.com\/contents\/serial-chardev-qemu-debug-monitor","url":"https:\/\/tm23forest.com\/contents\/serial-chardev-qemu-debug-monitor","content_html":" QEMU<\/a>をSSH越しのCUIなどで使用する際に 8.2.0におけるhelp表示の関係する部分を確認する。まずは chardevに関しては 次に こちらは断片的な情報しかなくこれだけ見てオプションを考えることは難しい(QEMUは他もそうだが)<\/p>\n この使用例は YoctoLinux<\/a>\u306e\u30d3\u30eb\u30c9\u306fGetting Started\u306e\u624b\u9806\u306b\u3057\u305f\u304c\u3063\u3066\u7279\u306b\u4f55\u3082\u8a2d\u5b9a\u305b\u305a\u306b\u30d3\u30eb\u30c9\u3059\u308b\u3068runqemu\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u306b\u5fc5\u8981\u306aqemu\u3082\u30d3\u30eb\u30c9\u30bf\u30fc\u30b2\u30c3\u30c8\u3068\u4e26\u884c\u3057\u3066\u30d3\u30eb\u30c9\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u3002\u3053\u308c\u306b\u3088\u3063\u3066\u30d3\u30eb\u30c9\u3057\u305f\u72b6\u614b\u3067runqemu\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3048\u3070\u958b\u767a\u7528\u306e\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u304c\u3059\u3050\u306b\u8d77\u52d5\u3067\u304d\u308b\u72b6\u614b\u306b\u306a\u3063\u3066\u3044\u308b\u304c\u3001\u5fc5\u8981\u306a\u3044\u5834\u5408\u306b\u306f\u5358\u306bqemu-native\u306e\u30d3\u30eb\u30c9\u6642\u9593\u306e\u7121\u99c4\u306b\u306a\u3063\u3066\u3044\u308b\u3068\u3044\u3048\u308b\u3002<\/p>\n\n \u307e\u305f\u3001runqemu\u30b3\u30de\u30f3\u30c9\u81ea\u4f53\u306fYocto\u306e\u30b7\u30b9\u30c6\u30e0\u81ea\u4f53\u3067\u30d3\u30eb\u30c9\u3055\u308c\u305fqemu\u30d0\u30a4\u30ca\u30ea\u304c\u306a\u3044\u5834\u5408\u306f\u30db\u30b9\u30c8\u30b7\u30b9\u30c6\u30e0\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308bqemu\u3092\u63a2\u3057\u3066\u8d77\u52d5\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u3002<\/p>\n \u4e0a\u8a18\u306frunqemu\u306e\u5f53\u8a72\u90e8\u5206\u304b\u3089\u629c\u7c8b\u3002<\/p>\n \u6700\u521d\u306blocal.conf\u306b\u5bfe\u3059\u308b\u8a18\u8ff0\u306e\u307f\u3067qemu-native\u304a\u3088\u3073qemu-helper-native\u3092\u5916\u3057\u305f\u3044\u5834\u5408\u306b\u3068\u308c\u308b\u5bfe\u7b56\u306f\u4e0b\u8a18\u3092\u8a18\u8f09\u3059\u308b\u3053\u3068\u3067\u3042\u308b\u3002<\/p>\n \u3053\u308c\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u3057\u3066\u5c0e\u51fa\u3055\u308c\u305f\u3082\u306e\u3002<\/p>\n 1) bitbake -e\u3067 EXTRA_IMAGEDEPENDS\u306b\u5165\u3063\u3066\u3044\u308bqemu\u95a2\u9023\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u63a2\u3059\n2) \u305d\u308c\u3089\u3092\u3059\u3079\u3066local.conf\u304b\u3089remove\u3059\u308b<\/p>\n poky\/meta\/recipes-core\/packagegroups\/nativesdk-packagegroup-sdk-host.bb\u306b\u3042\u308bnativesdk-qemu\u304a\u3088\u3073nativesdk-qemu-helper\u3092\u9664\u53bb\u3059\u308b\u3002<\/p>\n \u3053\u3061\u3089\u306f.bb\u306b\u66f8\u304b\u308c\u3066\u3044\u308b\u3082\u306e\u306a\u306e\u3067bbappend\u3067\u4e0a\u4f4d\u30ec\u30a4\u30e4\u304b\u3089\u9664\u53bb\u3057\u3066\u3082\u3088\u3044\u3002RDEPENDS\u306e\u6253\u3061\u6d88\u3057\u306e\u969b\u306b\u306fpn-\u306f\u5fc5\u8981\u306a\u3044\u3088\u3046\u3060\u3002<\/p>\n meta\/recipes-core\/meta\/meta-extsdk-toolchain.bb\u306b\u3042\u308bqemu-native\u304a\u3088\u3073qemu-helper-native\u3092\u9664\u53bb\u3059\u308b\u3002<\/p>\n \u4ee5\u4e0a\u306e\u7b87\u6240\u3092\u74b0\u5883\u306b\u5fdc\u3058\u3066\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3053\u3068\u3067bitbake\u3067\u76ee\u7684\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u30bd\u30d5\u30c8\u3092\u69cb\u7bc9\u3059\u308b\u969b\u306b\u4e0d\u8981\u306aqemu-native\u7cfb\u304a\u3088\u3073\u305d\u306e\u4f9d\u5b58\u30d3\u30eb\u30c9\u306e\u6642\u9593\u3092\u524a\u6e1b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3060\u308d\u3046\u3002<\/p>\n QEMU\u306fq35\u3084virt\u306e\u3088\u3046\u306a\u4eee\u60f3\u306e\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u4ee5\u5916\u306b\u3001\u5b9f\u969b\u306b\u5b58\u5728\u3059\u308b\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\uff08\u30e9\u30ba\u30d1\u30a4\u7b49\uff09\u306e\u30a8\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u3082\u884c\u3048\u308b\u305f\u3081BSP (Board Support Package)\u304c\u975e\u5e38\u306b\u3088\u304f\u3067\u304d\u3066\u3044\u308b(=\u5b8c\u5168\u306bYocto\u306e\u30b3\u30f3\u30bb\u30d7\u30c8\u306b\u5f93\u3063\u3066\u5b8c\u6210\u3055\u308c\u3066\u3044\u308b)\u5834\u5408\u306fBSP\u306e\u5bfe\u8c61\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u3092\u30a8\u30df\u30e5\u30ec\u30fc\u30b7\u30e7\u30f3\u3059\u308b\u305f\u3081\u306eQEMU\u3092\u30d3\u30eb\u30c9\u74b0\u5883\u3068\u3057\u3066\u69cb\u7bc9\u3057\u3066\u304f\u308c\u308b\u3060\u308d\u3046\u3002\u305f\u3060\u73fe\u72b6\u306f\u5358\u306b\u30d3\u30eb\u30c9\u6642\u9593\u306e\u6d6a\u8cbb\u3068\u306a\u3063\u3066\u3044\u308bBSP\u304c\u591a\u3044\u306e\u3067\u306f\u306a\u3044\u304b\u3068\u601d\u3046\u3002<\/p>","tags":["Linux"]},{"title":"certbot\u8a2d\u5b9a\u6642\u306eHTTP-01\u30a8\u30e9\u30fc\u306e\u30ed\u30b0\u3068\u5bfe\u51e6\u306a\u3069","date_published":"2024-01-14T23:20:00+09:00","id":"https:\/\/tm23forest.com\/contents\/apache-letsencrypt-certbot-http-01","url":"https:\/\/tm23forest.com\/contents\/apache-letsencrypt-certbot-http-01","content_html":" LetsEncrypt\u3092\u8a2d\u5b9a\u3059\u308b\u969b\u306b\u7528\u3044\u308bcertbot\u304c\u6b21\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u3092\u51fa\u3057\u305f\u969b\u306b\u5bfe\u51e6\u3057\u305f\u5185\u5bb9\u3092\u30e1\u30e2\u3059\u308b\u3002<\/p>\n \u307e\u305a\u306f\u30e1\u30c3\u30bb\u30fc\u30b8\u901a\u308a\/var\/log\/letsencrypt\/letsencrypt.log\u3092\u53c2\u7167\u3057\u3066\u30a8\u30e9\u30fc\u306e\u5185\u5bb9\u3092\u78ba\u8a8d\u3059\u308b\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306fsudo\u4ed8\u304d\u306ecertbot\u30b3\u30de\u30f3\u30c9\u306b\u3088\u3063\u3066\u4f5c\u6210\u3055\u308c\u305f\u3068\u601d\u308f\u308c\u308b\u305f\u3081\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u95b2\u89a7\u6642\u306b\u3082sudo\u3092\u4f7f\u7528\u3059\u308b\u306a\u3069\u3059\u308b\u3002\u3059\u308b\u3068\u672b\u5c3e\u3067\u4e0b\u8a18\u306e\u3088\u3046\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u78ba\u8a8d\u3055\u308c\u305f<\/p>\n \u305d\u3053\u3067HTTP-01\u3068\u306f\u4f55\u304b\u306b\u3064\u3044\u3066\u8abf\u3079\u306a\u304c\u3089.log\u306e\u3088\u308a\u4e0a\u90e8\u3092\u53c2\u7167\u3059\u308b\u3002\u3059\u308b\u3068\u6b21\u306e\u3088\u3046\u306a\u6d41\u308c\u306b\u3088\u3063\u3066\u30b5\u30fc\u30d0\u306e\u7d20\u6027\u3092\u78ba\u8a8d\u3059\u308b\u3082\u306e\u3060\u3068\u308f\u304b\u3063\u305f\u3002<\/p>\n \u4ee5\u4e0a\u306b\u3088\u3063\u3066\u30b5\u30fc\u30d0\u306e\u7d20\u6027\u78ba\u8a8d\u304c\u5b8c\u4e86\u3059\u308b\u3068\u6b8b\u308b\u8a8d\u8a3c\u30d7\u30ed\u30bb\u30b9\u306b\u79fb\u308b\u3002\u3053\u3053\u3067\u88ab\u8a8d\u8a3c\u30b5\u30fc\u30d0\u3068\u306f\u30a8\u30e9\u30fc\u4f8b\u306b\u304a\u3051\u308bmydomain.com\u306e\u3053\u3068\u3092\u6307\u3059\u3002Apache\u306e\u4e00\u6642\u7684\u306a\u8a2d\u5b9a\u304c\u884c\u308f\u308c\u3066\u3044\u308b\u5185\u5bb9\u306fletsencrypt.log\u4e0a\u3067\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u305f\u3002<\/p>\n \u3053\u306e\u30a2\u30af\u30bb\u30b9\u306e\u30ed\u30b0\u304cApache\u5074\u306b\u6b8b\u3063\u3066\u3044\u308c\u3070\u30a8\u30e9\u30fc\u306e\u5185\u5bb9\u304c\u78ba\u8a8d\u3067\u304d\u308b\u3060\u308d\u3046\u3002Apache\u306e\u30ed\u30b0\u306f\u901a\u5e38\/var\/log\/apache\u306b\u3042\u308b\u3002Apache\u306e\u30ed\u30b0\u306b.well-known\/acme-challenge\u95a2\u9023\u306e\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u304c\u306a\u3044\u5834\u5408\u306f\u30dd\u30fc\u30c8\u8ee2\u9001\u306e\u8a2d\u5b9a\u304c\u9593\u9055\u3063\u3066\u3044\u3066LetsEncrypt\u8a8d\u8a3c\u30b5\u30fc\u30d0\u304b\u3089\u88ab\u8a8d\u8a3c\u30b5\u30fc\u30d0\u306b\u5bfe\u3059\u308bhttp\u7d4c\u7531\u306e\u63a5\u7d9a\u304c\u3067\u304d\u3066\u3044\u306a\u3044\u306a\u3069\u304c\u8003\u3048\u3089\u308c\u308b\u3002Apache\u5074\u306e\u8a2d\u5b9a\u306fcertbot\u304c\u3046\u307e\u3044\u3053\u3068\u3084\u308b\u3060\u308d\u3046\u304b\u3089\u3053\u306e\u30b1\u30fc\u30b9\u304c\u5927\u534a\u3002<\/p>\n \u3053\u306e\u30ed\u30b0\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306bLetsEncrypt\u8a8d\u8a3c\u30b5\u30fc\u30d0\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u30e1\u30c3\u30bb\u30fc\u30b8\u3068\u3057\u3066\u53d7\u4fe1\u3057\u305f\u3082\u306e\u3092\u305d\u306e\u307e\u307e\u8868\u793a\u3057\u305f\u3082\u306e\u3068\u601d\u308f\u308c\u308b\u3002<\/p>\n \u3053\u306e\u5834\u5408\u306fmydomain.com\u3092<\/p>\n \u306a\u3069\u3001DNS\u30ec\u30b3\u30fc\u30c9\u306e\u72b6\u614b\u3092WAN\u5074\u304b\u3089\u30c1\u30a7\u30c3\u30af\u3067\u304d\u308b\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306bmydomain.com\u3092\u6253\u3061\u8fbc\u3093\u3067\u307f\u308b\u306e\u304c\u826f\u3044\u3060\u308d\u3046\u3002\u5f8c\u8005\u306eunboundtest\u306e\u5834\u5408\u306fANSWER SECTION\u306bWAN\u5074\u306eIP\u30a2\u30c9\u30ec\u30b9\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308c\u3070\u6b63\u5e38\u3002<\/p>","tags":["Apache"]},{"title":"Convert recent yocto recipes into dunfell syntax","date_published":"2023-08-07T00:15:00+09:00","id":"https:\/\/tm23forest.com\/contents\/convert-recent-yocto-recipes-into-dunfell-syntax","url":"https:\/\/tm23forest.com\/contents\/convert-recent-yocto-recipes-into-dunfell-syntax","content_html":" Yocto Linux build system (bitbake) adopts highly sophisticated override syntax using The conversion method is too simple to wait or search formal conversion tools. I wrote simple script below to skip boring manual backward conversion tasks, when I was working on porting tasks from newer recipes syntax to old one.<\/p>\n This script can be used with wrapping one liner like<\/p>\n dunfellize.sh contains above script. There are many room to update and improve but it just works now !!!<\/p>","tags":["Linux","Embedded"]},{"title":"bootchart-improved","date_published":"2023-01-15T22:48:00+09:00","id":"https:\/\/tm23forest.com\/contents\/bootchart-improved","url":"https:\/\/tm23forest.com\/contents\/bootchart-improved","content_html":" Draft for now.<\/p>\n\n Linux kernel upstream repository contains \"bootchart\" scripts written in Perl to visualize However the visual of that SVG file is not so good.<\/p>\n T.B.D.<\/p>\n matplotlib\u306fPython\u306e\u8d85\u6709\u540d\u30e9\u30a4\u30d6\u30e9\u30ea\u306e1\u3064\u3067\u3042\u308a\u3001\u4e3b\u306b\u30b0\u30e9\u30d5\u3092\u63cf\u753b\u3059\u308b\u6a5f\u80fd\u3092\u6301\u3063\u3066\u3044\u308b\u3002\u30b0\u30e9\u30d5\u306b\u9069\u5207\u306a\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u308b\u6a5f\u80fd\u3092\u59cb\u3081\u3068\u3057\u3066\u3001\u8abf\u3079\u3055\u3048\u3059\u308c\u3070\u3069\u3093\u306a\u56f3\u3067\u3082\u66f8\u3051\u308b\u3002\u307e\u305f\u3001\u56f3\u306e\u8868\u793a\u65b9\u6cd5\u3084\u51fa\u529b\u5f62\u5f0f\u306b\u304a\u3044\u3066\u3082\u69d8\u3005\u306a\u3082\u306e\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u3002Qt\u3084Tk\u306a\u3069\u306eGUI\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u6614\u306f\u591a\u304b\u3063\u305f\u304c\u3001\u6700\u8fd1\u3067\u306fJupyter\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306e\u547c\u3073\u51fa\u3057\u304c\u4e3b\u306a\u306e\u3060\u308d\u3046\u304b\u3002<\/p>\n\n matplotlib\u306f\u30a6\u30a3\u30f3\u30c9\u30a6\u3060\u3051\u3067\u306f\u306a\u304f\u30e9\u30b9\u30bf\u753b\u50cf\u3084\u30d9\u30af\u30bf\u5f62\u5f0f\u306esvg\u3084pdf\u306b\u56f3\u3092\u66f8\u304d\u51fa\u3059\u3053\u3068\u3082\u51fa\u6765\u308b\u3002\u30d9\u30af\u30bf\u5f62\u5f0f\u306e\u56f3\u306fLaTeX\u306b\u7d44\u307f\u8fbc\u3093\u3067\u8ad6\u6587\u3084beamer\u306b\u8f09\u305b\u308b\u306e\u306b\u9069\u3057\u3066\u3044\u308b\u3002\u9069\u5207\u306aTeX\u30c7\u30a3\u30b9\u30c8\u30ea\u30d3\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304a\u3051\u3070\u56f3\u306e\u4e2d\u306b\u6570\u5f0f\u3092\u8f09\u305b\u308b\u3053\u3068\u3082\u7c21\u5358\u306b\u51fa\u6765\u308b\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u88c5\u98fe\u3060\u3068matplotlib\u306b\u3088\u308b\u56f3\u306f\u3059\u3050\u306b\u305d\u308c\u3060\u3068\u308f\u304b\u308b\u304c\u3001\u3072\u3068\u305f\u3073\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u88c5\u98fe\u3092\u3084\u3081\u308c\u3070MATLAB\u3084gnuplot\u3067\u4f5c\u3063\u305f\u3068\u3044\u3063\u3066\u3082\u308f\u304b\u3089\u306a\u3044\u3082\u306e\u3068\u306a\u308b\u3002\u3082\u3063\u3068\u3082\u3001MATLAB\u306b\u95a2\u3057\u3066\u306fmatplotlib\u81ea\u4f53\u306bMATLAB\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u6a21\u3059\u308b\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u3042\u3063\u305f\u3068\u8a18\u61b6\u3057\u3066\u3044\u308b\u304c\u3002<\/p>\n LaTeX\/beamer\u306bmatplotlib\u88fd\u306epdf\u3092\u7d44\u307f\u8fbc\u3080\u3068\u3044\u3046\u3053\u3068\u3092\u3057\u3066\u3044\u308b\u3068\u3001\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u304f\u30b0\u30e9\u30d5\u306b\u9650\u3089\u306a\u3044\u56f3\u5f62\u3084\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3082matplotlib\u3067\u4f5c\u3063\u3066\u3057\u307e\u3048\u3068\u3044\u3046\u3053\u3068\u304c\u3088\u304f\u8d77\u3053\u308b\u3002LaTeX\u81ea\u4f53\u306b\u3082Tikz\u3068\u3044\u3063\u305f\u63cf\u753b\u6a5f\u80fd\u306f\u3042\u308b\u3082\u306e\u306e\u3001\u65e5\u3054\u308d\u304b\u3089matplotlib\u3092\u4f7f\u3044\u8fbc\u3093\u3067\u3044\u308b\u3068Tikz\u306a\u3069\u3092\u30a4\u30c1\u304b\u3089\u899a\u3048\u308b\u3088\u308a\u3082matplotlib\u306e\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3084\u30d1\u30c3\u30c1\u3084\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8\u3092\u8abf\u3079\u305f\u65b9\u304c\u5168\u304f\u540c\u3058\u30af\u30aa\u30ea\u30c6\u30a3\u306e\u3082\u306e\u304c\u3088\u308a\u7d20\u65e9\u304f\u4f5c\u308c\u308b\u3068\u8003\u3048\u308b\u304b\u3089\u3060\u3002<\/p>\n \u3067\u3042\u308b\u3068\u3001\u6b21\u306b\u8003\u3048\u308b\u3053\u3068\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u81ea\u4f53\u3092matplotlib\u3067\u4f5c\u3063\u3066\u3057\u307e\u3048\u306a\u3044\u306e\u304b\uff1f\u3068\u3044\u3046\u3053\u3068\u3067\u3042\u308b\u304c\u3001\u3053\u308c\u3082\u5f53\u7136\u51fa\u6765\u308b\u3088\u3046\u3060\u3002<\/p>\n \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30de\u30ca\u30fc\u306b\u3088\u308bmatplotlib\u306e\u4f7f\u3044\u65b9\u3092\u5ff5\u982d\u306b\u304a\u304f\u3002\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30de\u30ca\u30fc\u3068\u3044\u3063\u3066\u3044\u308b\u306e\u306f 1\u30da\u30fc\u30b8\u3092\u8868\u73fe\u3059\u308b\u306e\u306b1\u3064\u306e \u3053\u3053\u3067\u306fA4\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4f8b\u306b\u3057\u305f\u3002 \u7d50\u679c\u306f\u4e0b\u8a18\u3002<\/p>\n Multipage PDF<\/a>\u3092\u53c2\u8003\u306b\u3059\u308c\u3070\u30b9\u30c8\u30ec\u30fc\u30c8\u306b\u66f8\u3051\u308b\u5185\u5bb9\u3068\u306a\u308b\u3002 \u4ee5\u4e0a\u306e\u5185\u5bb9\u3067\u65e5\u3054\u308d\u304b\u3089 \u826f\u304f\u4f7f\u3046\u30d5\u30ec\u30fc\u30ba\u3068\u3057\u3066\u3001\u72d9\u3063\u305f\u4f4d\u7f6e\u306b \u5ea7\u6a19\u3092\u76f4\u63a5\u6307\u5b9a\u3059\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u914d\u7f6e\u5834\u6240\u3092\u3059\u3050\u306b\u628a\u63e1\u3067\u304d\u308b\u3088\u3046\u306b Android Automotive<\/p>\n\n r18だと不要。<\/p>\n emulator bootconfig<\/p>\n Jenkins\u306bbitbake\u3055\u305b\u308b\u969b\u306b\u3001\u3069\u3046\u3057\u3066\u3082oe-init-build-env\u3067\u5931\u6557\u3057\u3066\u3057\u307e\u3063\u3066\u3044\u305f\u3002\u306a\u305c\u3084\u3089\u901a\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u305d\u306e\u90e8\u5206\u3092\u30e1\u30e2\u3059\u308b\u3002<\/p>\n\n <\/p>\n <\/p>\n \u7d50\u679c\u306f\u3053\u306e\u3088\u3046\u306b\u306a\u308b\u3002\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u66f8\u304d\u65b9\u3084\u51fa\u6765\u308b\u3053\u3068\u306f\u3088\u304f\u308f\u304b\u3089\u306a\u3044\u304cbitbake\u304c\u597d\u304d\u306a\u5834\u6240\u3067\u52d5\u304b\u305b\u308b\u304f\u3089\u3044\u306f\u3055\u3059\u304c\u306b\u51fa\u6765\u308b\u3088\u3046\u3060\u3002<\/p>\n \u3069\u3046\u3084\u3089\u30b7\u30a7\u30eb\u304cbash\u3067\u306f\u306a\u3044\u305f\u3081 Ubuntu22.04でssh認証とhttps接続で動作するgitサーバの作り方をGit Book等を参考に記す。<\/p>\n\n\n
sock = socket(AF_UNIX, SOCK_STREAM, 0);<\/code><\/pre>\n
\n
AF_UNIX<\/code> : プロセス間通信用ソケット。他には
AF_INET<\/code> \/
AF_VSOCK<\/code>などが入る。<\/li>\n
SOCK_STREAM<\/code> : データ境界の概念がないストリームはコレ。そうでなければ
SOCK_SEQPACKET<\/code>。<\/li>\n
0<\/code> : 9割方使わない<\/li>\n
sock<\/code> : 失敗すると-1でerrnoを設定。<\/li>\n<\/ul>\n
ret = bind(sock, (const struct sockaddr *) &addr, sizeof(addr));<\/code><\/pre>\n
\n
sock<\/code> :
socket<\/code>の返したもの。<\/li>\n
addr<\/code> :
sockaddr_un<\/code>構造体を指定。
#include <sys\/un.h><\/code>必要。<\/li>\n
sizeof(addr)<\/code> : サイズ。<\/li>\n
ret<\/code> : 成功で0、失敗で-1<\/li>\n<\/ul>\n
struct sockaddr_un addr;\n\nmemset(&addr, 0, sizeof(addr));\naddr.sun_family = AF_UNIX;\nstrcpy(addr.sun_path, path);\n\nunlink(path);\nif (bind(listenfd, (const struct sockaddr *) &addr, sizeof(addr)) < 0) {\n perror(\"bind\");\n return -1;\n}<\/code><\/pre>\n
ret = listen(sock, 10);<\/code><\/pre>\n
\n
sock<\/code> :
socket<\/code>が返して
bind()<\/code> 済みのもの。<\/li>\n
10<\/code> : backlogの数。
accept<\/code>せずにためておける接続数。<\/li>\n<\/ul>\n
fd = accept(sock, NULL, NULL);<\/code><\/pre>\n
\n
sock<\/code> :
socket<\/code>が返して
bind()<\/code> \/
listen()<\/code> 済みのもの。<\/li>\n
NULL<\/code>×2 : 1個目はaddr, 2個目はsizeを示す、クライアントが設定する
sockaddr<\/code>構造体。見る必要がなければ両方
NULL<\/code>。<\/li>\n
fd<\/code> : クライアントの
fd<\/code>。失敗は-1でerrno設定。<\/li>\n<\/ul>\n
ret = recv(fd, buf, sizeof(buf), 0);<\/code><\/pre>\n
\n
fd<\/code> :
accept()<\/code>が返却のもの。<\/li>\n
buf<\/code> \/
sizeof(buf)<\/code> : 受信バッファ。<\/li>\n
MSG_DONTWAIT<\/code> \/
MSG_WAITALL<\/code>などを指定。<\/li>\n
ret<\/code> : 受信したバイト数。負値はエラー、0はクライアントが切断されたことを意味する。<\/li>\n<\/ul>\n
ret = send(fd, buf, len, 0);<\/code><\/pre>\n
\n
fd<\/code> :
accept()<\/code>が返却のもの。<\/li>\n
buf<\/code> \/
len<\/code> : 送信バッファ。<\/li>\n
MSG_DONTWAIT<\/code>などを指定。<\/li>\n
ret<\/code> : 成功0、失敗-1。
errno == ECONNRESET<\/code>はクライアントが切断されたことを意味する。<\/li>\n<\/ul>\n
クイックチェック(サーバ編)<\/h2>\n
\n
fork() \/<\/code>pthread_create()
による並列実行か<\/code>poll()`による多重化が必要です。<\/li>\n
accept()<\/code>)際は上記が必要です。<\/li>\n
-serial mon:stdio<\/code>を指定して仮想マシンのシリアル出力を別GUIではなくqemuのコマンドをたたいたその場所に出力させることがある。この際、QEMUそのものの出力と仮想マシンがシリアル通信ポート (PL011)に書き込んだことによる出力が混在してしまって解析が行いにくい時がある。<\/p>\n\n
-serial<\/code>オプションと
-chardev<\/code>オプションを組み合わせることでシリアル通信用のコンソールとQEMUを立ち上げたコンソールを別々に用意することができる。最新版であるQEMU 8.2.0を使ってこの方法を紹介していく。<\/p>\n
chardev\/serialのhelp表示<\/h3>\n
-chardev<\/code>に関する箇所は以下のようになっている。<\/p>\n
Character device options:\n-chardev help\n-chardev null,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev socket,id=id[,host=host],port=port[,to=to][,ipv4=on|off][,ipv6=on|off][,nodelay=on|off]\n [,server=on|off][,wait=on|off][,telnet=on|off][,websocket=on|off][,reconnect=seconds][,mux=on|off]\n [,logfile=PATH][,logappend=on|off][,tls-creds=ID][,tls-authz=ID] (tcp)\n-chardev socket,id=id,path=path[,server=on|off][,wait=on|off][,telnet=on|off][,websocket=on|off][,reconnect=seconds]\n [,mux=on|off][,logfile=PATH][,logappend=on|off][,abstract=on|off][,tight=on|off] (unix)\n-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]\n [,localport=localport][,ipv4=on|off][,ipv6=on|off][,mux=on|off]\n [,logfile=PATH][,logappend=on|off]\n-chardev msmouse,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]\n [,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev ringbuf,id=id[,size=size][,logfile=PATH][,logappend=on|off]\n-chardev file,id=id,path=path[,input-path=input-file][,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev pipe,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev pty,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev stdio,id=id[,mux=on|off][,signal=on|off][,logfile=PATH][,logappend=on|off]\n-chardev braille,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev serial,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\n-chardev parallel,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]<\/code><\/pre>\n
-chardev help<\/code>で次のような表示が行えるとかかているので実行すると下記が出力された。<\/p>\n
qemu-system-x86_64 -chardev help\nAvailable chardev backend types:\n ringbuf\n mux\n pipe\n stdio\n pty\n null\n msmouse\n socket\n braille\n vc\n parallel\n dbus\n memory\n udp\n file\n wctablet\n serial\n testdev<\/code><\/pre>\n
-serial<\/code>に関する場所をみると下記。<\/p>\n
Debug\/Expert options:\n-compat [deprecated-input=accept|reject|crash][,deprecated-output=accept|hide]\n Policy for handling deprecated management interfaces\n-compat [unstable-input=accept|reject|crash][,unstable-output=accept|hide]\n Policy for handling unstable management interfaces\n-fw_cfg [name=]<name>,file=<file>\n add named fw_cfg entry with contents from file\n-fw_cfg [name=]<name>,string=<str>\n add named fw_cfg entry with contents from string\n-serial dev redirect the serial port to char device 'dev'\n-parallel dev redirect the parallel port to char device 'dev'\n-monitor dev redirect the monitor to char device 'dev'\n-qmp dev like -monitor but opens in 'control' mode\n-qmp-pretty dev like -qmp but uses pretty JSON formatting\n-mon [chardev=]name[,mode=readline|control][,pretty[=on|off]]\n-debugcon dev redirect the debug console to char device 'dev'<\/code><\/pre>\n
serial chardev:の使用<\/h3>\n
-serial<\/code>のヘルプには書かれていないが下記のようにして使える。<\/p>\n
qemu-system-x86_64 \\\n-chardev socket,id=uart,path=\/tmp\/qemu.socket,server=on \\\n-serial chardev:uart \\\n......<\/code><\/pre>","tags":["Linux","QEMU"]},{"title":"Yocto\u306e\u30d3\u30eb\u30c9\u6642\u9593\u77ed\u7e2e\u306e\u305f\u3081\u306b\u30cd\u30a4\u30c6\u30a3\u30d6\u306eqemu\u3092\u9664\u53bb\u3059\u308b","date_published":"2024-01-20T17:40:00+09:00","id":"https:\/\/tm23forest.com\/contents\/yocto-qemu-exclude-to-reduce-build-time","url":"https:\/\/tm23forest.com\/contents\/yocto-qemu-exclude-to-reduce-build-time","content_html":"
def find_qemu(self):\n qemu_bin = os.path.join(self.bindir_native, self.qemu_system)\n\n # It is possible to have qemu-native in ASSUME_PROVIDED, and it won't\n # find QEMU in sysroot, it needs to use host's qemu.<\/code><\/pre>\n
EXTRA_IMAGEDEPENDS<\/h3>\n
EXTRA_IMAGEDEPENDS:remove = \"qemu-system-native\"\nEXTRA_IMAGEDEPENDS:remove = \"qemu-helper-native:do_addto_recipe_sysroot\"<\/code><\/pre>\n
nativesdk-packagegroup-sdk-host<\/h3>\n
RDEPENDS:nativesdk-packagegroup-sdk-host:remove = \"nativesdk-qemu\"\nRDEPENDS:nativesdk-packagegroup-sdk-host:remove = \"nativesdk-qemu-helper\"<\/code><\/pre>\n
meta-extsdk-toolchain<\/h3>\n
DEPENDS:pn-meta-extsdk-toolchain:remove = \"qemu-native\"\nDEPENDS:pn-meta-extsdk-toolchain:remove = \"qemu-helper-native\" <\/code><\/pre>\n
\u304a\u308f\u308a\u306b<\/h3>\n
Hint: The Certificate Authority failed to verify the temporary Apache configuration changes made by Certbot. Ensure that the listed domains point to this Apache server and that it is accessible from the internet.\n\nSome challenges have failed.\nAsk for help or search for solutions at https:\/\/community.letsencrypt.org. See the logfile \/var\/log\/letsencrypt\/letsencrypt.log or re-run Certbot with -v for more details.<\/code><\/pre>\n\n
letsencrypt.log\u3092\u53c2\u7167\u3059\u308b<\/h2>\n
2024-01-14 19:16:27,451:INFO:certbot._internal.auth_handler:Challenge failed for domain mydomain.com \n2024-01-14 19:16:27,451:INFO:certbot._internal.auth_handler:http-01 challenge for mydomain.com<\/code><\/pre>\n
http-01\u3068\u306f<\/h2>\n
\n
2024-01-14 19:16:23,026:DEBUG:certbot_apache._internal.http_01:Adding a temporary challenge validation Include for name: mydomain.com in: \/etc\/apache2\/sites-enabled\/000-default.conf\n2024-01-14 19:16:23,026:DEBUG:certbot_apache._internal.http_01:writing a pre config file with text:\n RewriteEngine on\n RewriteRule ^\/\\.well-known\/acme-challenge\/([A-Za-z0-9-_=]+)$ \/var\/lib\/letsencrypt\/http_challenges\/$1 [END]\n\n2024-01-14 19:16:23,026:DEBUG:certbot_apache._internal.http_01:writing a post config file with text:\n <Directory \/var\/lib\/letsencrypt\/http_challenges>\n Require all granted\n <\/Directory>\n <Location \/.well-known\/acme-challenge>\n Require all granted\n <\/Location><\/code><\/pre>\n
no valid A records found for<\/h2>\n
\"type\": \"http-01\",\n \"status\": \"invalid\",\n \"error\": {\n \"type\": \"urn:ietf:params:acme:error:dns\",\n \"detail\": \"no valid A records found for mydomain.com; no valid AAAA records found for mydomain.com\",\n \"status\": 400\n },<\/code><\/pre>\n
\n
:<\/code> or
_<\/code> to efficiently describe what we want to do. This significantly reduce the amount of bb\/bbappend code because we do not have to write explicit branching scripts at all in many cases. However, the problem is that key operator character had been changed from
_<\/code> to
:<\/code> since a version of Yocto distribution. The conversion is available for forward distribution upgrade. But backward one is still not available in official distribution as far as I observed.<\/p>\n\n
#!\/usr\/bin\/env bash\n\n[[ -f $1 ]] || exit\nsed -i \"s=^\\([A-Z]*\\)\\:=\\1_=g\" \"$1\"\nsed -i \"s=\\:\\(append\\)=_\\1=g\" \"$1\"\nsed -i \"s=\\:\\(prepend\\)=_\\1=g\" \"$1\"<\/code><\/pre>\n
find meta* -name \"*.bb*\" | xargs -n1 dunfellize.sh<\/code><\/pre>\n
initcall_debug<\/code> output. The Perl script parses dmesg output text and generate SVG format text to standard output. The saved SVG text can be opened by Web browser and any other svg compatible viewer.<\/p>\n
def bootchart_initcall(ax, data, label):\n tab10 = pyplot.get_cmap('tab10')\n\n ax.broken_barh(\n data,\n (-0.5, 0.5),\n facecolors=[tab10(i % 10) for i in range(len(data)-1)]\n )\n\n ax.set_ylim([-1.1, 0.1])\n ax.set_xlim([0.2, 1.3])\n\n fontsize = 12\n while fontsize > 0.1:\n textbase = -10000\n bbox = None\n artists = []\n for i in range(len(data)-1):\n\n if data[i][1] < 0.0002:\n continue\n\n dataaxis = data[i][0] + data[i][1]\/2\n widthaxis = -0.5\n\n textaxis = dataaxis\n if dataaxis < textbase:\n textaxis = textbase\n\n text = ax.text(textaxis, widthaxis - 0.25,\n label[i], rotation=270, rotation_mode='anchor', fontsize=fontsize)\n\n if bbox is None:\n bbox = _get_text_bbox(ax, text)\n\n textbase = textaxis + bbox.width\n text.set_x(textaxis - bbox.width\/2)\n\n artists.append(text)\n\n if textbase < data[-1][0]*1.5:\n\n datac = (data[0][0] + data[-1][0] + data[-1][1])\/2\n textc = (data[0][0] + textbase)\/2\n d = textc - datac\n\n for text in artists:\n x, _ = text.get_position()\n text.set_x(x - d)\n\n break\n\n fontsize *= 0.95\n for text in artists:\n text.remove()\n artists.clear()\n\n j = 0\n for i...<\/code><\/pre>"},{"title":"matplotlib\u3067PDF\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b","date_published":"2023-01-09T20:52:00+09:00","id":"https:\/\/tm23forest.com\/contents\/make-pdf-document-using-matplotlib","url":"https:\/\/tm23forest.com\/contents\/make-pdf-document-using-matplotlib","content_html":"
figsize\u306e\u8abf\u6574<\/h2>\n
pyplot<\/code>\u304b\u3089
plot<\/code>\u3092\u547c\u3073\u51fa\u3057\u3066\u30ab\u30ec\u30f3\u30c8\u306efigure\u306b\u5bfe\u3057\u3066\u30d7\u30ed\u30c3\u30c8\u3092\u884c\u3046\u3068\u3044\u3063\u305f\u4f7f\u3044\u65b9\u3067\u306f\u306a\u304f\u3001\u30d7\u30ed\u30c3\u30c8\u306f
figure<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u8ffd\u52a0\u3055\u308c\u3066\u3044\u308b
axes<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u3057\u3066\u884c\u3046\u30de\u30ca\u30fc\u306e\u3053\u3068\u3060\u3002\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3068\u3044\u3046\u8a00\u8449\u306f\u3044\u308d\u3044\u308d\u885d\u7a81\u3059\u308b\u306e\u3067\u4f7f\u3046\u3053\u3068\u3092\u3084\u3081\u305f\u3002<\/p>\n
figure<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u7528\u3044\u308b\u3002\u3053\u306e
figure<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304cpdf\u306e1\u30da\u30fc\u30b8\u306b\u306a\u308b\u306e\u3067\u3001pdf\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u3044\u3046\u304b\u3089\u306b\u306f\u9069\u5207\u306a\u30b5\u30a4\u30ba\u8a2d\u5b9a\u3092\u884c\u3063\u3066\u304a\u304f\u3002
figure<\/code>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u30b5\u30a4\u30ba\u306f
pyplot.figure()<\/code>\u306b\u5bfe\u3057\u3066
figsize<\/code>\u30ad\u30fc\u30ef\u30fc\u30c9\u3067\u5e45\u3001\u9ad8\u3055\u306e\u30bf\u30d7\u30eb\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3067\u8a2d\u5b9a\u53ef\u80fd\u3060\u304c\u3001\u3053\u308c\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3084\u308b\u3002<\/p>\n
from matplotlib import pyplot\n\npaperwidth_mm = 297\npaperheight_mm = 210\nmm_per_inch = 25.4\nfigsize = (paperwidth_mm\/mm_per_inch, paperheight_mm\/mm_per_inch)\n\nfig = pyplot.figure(figsize=figsize)<\/code><\/pre>\n
figsize<\/code>\u306b\u6e21\u3059\u3079\u304d\u5e45\u3068\u9ad8\u3055\u306f\u30a4\u30f3\u30c1\u5358\u4f4d\u306a\u306e\u3067\u5358\u306b\u30df\u30ea\u30e1\u30fc\u30c8\u30eb\u3068\u5909\u63db\u3057\u3066\u6e21\u3057\u3066\u3084\u308c\u3070\u3088\u3044\u3002beamer\u306e\u5834\u5408\u306f\u30df\u30ea\u30e1\u30fc\u30c8\u30eb\u3067\u306f\u306a\u304f4:3\u308416:9\u306a\u3069\u306e\u6bd4\u7387\u3092\u8003\u616e\u3059\u308b\u3053\u3068\u3068\u3001\u30d4\u30af\u30bb\u30eb\u6570\u3067\u6307\u5b9a\u3057\u305f\u3044\u5834\u5408\u306f\u5225\u9014DPI\uff08Depth per Inch\uff09\u306e\u6c7a\u5b9a\u304c\u5fc5\u8981\u3068\u306a\u308b\u3002DPI\u306f\u5370\u5237\u3084\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u3078\u306e\u8868\u793a\u306e\u6587\u8108\u3067\u3088\u304f\u51fa\u304f\u308f\u3059\u51fa\u529b\u7cfb\u7d71\u306e\u89e3\u50cf\u5ea6\u3092\u793a\u3057\u3066\u304a\u308a\u7528\u9014\u306b\u5408\u308f\u305b\u3066\u59a5\u5f53\u306a\u6570\u5b57\u3092\u3082\u3063\u3066\u304d\u3066\u8a08\u7b97\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u304c\u3053\u3053\u3067\u306f\u6df1\u5165\u308a\u3059\u308b\u3053\u3068\u306f\u3084\u3081\u308b\u3002<\/p>\n
\u8907\u6570figure\u306e\u51fa\u529b<\/h2>\n
import matplotlib\nmatplotlib.use('pdf') # \u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3055\u305b\u306a\u3044\n\nfrom matplotlib import pyplot\n\nfigures = []\n# \u30da\u30fc\u30b8\u3054\u3068\u306bfigure\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001\u4e2d\u8eab\u3092\u63cf\u753b\u3057\u3066figures.append\n\nfrom matplotlib.backends import backend_pdf\nwith backend_pdf.PdfPages('figure.pdf') as pdf:\n for fig in pdf_figures:\n pdf.savefig(fig)\n\npyplot.close('all')<\/code><\/pre>\n
matplotlib.use('pdf')<\/code>\u304c\u7121\u304f\u3068\u3082\u52d5\u304f\u304c\u3001\u3053\u308c\u304c\u3042\u308b\u3068pdf\u3067\u306e\u51fa\u529b\u3057\u304b\u3057\u306a\u3044\u306e\u306b\u5b9f\u884c\u6642\u306b\u30a6\u30a3\u30f3\u30c9\u30a6\u306e\u30d5\u30a9\u30fc\u30ab\u30b9\u304c\u5909\u308f\u308b\u6319\u52d5\u3084x11 forwarding\u304c\u8d77\u304d\u308b\u6319\u52d5\u3068\u306a\u308b\u305f\u3081\u6291\u5236\u3057\u3066\u304a\u304f\u3002<\/p>\n
\u72d9\u3063\u305f\u4f4d\u7f6e\u306baxes\u3092\u914d\u7f6e<\/h2>\n
figure<\/code>\u306b\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\u3084
axes<\/code>\u3092\u7f6e\u3044\u305f\u308a\u3057\u3066\u3044\u308c\u3070\u540c\u3058\u3088\u3046\u306b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4e01\u5be7\u306b\u8aad\u3093\u3067\u3084\u308b\u3060\u3051\u3067\u306a\u3093\u3061\u3083\u3063\u3066LaTeX\u306e\u3088\u3046\u306a\u611f\u3058\u3067\u56f3\u5165\u308a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u4f5c\u308c\u308b\u3002\u8907\u6570\u884c\u306e\u6570\u5f0f\u5165\u308a\u30c6\u30ad\u30b9\u30c8\u3092\u597d\u304d\u306a\u5834\u6240\u306b\u7f6e\u304f\u3053\u3068\u3082\u51fa\u6765\u308b\u306e\u3067\u3001\u6bb5\u7d44\u307f\u3068\u304b\u811a\u6ce8\u3068\u304b\u30bf\u30a4\u30d7\u30bb\u30c3\u30c8\u306e\u30b3\u30a2\u6a5f\u80fd\u3092\u4f7f\u308f\u306a\u3044\u3088\u3046\u306a\u56f38-9\u5272\u306e\u30da\u30fc\u30b8\u304c\u7d9a\u304f\u3088\u3046\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3060\u3063\u305f\u3089\u3069\u3046\u3068\u3067\u3082\u306a\u308b\u306e\u3067\u306f\u306a\u3044\u3060\u308d\u3046\u304b\u3002\u5225\u306b\u8907\u6570\u30da\u30fc\u30b8\u3067\u3042\u308b\u5fc5\u8981\u306f\u306a\u3044\u306e\u3060\u304c\u3001
subplots<\/code>\u306e\u6b21\u5143\u304c2\u3092\u8d85\u3048\u3066\u304f\u308b\u3068\uff08\u308f\u304b\u308b\u304b\u306a\u3001\u3053\u306e\u8868\u73fe\uff09\u8907\u6570\u30da\u30fc\u30b8\u304c\u8d85\u3042\u308a\u304c\u305f\u3044\u3068\u611f\u3058\u308b\u3088\u3046\u306b\u306a\u308b\u3068\u8003\u3048\u3066\u3044\u308b\u3002<\/p>\n
axes<\/code>\u3092\u7f6e\u304f\u30b3\u30fc\u30c9\u3092\u7f6e\u3044\u3066\u304a\u304f\u3002<\/p>\n
# figsize: \u524d\u8ff0\u306e\u3082\u306e\n# padding_mm: \u30df\u30ea\u30e1\u30fc\u30c8\u30eb\u5358\u4f4d\u306e\u30d1\u30c7\u30a3\u30f3\u30b0\npadding = padding_mm \/ mm_per_inch\nrect = (\n padding \/ figsize[0],\n padding \/ figsize[1],\n (figsize[0] - padding*2) \/ figsize[0],\n (figsize[1] - padding*2) \/ figsize[1]\n)\n\nfig.add_axes(rect=rect)<\/code><\/pre>\n
add_axes<\/code>\u306b\u6e21\u3059
rect<\/code>\u30ad\u30fc\u30ef\u30fc\u30c9\u5f15\u6570\u306e4\u3064\u306e\u30bf\u30d7\u30eb\u306e\u5024\u306e\u610f\u5473\u304c\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3067\u3042\u308b\u3053\u3068\u3068\u5f8c\u534a2\u3064\u306e\u5f15\u6570\u306e\u610f\u5473\u304c\u5ea7\u6a19\u3067\u306f\u306a\u304f\u3066\u5e45\u3068\u9ad8\u3055\u3060\u3068\u3044\u3046\u3053\u3068\u3092\u8a00\u3063\u3066\u3044\u308b\u3002\u30d1\u30c7\u30a3\u30f3\u30b0\u306f\u4f8b\u3060\u304c\u9069\u5b9c\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u308c\u8fbc\u307f\u305f\u3044\u5074\u3092\u5e83\u3052\u308b\u306a\u308a\u3059\u308b\u306e\u304c\u3088\u304f\u3042\u308b\u3084\u308a\u65b9\u3060\u308d\u3046\u3002<\/p>\n
\u304a\u308f\u308a\u306b<\/h2>\n
figure<\/code>\u5168\u4f53\u306b\u88dc\u52a9\u7dda\u3092\u5165\u308c\u308b\u3068\u304b\u8003\u3048\u3089\u308c\u308b\u3002\u305f\u3060\u3001\u3044\u308d\u3044\u308d\u51dd\u308a\u3059\u304e\u306b\u306f\u6ce8\u610f\u3002\u88dc\u52a9\u7dda\u306f\u307e\u3060\u30b0\u30ec\u30fc\u3060\u304c\u8907\u6570\u884c\u30c6\u30ad\u30b9\u30c8\u3092\u5dee\u3057\u8fbc\u307f\u59cb\u3081\u305f\u3089beamer\u3068\u304b\u306b\u623b\u308a\u59cb\u3081\u305f\u65b9\u304c\u3088\u3055\u305d\u3046\u3067\u3042\u308b\u3002<\/p>","tags":["Python"]},{"title":"AndroidAutomotive","date_published":"2022-10-17T00:34:00+09:00","id":"https:\/\/tm23forest.com\/contents\/androidautomotive","url":"https:\/\/tm23forest.com\/contents\/androidautomotive","content_html":"
repo init -u https:\/\/android.googlesource.com\/platform\/manifest -b android-13.0.0_r18\nrepo sync<\/code><\/pre>\n
\n
[100% 23337\/23337] Target super fs image for debug: out\/target\/product\/trout_x86\/super.img\n2022-10-16 03:07:47 - build_super_image.py - INFO : Building super image from info dict...\n2022-10-16 03:07:47 - common.py - INFO : Running: \"\/mnt\/ext4hdd\/android-platform\/out\/host\/linux-x86\/bin\/lpmake --metadata-size 65536 --super-name super --metadata-slots 3 --virtual-ab --device super:7516192768 --group google_system_dynamic_partitions_a:5771362304 --group google_system_dynamic_partitions_b:5771362304 --partition product_a:readonly:195928064:google_system_dynamic_partitions_a --image product_a=out\/target\/product\/trout_x86\/product.img --partition product_b:readonly:0:google_system_dynamic_partitions_b --partition system_a:readonly:965472256:google_system_dynamic_partitions_a --image system_a=out\/target\/product\/trout_x86\/system.img --partition system_b:readonly:27615232:google_system_dynamic_partitions_b --image system_b=out\/target\/product\/trout_x86\/system_other.img --partition system_ext_a:readonly:348798976:google_system_dynamic_partitions_a --image system_ext_a=out\/target\/product\/trout_x86\/system_ext.img --partition system_ext_b:readonly:0:google_system_dynamic_partitions_b --partition system_dlkm_a:readonly:348160:google_system_dynamic_partitions_a --image system_dlkm_a=out\/target\/product\/trout_x86\/system_dlkm.img --partition system_dlkm_b:readonly:0:google_system_dynamic_partitions_b --group google_vendor_dynamic_partitions_a:1472200704 --group google_vendor_dynamic_partitions_b:1472200704 --partition odm_a:readonly:860160:google_vendor_dynamic_partitions_a --image odm_a=out\/target\/product\/trout_x86\/odm.img --partition odm_b:readonly:0:google_vendor_dynamic_partitions_b --partition vendor_a:readonly:124334080:google_vendor_dynamic_partitions_a --image vendor_a=out\/target\/product\/trout_x86\/vendor.img --partition vendor_b:readonly:0:google_vendor_dynamic_partitions_b --partition vendor_dlkm_a:readonly:348160:google_vendor_dynamic_partitions_a --image vendor_dlkm_a=out\/target\/product\/trout_x86\/vendor_dlkm.img --partition vendor_dlkm_b:readonly:0:google_vendor_dynamic_partitions_b --partition odm_dlkm_a:readonly:348160:google_vendor_dynamic_partitions_a --image odm_dlkm_a=out\/target\/product\/trout_x86\/odm_dlkm.img --partition odm_dlkm_b:readonly:0:google_vendor_dynamic_partitions_b --output out\/target\/product\/trout_x86\/super.img\"\n2022-10-16 03:07:48 - build_super_image.py - INFO : Done writing image out\/target\/product\/trout_x86\/super.img<\/code><\/pre>\n
emulator_car_x86_64:\/proc # cat bootconfig\nandroidboot.qemu = \"1\"\nandroidboot.qemu.cpuvulkan.version = \"4202496\"\nandroidboot.qemu.settings.system.screen_off_timeout = \"2147483647\"\nandroidboot.qemu.vsync = \"60\"\nandroidboot.qemu.gltransport.name = \"pipe\"\nandroidboot.qemu.gltransport.drawFlushInterval = \"800\"\nandroidboot.qemu.adb.pubkey = \"\"\nandroidboot.qemu.camera_protocol_ver = \"1\"\nandroidboot.qemu.camera_hq_edge_processing = \"0\"\nandroidboot.qemu.virtiowifi = \"1\"\nandroidboot.qemu.hwcodec.avcdec = \"2\"\nandroidboot.qemu.hwcodec.hevcdec = \"2\"\nandroidboot.qemu.hwcodec.vpxdec = \"2\"\nandroidboot.qemu.avd_name = \"<build>\"\nandroidboot.hardware = \"ranchu\"\nandroidboot.serialno = \"EMULATOR31X3X9X0\"\nandroidboot.veritymode = \"enforcing\"\nandroidboot.opengles.version = \"196608\"\nandroidboot.debug.hwui.renderer = \"skiagl\"\nandroidboot.logcat = \"*:V\"\nandroidboot.dalvik.vm.heapsize = \"512m\"\nandroidboot.vbmeta.size = \"6208\"\nandroidboot.vbmeta.hash_alg = \"sha256\"\nandroidboot.vbmeta.digest...<\/code><\/pre>","tags":["Android"]},{"title":"Jenkins\u306bbitbake\u3055\u305b\u308b","date_published":"2022-09-11T21:57:00+09:00","id":"https:\/\/tm23forest.com\/contents\/jenkins-bitbake","url":"https:\/\/tm23forest.com\/contents\/jenkins-bitbake","content_html":"
pipeline {\n agent any\n\n stages {\n stage('clone') {\n steps {\n sh \"\"\"\n cd \/path\/to\/hdd\n git clone git:\/\/git.yoctoproject.org\/poky -b dunfell poky_dunfell\n \"\"\"\n }\n }\n stage('bitbake') {\n steps {\n sh \"\"\"\n cd \/path\/to\/hdd\n . .\/oe-init-build-env\n bitbake core-image-minimal\n \"\"\"\n }\n }\n }\n}<\/code><\/pre>\n
source<\/code>\u306f\u4f7f\u3048\u306a\u3044\u3089\u3057\u3044\u3002\u307e\u305f\u3001\u30c9\u30c3\u30c8\u30b9\u30da\u30fc\u30b9\u30c9\u30c3\u30c8\u30b9\u30e9\u306f\u5fc5\u9808\u306e\u3088\u3046\u3060\uff08\u672a\u691c\u8a3c\uff09\u3002<\/p>","tags":["Jenkins"],"image":"\/user\/pages\/contents\/172.jenkins-bitbake\/jenkins-screenshot.png"},{"title":"Ubuntu\u3067git\u30b5\u30fc\u30d0\u306e\u4f5c\u308a\u65b9","date_published":"2022-09-11T20:30:00+09:00","id":"https:\/\/tm23forest.com\/contents\/ubuntu-git-server","url":"https:\/\/tm23forest.com\/contents\/ubuntu-git-server","content_html":"