Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

MX Linux 18 をインストールしてみた(日本語表示と日本語入力を可能に!)

DistroWatch.com: Put the fun back into computing. Use Linux, BSD.
時々、このサイトで人気のLinuxディストリビューションをチェックしているんですが、ここ最近で人気急上昇のディストリビュージョンが「MX Linux」。

数年間、不動の1位をキープしていたMintが3位に陥落。
半年間のチェックですと「Manjaro」が1位なんですが、3ヶ月間での順位は「MX Linux」が1位。

暫く、情報量の多いUbuntuやMintを安定して使っていたものの、これは試してみなければ!
噂によると、Googleの音声入力が問題なく動作するのが理由らしいですが、まずはインストールして使用感を試してみる事にしました。

ダウンロード

 ここからダウンロード。
 今回はThinkpad X220へのインストールを実施するので、64bit版を選択する。
 ISO download mirrors – MX Linux

インストール

 いつもならUnetBootinを使ってやるんですが、今回はEtcherを利用。
 balenaEtcher - Home
 USBメモリ(4GB)へisoを焼き込み。

 焼き込み完了後、USBメモリから起動。
 ※X220は、起動時にF12キーを押すことで、起動メディアを選択できる。

 無事に起動画面が表示される。
 この時にとても大切な事が!
 MX Linuxを起動する前に、F2キーで日本語を選択する事と、F3キーでタイムゾーンを東京にしておく事。
 
 F2キーとF3キーで、日本語と東京を選択後に起動。
 インストールの下りは、UbuntuやMintと同じで、USBメモリーから起動するとデスクトップに「Install」のアイコンがあります。

 MX Linuxのインストール情報をGoogleで調べながら行いましたが、紹介されている方法ではインストールできませんでした。
 引っかかったのは、ハードディスクのパーティション作成のくだり。
 きちんとパーティションを作らなければインストールが進みませんでした。
 ※120GBのSSDにインストールする為、10GB程度をswap領域として、残りの110GBをext4で「/」に。
 

日本語フォルダを英語に

 ターミナルを開き、下記のコマンドを入力すると、日本語のフォルダは残ったままになりますが、新たに英語のフォルダが作成されます。
 残った日本語のフォルダは、後で消しても大丈夫。

 LANG=C xdg-user-dirs-update --force

日本語表示情報のインストール

 左下にあるメニュー「MXツール」から「MXパッケージインストーラー」を起動。
 「Poplar Application」タブの一番下にある「Language」を開く。
  
 f:id:kamuycikap:20190217094558p:plain

 Mintを使っていた時に利用していたfcitxを選択。ibusは使いませんでした。
 ibus以外のすべてをチェックして、Installボタンをクリック

日本語入力システムのインストール

 表示の次は入力です。
 日本語入力もMXパッケージインストーラーからインストールします。
 

f:id:kamuycikap:20190217102133p:plain
fcitxの選択
 ※画像はすでにインストールした後にキャプチャしたのでグレーになっています。
 インストール後に再起動すると、日本語入力ができる状態になっています。
 
f:id:kamuycikap:20190217102504p:plain
画面左側にキーボードのアイコンが出現します。

Mozc辞書ツールのインストール

 ここまでで、日本語の入力はできるようになっているものの、単語登録などの機能が不足しています。
 これもMXパッケージインストーラーで簡単に導入可能です。

 

f:id:kamuycikap:20190406132300p:plain
Mozcの設定関連ツールをインストール

 ※画像はすでにインストールした後にキャプチャしたのでグレーになっています。

CapsLockキーをCtrlキーに

 これも、Linux使うならお約束!?でしょうか。
 Emacsを使う人には必須ですね。
 わかってみれば簡単なのですが、結構悩みました。

 まずは、お馴染みのコマンドをラップしたシェルスクリプトを作ります。
 場所は任意です。
 スクリプトの内容はこちら。
  ↓↓↓

 #!/bin/sh

 /usr/bin/setxkbmap -option "ctrl:nocaps"

 その後、MXメニューから「設定」→「セッションと起動」をクリック。
 表示されるウィンドウにて、「自動開始アプリケーション(タブ)」→「+追加」→「名前の入力(好きな名前)」→「説明の入力(適当)」→「コマンド(作成したシェルスクリプトを指定)」と進めます。

 コマンドの登録が無事に終了すると、自動開始アプリケーションの一覧に、登録したシェルスクリプトがあるはずです。
 パソコンをシャットダウンし、再び起動すると、CapslockキーがCtrlキーとして機能しています。

