2019年6月22日 星期六

macOS Mojave 安裝軟體無法在系統偏好設定/隱私權/輔助使用 新增或勾選項目

問題描述:macOS Mojave 安裝軟體無法在系統偏好設定/隱私權/輔助使用 新增或勾選項目。輔助使用的清單應該會有許多項目,但是會一個都沒有,而且也無法以[+]新增。

英文描述:macOS Mojave - System Preference, Security & Privacy, Accessibility - Not Working/Empty

解決方式:
這個問題,在中文世界裡還沒有找到有說明,所以把我在英文版的資料重點整理如下。主要原因是因為安裝了防毒軟體,例如:ESET 或 Symantec...等。
隱私權/輔助使用的設定檔案是,
/Library/Application\ Support/com.apple.TCC/TCC.db
但是被防毒軟體防護無法變更設定,所以要把這個檔案列在防毒軟體的排除清單。
再重新開機一次,就可以變更隱私權/輔助使用的設定。

2019年4月21日 星期日

macOSX 10.14 Mojave 無法安裝inkscape問題的解決紀錄


今天為了安裝Inkscape在新版的macOS 10.14系統之上,發生了一些問題。下面是解決安裝問題的過程摘要。


$ sudo port install inkscape
Warning: MacPorts is configured to use an unsigned source for the ports tree. Please edit sources.conf and change 'rsync://rsync.macports.org/release/ports/' to 'rsync://rsync.macports.org/release/tarballs/ports.tar'.
Warning: MacPorts is configured to use an unsigned source for selfupdate. Please edit macports.conf and change the rsync_dir setting to match macports.conf.default.
--->  Computing dependencies for inkscape
.
.
.
.
 popt
 potrace
 py27-cython
 py27-lxml
 py27-nose
 py27-numpy
 texinfo
 urw-fonts
 webp
 xar
Continue? [Y/n]: 
--->  Configuring ghostscript
Error: Failed to configure ghostscript: autoreconf failure: command execution failed
Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_print_ghostscript/ghostscript/main.log for details.
Error: Follow https://guide.macports.org/#project.tickets to report a bug.

Error: Processing of port inkscape failed


首先確認是否安裝
  xcode-select --install
再來確認是否有確認過xcode的license
  sudo xcodebuild -license
一直出現錯誤情況,先針對ghostscript的安裝,詳細觀察安裝過程:
port clean ghostscript
port -d -v install ghostscript
發現問題出在gmp的安裝,再進一步追踪安裝gmp,發現要先安裝m4,才順利安裝gmp。
sudo port install m4
sudo port load dbus
sudo port clean gmp
sudo port install gmp
sudo port -f activate gmp
最後才順利安裝inkscape。

2018年3月6日 星期二

關於及arduino的一些瑣碎小事

  • 使用arduino IDE的範例程式Fade, 使用D13作為LED。
    • arduino nano只會顯示亮暗, 沒有漸進變化過程
    • arduino micro能以on-board LED顯示漸亮漸暗
    • 原因分析:
      nano 的 D13 不支援PWM
      micro 的 D13支援PWM
  • arduino接上ubs電源時, on-board LED 一直快速閃爍, 線路連接的電子零件沒有通電運作
    • 這是透過USB供電時, 短路防護的信號
    • 但要留意, 若是透過RAW供電時, 則沒有短路防護。
  • 使用Serial.printf("%4.2f", floatVar) 得到結果為 ?
    • 原因分析:
      arduino IDE只支援C語法, 但是不支援float的格式語法, 必須另外寫程式來格式化輸出
    • 我的解決方法: (可以放在setup段來測試)
        Serial.begin(9600);
        //sprintf format test loop
        float celsius=-55.25;
        float fahrenheit;
        while(celsius<=155){
       
          fahrenheit = celsius * 1.8 + 32.0;
          Serial.print(celsius);Serial.print(" ");
          Serial.print(fahrenheit);Serial.print("  ");

          char *numC=(char *)"000.00C ";
          char *numF=(char *)"000.00F ";
          //arduino的printf format不支援float, double的格式, ex: %4.2f , 輸出會出現?
          //Serial.printf("%4.2fC  %4.2fF", celsius, fahrenheit);
          sprintf(numC, "%4i.%02i", int(celsius), int(abs(celsius-int(celsius))*100));
          sprintf(numF, "%4i.%02i", int(fahrenheit), int(abs(fahrenheit-int(fahrenheit))*100));
          Serial.print(numC);Serial.print(" ");Serial.print(numF);Serial.println(" ");
          celsius+=3.97;
        }
       
  • 在LCD上, 以單一字元顯示 ℃ 或 ℉
    • 定義℃ 或℉ 符號
    • 在LCD上印出自定符號
    • //在程式宣告段
      byte degC[8] = {
        B01000,
        B10100,
        B01000,
        B00011,
        B00100,
        B00100,
        B00011,
      };
      byte degF[8] = {
        B01000,
        B10100,
        B01000,
        B00111,
        B00100,
        B00111,
        B00100,
      };

      //在setup()段,
        lcd.createChar(0, degC);
        lcd.createChar(1, degF);

      //要印出字元時
      lcd.write(byte(0));  //印出 ℃
      lcd.write(byte(1));  //印出 ℉

