[M1 Mac, Big Sur 11.6.8]
Finderからファイルを開こうとした場合、”情報を見る”で開くアプリを選択できますが、設定してもすぐにデフォルトに戻ってしまいます。
この仕様はWindowsに比べて著しく劣っているところでもあります。
SwiftDefaultAppsを使えばデフォルトのアプリを変えることが可能です。
なぜ標準でこの機能を搭載しないのか不思議です。
[M1 Mac, Big Sur 11.6.8]
Finderからファイルを開こうとした場合、”情報を見る”で開くアプリを選択できますが、設定してもすぐにデフォルトに戻ってしまいます。
この仕様はWindowsに比べて著しく劣っているところでもあります。
SwiftDefaultAppsを使えばデフォルトのアプリを変えることが可能です。
なぜ標準でこの機能を搭載しないのか不思議です。
メモリアドレスから上位へ100番地分の格納値を10進数で出力
memory read -s1 -fu -c100 [メモリアドレス] --force
メモリアドレスから上位へ100番地分の格納値を16進数で出力(16進ダンプ)
memory read -c100 [メモリアドレス]
プロセス仮想および物理メモリ分析
vmmap [プロセス番号]
[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]
ポインタpのメモリ領域を確保して、空のままLLDBでその格納内容とメモリアドレスを確認しました。
正常なコードなので最終行で停止させ、printコマンドでポインタpのアドレスを出力しています。ついでにレジスタの状態や逆アセンブルを出力しました。
#include <cppstd.h>
int main() {
char *p;
p = (char*)malloc(sizeof(char));
printf("ポインタpが格納しているcharは %s\n", *p);
printf("ポインタpのアドレス(10進数)は %d\n", p);
printf("ポインタpのアドレス(16進数)は %x\n", p);
return 0;
}
$ lldb -f test
(lldb) target create "test"
Current executable set to '/test' (arm64).
(lldb) b 12
Breakpoint 1: where = test`main + 120 at test.cpp:12:5, address = 0x0000000100003ed8
(lldb) r
Process 87108 launched: '/test' (arm64)
ポインタpが格納しているcharは (null)
ポインタpのアドレス(10進数)は 2125136
ポインタpのアドレス(16進数)は 206d50
Process 87108 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100003ed8 test`main at test.cpp:12:5
9 printf("ポインタpのアドレス(10進数)は %d\n", p);
10 printf("ポインタpのアドレス(16進数)は %x\n", p);
11
-> 12 return 0;
13 }
14
15
Target 0: (test) stopped.
(lldb) print p
(char *) $0 = 0x0000000100206d50 ""
(lldb) register read
General Purpose Registers:
x0 = 0x0000000000000000
x1 = 0x0000000000000000
x2 = 0x00000000000120a8
x3 = 0x0000000100808e31
x4 = 0x000000016fdff140
x5 = 0x000000016fdff540
x6 = 0x000000000000000a
x7 = 0x0000000000000000
x8 = 0x00000001000cbdec dyld`_main_thread + 172
x9 = 0x00000001ff69c8d0 libsystem_kernel.dylib`errno
x10 = 0x0000000000000002
x11 = 0x00000000fffffffd
x12 = 0x0000010000000000
x13 = 0x0000000000000000
x14 = 0x0000000000000000
x15 = 0x0000000000000000
x16 = 0x00000001942097d8 libsystem_kernel.dylib`__error
x17 = 0x0000000202cc5650 (void *)0x00000001942097d8: __error
x18 = 0x0000000000000000
x19 = 0x0000000000000000
x20 = 0x0000000000000000
x21 = 0x0000000000000000
x22 = 0x0000000000000000
x23 = 0x0000000000000000
x24 = 0x0000000000000000
x25 = 0x0000000000000000
x26 = 0x0000000000000000
x27 = 0x0000000000000000
x28 = 0x000000016fdff598
fp = 0x000000016fdff560
lr = 0x6310000100003ed4 (0x0000000100003ed4) test`main + 116 at test.cpp:10:5
sp = 0x000000016fdff540
pc = 0x0000000100003ed8 test`main + 120 at test.cpp:12:5
cpsr = 0x20000000
(lldb) di
test`main:
0x100003e60 <+0>: sub sp, sp, #0x30 ; =0x30
0x100003e64 <+4>: stp x29, x30, [sp, #0x20]
0x100003e68 <+8>: add x29, sp, #0x20 ; =0x20
0x100003e6c <+12>: mov w8, #0x0
0x100003e70 <+16>: str w8, [sp, #0xc]
0x100003e74 <+20>: stur wzr, [x29, #-0x4]
0x100003e78 <+24>: mov x0, #0x1
0x100003e7c <+28>: bl 0x100003ee4 ; symbol stub for: malloc
0x100003e80 <+32>: str x0, [sp, #0x10]
0x100003e84 <+36>: ldr x8, [sp, #0x10]
0x100003e88 <+40>: ldrsb w10, [x8]
0x100003e8c <+44>: adrp x0, 0
0x100003e90 <+48>: add x0, x0, #0xf2c ; =0xf2c
0x100003e94 <+52>: mov x9, sp
0x100003e98 <+56>: mov x8, x10
0x100003e9c <+60>: str x8, [x9]
0x100003ea0 <+64>: bl 0x100003ef0 ; symbol stub for: printf
0x100003ea4 <+68>: ldr x8, [sp, #0x10]
0x100003ea8 <+72>: adrp x0, 0
0x100003eac <+76>: add x0, x0, #0xf5a ; =0xf5a
0x100003eb0 <+80>: mov x9, sp
0x100003eb4 <+84>: str x8, [x9]
0x100003eb8 <+88>: bl 0x100003ef0 ; symbol stub for: printf
0x100003ebc <+92>: ldr x8, [sp, #0x10]
0x100003ec0 <+96>: adrp x0, 0
0x100003ec4 <+100>: add x0, x0, #0xf88 ; =0xf88
0x100003ec8 <+104>: mov x9, sp
0x100003ecc <+108>: str x8, [x9]
0x100003ed0 <+112>: bl 0x100003ef0 ; symbol stub for: printf
0x100003ed4 <+116>: ldr w0, [sp, #0xc]
-> 0x100003ed8 <+120>: ldp x29, x30, [sp, #0x20]
0x100003edc <+124>: add sp, sp, #0x30 ; =0x30
0x100003ee0 <+128>: ret
(lldb) exit
Quitting LLDB will kill one or more processes. Do you really want to proceed: [Y/n] y
$
踏んでしまったアフィリエイトリンクをChromeのURLを書き換えて無効にするスクリプトを作成しようと3時間ほど格闘しましたが、結局できずでした。
スキル不足というのもありますが、ネット情報が陳腐化しているのか、ことごとくダメだったのがとても残念です。
本当にこの言語とはとことん相性が悪いです。生き馬の目を抜く商業主義の世界では技術革新が目まぐるしくて付いていくのも大変そうです。
ルールも何もGoogleの思惑次第ですから、何かしらの大きなメリットがないと積極的に取り組もうとは思わないですね。
スクレイピングでもそうですが、chromedriverを常に最新にしていないとPythonスクリプトが動かなくなるので日々のメンテが欠かせません。Googleと関わっていくのも手間がかかります。
扱い方によっては牧歌的にもなるC/C++の方が私には向いているのでしょう。次にJavaScriptを書くのはいつになることか。
JavaScriptについては気が向いたら書いてみるものの、満足に書けなくて悪態をついて去る、の繰り返しです。これまで学んできたPython、Java、C/C++などと違って全然スキルが積み上がっていかないのですから困ったものです。
まだ言語として体系的に把握できていないですし、そもそも体系的なのか疑問でもあります。なので書いていても地に足がつかない感じが半端ないです。
chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, tabs => {
const url = tabs[0].url
console.log("url: %s", url);
if (url.match(/&tag=/)) {
const urlSplits = url.split('&tag=');
location.replace(urlSplits[0]);
location.reload();
}
})
{
"name": "No Affiliate",
"description": "",
"version": "0.1",
"manifest_version": 3,
"content_scripts": [
{
"matches": ["https://*/"],
"js": ["noAffiliate.js"]
}
],
"permissions": [
"tabs"
]
}
#include <fstream>
#include <iostream>
#include <string>
std::ifstream inputfile;
string file = "test.txt";
string buffer;
inputfile.open(file, std::ios::in);
std::getline(inputfile, buffer);
--------------------------------------------------
// 複数行の場合
while(std::getline(inputfile, buffer)){
std::cout << buffer << std::endl;
}
WindowsPCとしてASRockのDeskMini B660を購入しました。
以前から使用していたDeskMini A300はLinuxPCになりました。
双方のCPU温度等を測定しましたので載せておきます。
A300はAthlon純正ファンとDeskMini同梱ファンが全く同じで風切り音がうるさいため、大きめのファンに換えています。さらにBIOSのCPUファン設定をSilent Modeにしてようやく普通に使えるといった感じです。CPUファンは4ピンでないと回転数制御ができないので要注意です。
B660の方はCPUがエントリーモデルのCore i3 12100ではあるものの、動画再生時62℃とやや高めです。Intel 第12世代はこれ以上のスペックは厳しいかもしれません。
Core i3 12100の純正CPUファンはケースにピッタリ収まるサイズで静音性も高く、この点についてはAMDを凌駕しています。そもそもAthlonではなくRyzenでしたら純正ファンはケースに入らないのではないでしょうか。
あと熱問題との兼ね合いになりますが、内蔵グラフィックス搭載モデルの多いIntel CPUの方がDeskMiniと相性が良さそうです。
ただ7nmプロセスルールであると優良誤認しかねないIntel 7(実際は10nm)という紛らわしい呼称はいただけないですね。
第12世代の形状が長方形になってレバーにかける力がかなり強くなったのも、もう少し何とかならなかったのかと思います。あまりに強いので、組み付けが悪かったのかと途中で何度か止めました。
[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]
[Linux PC, Ubuntu 22.04.1 LTS]
これまではMac mini内に仮想サーバを立てていましたが、telnetサーバを設定する方法がわからないため、LinuxPCにtelnetサーバを立てて接続してみました。
LinuxPCはネットとつながっているので、ファイアーウォールでMac miniのみtelnet用23番ポートに接続できるようにしました。
[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]
TCP/IPに関するプログラミング学習に必要な実験環境をこれまで構築してきましたが、大方完成と言っても良い感じになりましたので、図にまとめておきます。
FakeSMTPだけIntel Macなのが少々不便です。Postfixが仮想SMTPサーバとして使えるそうですが、MacOSにはデフォルトで入っていて/var/mailへの内部メール転送に使われているため、使い分けが可能なのか要確認です。
これまで調べたところ、やはりサーバはLinuxの情報が大半を占めると再認識しました。Dovecotの公式サイトは完全にLinux向けに書かれていて、MacOSでのインストール先が異なることに全く触れておらず、confファイルもMacOS仕様に修正すべき箇所があったりして都度読み替える必要があります。
Linuxからしばらく離れているうちにCentOS 8がすでにサポート終了しCentOS 7も24年6月でサポートが終わる予定で、これを受けて誕生したAlmaLinuxが急伸しているという状況になっていました。Linuxのディストリビューションはこれがあるから手を出しづらいところがあります。
TCP/IPについて理解が深まるにつれ仮想サーバではなくMac miniあたりで実サーバを組みたくなってきました。
手順は以下の通りです。
1.USBインストールメディアからubuntuを起動する。
2.ターミナルを起動する。
3.fdiskコマンドでディスク情報を確認する。
fdisk -l
4.以下のコマンドでisoファイルを作成する。保存先デバイスを必ずマウントすること。
# /dev/sda0のバックアップを/dev/sda1/backup.isoとして作成する場合
mount /dev/sda1 /mnt
sudo dd if=/dev/sda0 of=/mnt/backup.iso bs=1024k