使用感

 ほんのちょっと使ってみただけではありますが、動作はキビキビ。
 個人的には標準ファイラーはMX Linuxの方が使いやすいと感じます。
 MXパッケージインストーラーも直感的で使いやすい。
 ちょっと試す感じでインストールしてみたんですが、暫く使ってみようかと思えるディストリビュージョンです。

Raspbery Pi3 起動時に任意のプログラムを実行

Raspberry Pi 3(RASPBIAN JESSIE)起動時にプログラム実行

jessie起動時に、自分が作ったプログラムを実行する方法。
jessie以前の方法と違っていた。

以下は、自分で作成した実行ファイルを設定しているけれど、シェルスクリプト等の実行ファイルなら何でもOK。

serviceファイルの作成

/etc/systemd/system
ここに、自動実行するための設定ファイルを作成する。
スーパーユーザーで作成。

以下は、実行ファイル「myexec」を実行するための設定ファイル。
実行ファイルは、/home/pi/systemdの中に作成していると仮定。
設定ファイル名は、仮にmyexec.serviceとする。

myexec.service
[Unit]
Description = myexec Service

[Service]
ExecStart=/home/pi/systemd/myexec
Type=simple

[Install]
WantedBy=multi-user.target

Serviceの再起動

$ sudo systemctl daemon-reload

Serviceの状態確認

サービスの起動状態を確認。
サービス名は、作成したサービスファイルから拡張子を外したものになる。

myexec.service → myexec

$ sudo systemctl status myexec

Serviceの開始確認

$ sudo systemctl start myexec

Serviceの停止確認

$ sudo systemctl stop myexec

Serviceの自動起動を設定

$ sudo systemctl enable myexec

Serviceの自動起動を無効化したい時

$ sudo systemctl disable myexec

Raspberry Pi3でCommon LispによるI2C通信

WiringPiライブラリをCommonLispから実行する

こう言うのをバインディングと呼ぶらしいです。
CommonLispにはCFFIと呼ばれる共通の仕組みが用意されていて、C言語で作成されたライブラリを利用できる仕組みが実現されています。

作成した回路

I2Cデバイスとして採用したのは、AdafruitのHT16K33を利用したLEDマトリクスです。
f:id:kamuycikap:20181028012659p:plain

WiringPiのCommonLisp

以下のkpri2c.lispとkmylogo.lispを作成し、kmylogo.lispを実行します。
実行環境は、ClozureCLで検証済み。

無事に実行が完了すると、実行ファイル「kmylogo」ができます。

kmylogo.lispのソースコメントにもありますが、ccl:save-application関数を全てコメントアウトすると、実行ファイルを作りません。
ccl:save-application関数直前にあるmain関数を実行することで、REPL上での実行となります。

kpri2c.lisp
;;;; I2C SPI Lib
(ql:quickload "cffi")


;; パッケージの作成
(defpackage :kpr-i2c
  (:use :common-lisp
        :common-lisp-user
        :cffi)
  (:export :wiring-pi-i2c-setup-interface
           :wiring-pi-i2c-setup
           :wiring-pi-i2c-read
           :wiring-pi-i2c-read8
           :wiring-pi-i2c-read16
           :wiring-pi-i2c-write
           :wiring-pi-i2c-write8
           :wiring-pi-i2c-write16))

(in-package :kpr-i2c)

;; wiringPiのバインディング
(define-foreign-library libwiringPi
  (:unix "libwiringPi.so"))

(use-foreign-library libwiringPi)

;;; C言語ヘッダファイル定義
;; #ifdef __cplusplus
;; extern "C" {
;; #endif

;; extern int wiringPiI2CSetupInterface (const char *device, int devId) ;
;; extern int wiringPiI2CSetup          (const int devId) ;

;; extern int wiringPiI2CRead           (int fd) ;
;; extern int wiringPiI2CReadReg8       (int fd, int reg) ;
;; extern int wiringPiI2CReadReg16      (int fd, int reg) ;

;; extern int wiringPiI2CWrite          (int fd, int data) ;
;; extern int wiringPiI2CWriteReg8      (int fd, int reg, int data) ;
;; extern int wiringPiI2CWriteReg16     (int fd, int reg, int data) ;


;; #ifdef __cplusplus
;; }
;; #endif