2017年6月13日 星期二

GPS以uart與樹莓派Raspberry Pi 3連接使用紀錄

使用材料:
  1. 樹莓派Raspberry Pi 3 (以下簡稱為RasPi3)
  2. GPS Receiver - LS20031 5Hz (66 Channel),
    https://www.sparkfun.com/products/8975 
    1. 預先焊接針腳, 使用4條雙母杜邦線與樹莓派連接
      可參閱SparkFun網頁上的Connection Tutorial
    2. 留意GPS模組使用電壓3.3V
    3. GPS模組的TX連接到RasPi3的GPIO Pin10(RXD)、
      RX連接到RasPi3的GPIO Pin8(TXD)。
      詳細的RasPi3 GPIO針腳定義請參閱: https://pinout.xyz/#

樹莓派的作業系統, 我是以AiGO 2017 v1為架構, 再新增軟體套件
$ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get install build-essential gpsd gpsd-clients python-gps joe
$ sudo reboot



其中joe是我個人在linux系統下慣用的文字編輯器, 作業系統內建有nano 或 vi可以使用。

針對GPS使用RasPi3的UART連線, 作業系統要新增設定/boot/config.txt,
$ sudo joe /boot/config.txt
在文件的最後一行加入
enable_uart=1
存檔後, 重新開機
$ sudo reboot 

在RaspPi3的系統中, 是以/dev/ttyAMA0與 UART0連線的, 所以啟動gpsd時, 要指向這個裝置

$ sudo gpsd /dev/ttyAMA0 -n -F /var/run/gpsd.sock
$ cgps  -s


參考網頁都是像上面寫的指令一樣, 但是我一直無法在cgps中看到gps傳資料進來, 因此我執行cgps時, 不加-s參數, 可以監視GPS模組的訊息是否傳入。
後來發來gpsd有一支程式gpscat, 也可以直接讀取gps模組傳入的訊息, 使用方式如下:
$ gpscat -s 57600 /dev/ttyAMA0
其中 -s 57600是傳輸速率(baud rate), 我試過57600 bps是這款gps模組的上限。

令我疑惑的是, 若我沒有執行 "gpscat -s 57600 /dev/ttyAMA0" 則 cgps 無法正常讀取GPS模組的訊息, 因此我推論是沒有設定 /dev/ttyAMA0 的傳輸速率所致。
最後在gpsd的faq網頁中, 查到可以使用 "stty speed 57600 < /dev/ttyAMA0" 來設定傳輸速率。其餘的執行程序如下:
sudo systemctl stop gpsd.socket
sudo systemctl disable gpsd.socket
sudo systemctl stop serial-getty@ttyAMA0.service
sudo systemctl disable serial-getty@ttyAMA0.service
sudo killall gpsd
stty speed 57600 < /dev/ttyAMA0

sudo gpsd -n /dev/ttyAMA0 -F /var/run/gpsd.sock
cgps