;; Core wiringPi functions I2C
(defcfun ("wiringPiI2CSetupInterface" wiring-pi-i2c-setup-interface) :int (device :pointer) (devId :int))
(defcfun ("wiringPiI2CSetup" wiring-pi-i2c-setup) :int (devId :int))

(defcfun ("wiringPiI2CRead" wiring-pi-i2c-read) :int (fd :int))
(defcfun ("wiringPiI2CReadReg8" wiring-pi-i2c-read8) :int (fd :int) (reg :int))
(defcfun ("wiringPiI2CReadReg16" wiring-pi-i2c-read16) :int (fd :int) (reg :int))

(defcfun ("wiringPiI2CWrite" wiring-pi-i2c-write) :int (fd :int) (data :int))
(defcfun ("wiringPiI2CWriteReg8" wiring-pi-i2c-write8) :int (fd :int) (reg :int) (data :int))
(defcfun ("wiringPiI2CWriteReg16" wiring-pi-i2c-write16) :int (fd :int) (reg :int) (data :int))
kmylogo.lisp
;;;;; I2C TEST (HT16K33)

;; ■HT16K33 DataSheet
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | Name                         | Address | Command(b0 ~ b7) | Option              | Description                                                 |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | Display data Address pointer |    0x00 | A3 A2 A1 A0      | {A0~A3} R/W         | Five bits of immediate data, bits A0 to A3,                 |
;; |                              |         |                  |                     | are transferred to the data pointer to define               |
;; |                              |         |                  |                     | one of sixteen display RAM addresses.                       |
;; |                              |         |                  |                     |                                                             |
;; |                              |         |                  |                     | If the Display data register address (An)                   |
;; |                              |         |                  |                     | is 0X00h ~ 0X0Fh, after reaching the                        |
;; |                              |         |                  |                     | memory location 0X0Fh, the pointer will                     |
;; |                              |         |                  |                     | reset to 0X00h                                              |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | System setup                 |    0x20 | X  X  X  S       | {S} Write           | Defines internal system oscillator on/off                   |
;; |                              |         |                  |                     | {0}:Turn off System oscillator (standby mode)               |
;; |                              |         |                  |                     | {1}:Turn on System oscillator (normaloperation mode)        |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | Key data Address pointer     |    0x40 | 0 K2 K1 K0       | {K0~K2} Read        | Three bits of immediate data, bits K0 to                    |
;; |                              |         |                  |                     | K2, are transferred to the data pointer to                  |
;; |                              |         |                  |                     | define one of six key data RAM addresses.                   |
;; |                              |         |                  |                     | It is strongly recommended that the key                     |
;; |                              |         |                  |                     | data RAM of address 0x40H~0x45H                             |
;; |                              |         |                  |                     | should be read continuously and in one                      |
;; |                              |         |                  |                     | operation, so the key data RAM of address                   |
;; |                              |         |                  |                     | should be started at 0x40H only.                            |
;; |                              |         |                  |                     |                                                             |
;; |                              |         |                  |                     | If the Key data register address (An) is                    |
;; |                              |         |                  |                     | 0X40h ~ 0X45h, after reaching the memory                    |
;; |                              |         |                  |                     | location 0X45h, the pointer will reset to                   |
;; |                              |         |                  |                     | 0X40h                                                       |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | INT flag Address pointer     |    0x60 | X X X X          | Read Only           | Defines the INT flag address, Read INT flag                 |
;; |                              |         |                  |                     | status.                                                     |
;; |                              |         |                  |                     | Interrupt flag signal output. When any key                  |
;; |                              |         |                  |                     |                                                             |
;; |                              |         |                  |                     | matrix key is pressed, after the completion of              |
;; |                              |         |                  |                     | two key scan cycles, this int flag bit goes to a            |
;; |                              |         |                  |                     | high level and remains at a high level until all            |
;; |                              |         |                  |                     | key data has been read                                      |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | Display setup                |    0x80 | X B1 B0 D        | {D} Write           | {D} -> Defines Display on/off status                        |
;; |                              |         |                  |                     | 0: Display off                                              |
;; |                              |         |                  |                     | 1: Display on                                               |
;; |                              |         |                  |                     |                                                             |
;; |                              |         |                  | {B0~B1} Write       | Defines the blinking frequency                              |
;; |                              |         |                  |                     | {B1,B0} <- bit pattern                                      |
;; |                              |         |                  |                     | {0,0} -> Blinking OFF                                       |
;; |                              |         |                  |                     | {0,1} -> 2Hz                                                |
;; |                              |         |                  |                     | {1,1} -> 1Hz                                                |
;; |                              |         |                  |                     | {1,1} -> 0.5Hz                                              |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | ROW/INT set                  |    0xA0 | X X Act Row/Int  | {Act Row/Int} Write | Defines INT/ROW output pin select and INT                   |
;; |                              |         |                  |                     | pin output active level status.                             |
;; |                              |         |                  |                     | {X 0}: INT/ROW output pin is set to ROW driver output       |
;; |                              |         |                  |                     | {0, 1}: INT/ROW output pin is set to INT output, activelow  |
;; |                              |         |                  |                     | {1, 1}: INT/ROW output pin is set to INT output, activehigh |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | Dimming set                  |    0xE0 | P3 P2 P1 P0      | {P0~P3} Write       | Defines the pulse width of ROW.                             |
;; |                              |         |                  |                     | {P0~P3}: 0x00~0x0F                                          |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|
;; | Test mode                    |    0xD9 | 1 0 0 1          | Write               | HOLTEK Use Only                                             |
;; |------------------------------+---------+------------------+---------------------+-------------------------------------------------------------|