終於可以從 cgps 讀到GPS模組的定位資訊。
lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqklqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x    Time:       2017-06-12T15:52:14.000Z   xxPRN:   Elev:  Azim:  SNR:  Used: x
x    Latitude:    24.XXXXXX N               xx 193    66    048    26      Y   x
x    Longitude:  120.XXXXXX E               xx  15    63    277    00      N   x
x    Altitude:   167.7 ft                   xx  13    62    019    33      Y   x
x    Speed:      0.5 mph                    xx 129    54    138    26      N   x
x    Heading:    192.6 deg (true)           xx  20    50    343    23      N   x
x    Climb:      0.0 ft/min                 xx   5    40    056    39      Y   x
x    Status:     3D FIX (266 secs)          xx   2    39    141    24      Y   x
x    Longitude Err:   +/- 46 ft             xx  29    36    254    19      Y   x
x    Latitude Err:    +/- 67 ft             xx  24    27    182    00      N   x
x    Altitude Err:    +/- 73 ft             xx  21    17    320    15      N   x
x    Course Err:      n/a                   xx  30    10    044    00      N   x
x    Speed Err:       +/- 92 mph            xx  18    03    290    00      N   x
x    Time offset:     -872.718              xx                                 x
x    Grid Square:     PL04gc                xx                                 x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj



參考資料
  1. https://medium.com/@phutidus/%E7%94%A8-raspberry-pi-gps-%E6%A8%A1%E7%B5%84%E5%BB%BA%E7%AB%8B-stratum-1-%E7%9A%84-ntp-server-cb1b501a5f91 
  2. http://www.catb.org/gpsd/faq.html
  3. http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3
  4. https://learn.adafruit.com/adafruit-ultimate-gps-on-the-raspberry-pi/using-uart-instead-of-usb 

2015年11月13日 星期五

幫Time Capsule (Apple)更換新硬碟

幫Time Capsule (Apple)更換新硬碟

上一回幫自己的Time Capsule更換新硬碟, 好像沒留下任何記錄, 昨天第2次更換Time Capsule的硬碟, 把過程紀下來。以下步驟只是個人的過程紀錄, 僅供網友們參考, 實際更換步驟, 請自行斟酌, 恕不負任何責任。

  1. 先將Time Capsule的設定備份到電腦端, 以免更換後設定被清除掉...
  2. 關閉所有電腦端的Time Machine的還原機制。
  3. 關閉Time Capsule電源, 其實就只是移除電源線和網路線。
  4. 拆開Time Capsule, 取出舊硬碟, 更換新硬碟。(請自行參閱:Apple Time Capsule Model A1302 Hard Drive Replacement- https://www.ifixit.com/Guide/Apple+Time+Capsule+Model+A1302+Hard+Drive+Replacement/2750)
  5. Time Capsule重新開機, 由AirPort工具程式進入Time Capsule系統, 將新硬碟清除(重新格式化), 設定好磁碟名稱和檔案共享。
  6. Time Capsule會將硬碟分割成3個磁區: APconfig、APswap(前2個為系統內部用的, 不用理會)和資料分割區(名稱是在Time Capsule磁碟中設定的)。我們只需要將資料分割區, 由舊硬碟複製到新硬碟。
  7. 將舊硬碟複製到新硬碟中, 有兩種方法:
    1. 將舊硬碟以外接盒與電腦連接, 透過網路(會很慢), 將檔案複製到Time Capsule的新硬碟中。我這次是因為手上沒有可以讀取4TB硬碟的外接盒或外接線, 因此用這個方法, 將近2TB的資料透過Giga bits網路傳輸花了1天多的時間複製資料。
    2. 我想還有另外一個更快的方法: 關閉Time Capsule電源, 取出新硬碟, 將這兩顆硬碟分別接上外接盒。舊硬碟有3個分割區, 我們只需要將資料分割區的所有檔案, 由舊硬碟複製到新硬碟。
    3. 但上述的2個方法, 無論是那一種, 若硬碟中有Time Machine的電腦備份檔案, 則須留意複製的方法, 請參閱:ime Machine:如何將備份檔從目前的備份磁碟傳送到新的備份磁碟- https://support.apple.com/zh-tw/HT202380