(ql:quickload :cl-wiringpi2)
(load "kpri2c.lisp")

;; パッケージの作成
(defpackage :kpr-matrix
  (:use :common-lisp
        :common-lisp-user
        :cffi
        :kpr-i2c
        :wpi2)
;;  (:export :main))
  )

(in-package :kpr-matrix)

;; HT16K33 Command
(defconstant +i2c-address+ #x70)                  ; 対象のI2Cデバイスを選択
(defconstant +i2c-cms-data+ #x00)
(defconstant +i2c-cmd-sysset+ #x20)
(defconstant +i2c-cmd-blink+ #x80)
(defconstant +i2c-cmd-dimming+ #xE0)
(defconstant +i2c-cmd-outputsel+ #xA0)

;; HT16K33 RegSetup
(defconstant +i2c-sysset-osc-on+ #x01)

;; Display setup
(defconstant +i2c-blink-off+ #x00)
(defconstant +i2c-blink-display-on+ #x01)
(defconstant +i2c-blink-2hz+ #x02)
(defconstant +i2c-blink-1hz+ #x04)
(defconstant +i2c-blink-05hz+ #x06)

;; LED Data
(defparameter *char-pattern* nil)


(defparameter *toufu* '((#x00 #b11111111)                  ; 四角い枠。右上角から左下角に斜めの斜線
                        (#x02 #b10000011)
                        (#x04 #b10000101)
                        (#x06 #b10001001)
                        (#x08 #b10010001)
                        (#x0A #b10100001)
                        (#x0C #b11000001)
                        (#x0E #b11111111)
                        ))

(defparameter *invader1* '((#x00 #b00100100)                  ; インベーダーパターン1
                           (#x02 #b10100101)
                           (#x04 #b11111111)
                           (#x06 #b11011011)
                           (#x08 #b11111111)
                           (#x0A #b01111110)
                           (#x0C #b00100100)
                           (#x0E #b01000010)
                           ))


(defparameter *invader2* '((#x00 #b00100100)                  ; インベーダーパターン2
                           (#x02 #b00100100)
                           (#x04 #b01111110)
                           (#x06 #b11011011)
                           (#x08 #b11111111)
                           (#x0A #b11111111)
                           (#x0C #b10100101)
                           (#x0E #b00100100)
                           ))


(defparameter *squid1* '((#x00 #b00011000)                  ; 烏賊パターン1
                         (#x02 #b00111100)
                         (#x04 #b01111110)
                         (#x06 #b11011011)
                         (#x08 #b11111111)
                         (#x0A #b00100100)
                         (#x0C #b01011010)
                         (#x0E #b01000010)
                         ))


(defparameter *squid2* '((#x00 #b00011000)                  ; 烏賊パターン1
                         (#x02 #b00111100)
                         (#x04 #b01111110)
                         (#x06 #b11011011)
                         (#x08 #b11111111)
                         (#x0A #b00100100)
                         (#x0C #b01011010)
                         (#x0E #b10100101)
                         ))




(defun ht-cmd(fd cmd data)
    (wiring-pi-i2c-write fd (logior cmd data)))


;; HT16K33 Setup
(defun ht_init(fd)
  
  ;; HT16K33 初期値
  (ht-cmd fd +i2c-cmd-sysset+ #x01)              ; システムオシレータON
  (ht-cmd fd +i2c-cmd-blink+ #x01)               ; 点滅周期の設定
  (ht-cmd fd +i2c-cmd-dimming+ #x01)             ; LEDの明るさ設定
  )

;; LED Clear
(defun ht_clear(fd)
    (wiring-pi-i2c-write8 fd #x00 #x00)
    (wiring-pi-i2c-write8 fd #x02 #x00)
    (wiring-pi-i2c-write8 fd #x04 #x00)
    (wiring-pi-i2c-write8 fd #x06 #x00)
    (wiring-pi-i2c-write8 fd #x08 #x00)
    (wiring-pi-i2c-write8 fd #x0A #x00)
    (wiring-pi-i2c-write8 fd #x0C #x00)
    (wiring-pi-i2c-write8 fd #x0E #x00)
)

;; ビット反転(ネットから取ってきた)
(defun bit-reverse (n &optional (nbits (integer-length n)))
  (dotimes (i (ash nbits -1))
     (rotatef (ldb (byte 1 i) n)
              (ldb (byte 1 (- nbits i 1)) n)))
  n)

;; データをまとめて送信(list)
(defun ht_dataset_matrix(fd data-list)
    (mapcar #'(lambda(send-data)
                (ht_dataset fd (car send-data) (car (cdr send-data)))
                )
            data-list)
    )

;; HT16K33データ送信
    ;; A:1010 B:1011 C:1100 D:1101
    ;; Adafruitの8x8LEDマトリクスmini基板は、サイズを小さくするため配線が特殊になっている。
    ;; b0〜b7ビットのうち、b0〜b7を反転させなければならない。
    ;1111 1111 -> 1111 1111
    ;1011 1111 -> 1111 1110 : #xBF -> #xFE
    ;1101 1111 -> 1111 1101 : #xDF -> #xFD
(defun ht_dataset(fd line-add set-data)
  (let (
        b7                              ; 最上位ビット
        b0-b6                           ; b0〜b6
        )
    
;    (format t "INデータ:~8,b" set-data)
;    (princ #\Newline)
;    (format t "INデータHEX:~4,'0x" set-data)
;    (princ #\Newline)

    ;; 最上位ビットの取得
    (setf b7 (logand set-data #x80))    ; #b1000 0000 でマスクする。

    ;; b0〜b6ビットの取得
    (setf b0-b6 (logand set-data #x7F)) ; #b0111 1111 でマスクする。
    
;    (format t "最上位ビット:~b" b7)
;    (princ #\Newline)
;    (format t "リバース前:~8,'0b" b0-b6)
;    (princ #\Newline)

    ;; b0〜b6ビットの反転
;    (format t "リバース後:~8,'0b" (bit-reverse b0-b6 7))
;    (princ #\Newline)

;    (format t "書き込みデータ:~b" (logior b7 (bit-reverse b0-b6 7)))
;    (princ #\Newline)
;    (format t "HEX:~2,'0x" (logior b7 (bit-reverse b0-b6 7)))
;    (princ #\Newline)

    ;; HT16K33へデータ書き込み
    (wiring-pi-i2c-write8 fd line-add (logior b7 (bit-reverse b0-b6 7)))
  ))

(defparameter *dbg-fd* nil)                ; Debug用
(defparameter *fd* nil)
(defparameter *dbg* nil)

(defun main()
  (let (
        (fd)
        )

    ;; I2Cシステムの初期化
    (setf fd (wiring-pi-i2c-setup +i2c-address+))
    (setf *fd* fd)
    
    ;; HT16K33 Setup
    (ht_init fd)

    ;; LED All OFF
    (ht_clear fd)

    ;; Send Data
    (setf *char-pattern* (cons *invader2* *char-pattern*))
    (setf *char-pattern* (cons *invader1* *char-pattern*))
    (setf *char-pattern* (cons *invader2* *char-pattern*))
    (setf *char-pattern* (cons *invader1* *char-pattern*))
    (setf *char-pattern* (cons *squid2* *char-pattern*))
    (setf *char-pattern* (cons *squid1* *char-pattern*))
    (setf *char-pattern* (cons *squid2* *char-pattern*))
    (setf *char-pattern* (cons *squid1* *char-pattern*))


    (loop
    (mapcar #'(lambda(led-char)
                (ht_dataset_matrix fd led-char)
                (delay 700)
                )
            *char-pattern*)
       )



    ))

;; このコメントを外せばREPL上で実行
;;(main)

;; main関数を起点として実行ファイルを作成
(ccl:save-application "kmylogo"
                      :toplevel-function #'main        ; トップレベルをmainに
                      :prepend-kernel t)

STM32のStandard Peripheral Libraryヘルプ

ARMコアでよく使われるようになったと言われているSTマイクロ社のSTM32シリーズ。
先日、Coretex-4と呼ばれるタイプのCPUが搭載されているテストボード「STM32F401RE」を手に入れました。

自身の勉強のために、用意されたmbedではなく、CPUの内部構造をある程度理解しながらレジスタを操作したいなーと思い、STマイクロが提供してくれているC言語用のライブラリ「Standard Peripheral Library」を使って遊んでいるのですが、まとまった情報がなく、先人たちのブログを右往左往しておりました。
※現在、STマイクロはHALと呼ばれるライブラリの利用を推奨しているとの事ですが、SPLとHALで宗教戦争のようなものもあるらしく・・・
 とりあえず、SPLから学んでみようかと。

右往左往していたところ、STマイクロの本家サイトにヘルプファイルが準備されていました!
なかなか気付かずに、結構な時間を費やしてしまった。
購入した基板のCPUに対応したSPLもあるみたいなので、早速ダウンロード。
今後発表されるCPUに対応するSPLは開発しないとかなんとか・・・そんな情報もありますが、実際の所どうなるかはわからないので、両方勉強しても害は無いでしょう。

1.STマイクロにある、マニュアルダウンロードページを表示
https://my.st.com/content/my_st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32065.license=1535645305946.html

2.ページの一番下にあるリンクをクリックしてファイルをダウンロード
「STSW-STM32065」のDownloadボタンをクリック。
※ダウンロードしたzipファイルには、沢山のサンプルも含まれており、メジャーな開発環境(IDE)へのインポート方法も記載されています。(すばらしい!)



優良アダルトサイト紹介の最終形態!!MaxInfo

LinuxMint18(MATE)にKiCADをインストール

Eagleを使っていたんですけれど、話題のKiCADに浮気してみようかなと思い、インストールだけ。
特に難しい話ではないんですが、メモとして残します。

本家からインストールしたりあれこれ試しましたが・・・・・
そんな必要は何もありませんでした。

「ソフトウェアの管理」からKiCADを検索し、必要なプログラムをインストールするだけでOKです。
ヘルプファイルとかサンプルとか様々あります。

何事もなくインストールは完了し、メニューの「プログラミング」グループに追加されていました。
KiCADのマニュアルも日本語化され、書籍も販売されている様子ですので、このタイミングで勉強してみても損はなさそうです。
Eagle(無料版)よりも大きな基板の設計できますしね。


優良アダルトサイト紹介の最終形態!!MaxInfo

NeogeoMiniのアケコン工作(スティック部)

Youtubeでとても面白い動画を発見しました。
NeogeoMiniで使えるアーケードコントローラーを作る企画ですね。

【NEOGEO miniアケコン化のやり方①】純正PAD分解・仕組み解説~アーケードコントローラー分解 - YouTube
【NEOGEO miniアケコン化のやり方②】純正PAD乗っ取り開始!ボタン基盤端子と配線はんだ付け - YouTube
【NEOGEO miniアケコン化のやり方③】スティック乗っ取り成功!・・・と思ったら怪動作暴走 - YouTube
【NEOGEO miniアケコン化のやり方④】マスターたすけて!電子パーツショップへ来店 - YouTube
【NEOGEO miniアケコン化のやり方⑤】ついに完結!コレを見れば君もアケコン化できるさ! - YouTube

電子工作を楽しみながらやっていた頃を懐かしく思い出しました。
動画に声と手で出演していらっしゃる奥様がかなり優秀です!

動画を拝見し、苦労しておられる十字スティック部分の回路を予想してみました。
実物を持っていないので確証はありませんが、参考になれば幸いです。

試行錯誤の結果、奥様はスティック側の基板の共通パターンをカッターでぶった切ってしまった様子ですが、切らなくとも動作できるのではないかと思っております。

おそらく、アナログ部分の可変抵抗と思われる部品の取り外しの必要はなく、配線に含めた抵抗も必要ありません。
その根拠は、一番最初の動画で、精密ドライバーで導通するだけでボタンの反応がありますから、アナログ回路じゃなくても動作するはずなのです。
さらに、ドライバーで導通させている「上下」と「左右」のピン配置を見ると、それぞれ真ん中のピンが共通になっています。
おそらく、グランドではないかと想像しました。

f:id:kamuycikap:20180823060203j:plain


優良アダルトサイト紹介の最終形態!!MaxInfo

LinuxMint18(MATE)でBrotherのDCP-J973Nをネットワークプリンタとして使う

LinuxMint18でBrotherのDCP-J973が利用できるかチャレンジ。

1)ブラザーのサイトからドライバーをダウンロードしてインストール。
  brscan4-0.4.4-4.i386.deb
  brscan-skey-0.2.4-1.i386.deb
  dcpj973npdrv-1.0.2-0.i386.deb

2)「メニュー」→「コントロールセンター」→「印刷設定」を開くと、「DCPJ973N」のアイコンは表示されている

3)テストプリントをしてみても、ステータスモニターでは「処理中」になりそのまま。

4)プリンターのプロパティを開くと、「プリンターの状態」が、「処理中 - プリンターが使用可能になるのを待っています」となっている。


結果を先に書くと、上記の手順でインストールされたのは、USB接続用のドライバ設定でした。
試行錯誤しましたが、結果下記の手順で無事に印刷できました。

  ↓↓↓↓↓

プリンタードライバのダウンロード

ダウンロードサイト
ソフトウェアダウンロード | DCP-J973N-B/W | 日本 | ブラザー

ここから、Linux用のドライバをダウンロード。
私のPCは32bitなので、32bit向けのドライバーをダウンロードしました。

f:id:kamuycikap:20180726144512p:plain
ダウンロードするOSとタイプを選択

f:id:kamuycikap:20180726144849p:plain
ドライバーを選択

f:id:kamuycikap:20180726145059p:plain
ダウンロードしたファイル

スキャナーが利用できるツールとドライバーもダウンロード

プリンタドライバ-のインストール

debパッケージなので、ダブルクリックするだけでインストールできます。(勿論ですが、管理者権限ユーザーのパスワードが必要です)

CUPSの設定

ブラウザを起動し、アドレスバーに下記のURLを入力
http://localhost:631/

f:id:kamuycikap:20180726150045p:plain
caps管理画面

表示された画面で、「管理」タブ → 「プリンターの追加」ボタン → 「発見されたネットワークプリンター」でBrother DCP-J973N (Brother DCP-J973N)を選択

f:id:kamuycikap:20180726150509p:plain
プリンターの選択

あとは、ウィザードに従ってそのまま続けるだけでOK。
何も変更しなければ、「Brother DCP-j973N」というプリンターが追加されるはずです。

プリンターを確認

メニューから「システム管理」 → 「プリンター」とクリックし、プリンターの一覧を表示します。
すると、「Brother DCP-j973N」が一覧に表示されているはずです。

f:id:kamuycikap:20180726151417p:plain
プリンタ設定
※一覧にDCPj973Nのアイコンがある場合、それはUSB接続用プリンタの可能性が高いです。(プロパティでデバイスURIを確認するとわかります)

Brother DCP-j973Nのアイコンを右クリック → プロパティ と操作し、テストページの印字ボタンで動作すれば正解です。


優良アダルトサイト紹介の最終形態!!MaxInfo