MacのVNCサーバーをコマンドラインで起動

リモートマネジメント(画面共有)をコマンドラインで設定。

全ユーザーに全権限でアクサスを許可

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
    -configure -allowAccessFor -allUsers -privs -all

有効化

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
    -activate

ヘルプ

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
    -help
kickstart -- Quickly uninstall, install, activate, configure, and/or restart
             components of Apple Remote Desktop without a reboot.

kickstart -uninstall -files -settings -prefs

          -install -package <path>

          -deactivate
          -activate

          -configure -users <user1,user2...> 
            -access -on  -off 
            -privs  -all -none
                    -DeleteFiles                                                                     
                    -ControlObserve                                                                 
                    -TextMessages                                                                   
                    -ShowObserve                                                                     
                    -OpenQuitApps                                                                    
                    -GenerateReports                                                                 
                    -RestartShutDown                                                                 
                    -SendFiles                                                                            
                    -ChangeSettings                                                                  
                    -ObserveOnly    
                    -mask <mask>

            -allowAccessFor
                    -allUsers [-privs <priv options>]
                    -specifiedUsers

            -computerinfo -set1 -1 <text> 
                          -set2 -2 <text> 
                          -set3 -3 <text> 
                          -set4 -4 <text>

            -clientopts
              -setmenuextra -menuextra  yes
              -setdirlogins -dirlogins  yes
              -setreqperm   -reqperm    no
              -setvnclegacy -vnclegacy  yes
              -setvncpw     -vncpw      mynewpw
              -setwbem      -wbem       no

          -stop

          -restart -agent -console -menu

          -targetdisk <mountpoint>


          -verbose
          -quiet

          -help     ## Show verbose documentation

Examples:

- Uninstall program files (but not preferences and settings), install the given package, and then restart the service.
  kickstart -uninstall -files -install -package RD_Admin_Install.pkg -restart -console

- Install the given package and then restart the ARD agent.
  kickstart -install -package RD_Client_Install.pkg -restart -agent

- On 10.4 and earlier, stop the Remote Management service but, if activated, it will start after the next computer restart.
- On 10.5 and later, use kickstart -deactivate instead.
  kickstart -stop

- Stop the Remote Management service and deactivate it so it will not start after the next computer restart.
  kickstart -deactivate -stop 

- Restart the agent.
  kickstart -restart -agent -console

- Activate the Remote Management service and then restart the agent.
  kickstart -activate -restart -agent -console

- Activate the Remote Management service, enable access, and restart the agent.
  kickstart -activate -configure -access -on -restart -agent

- Disable user access.
  kickstart -configure -access -off

- Give admin and bob all access.
  kickstart -configure -access -on -privs -all -users admin,bob

- Use Directory Server accounts for authentication. Users must be a member of one of the ARD directory groups to authenticate.
  kickstart -configure -clientopts -setdirlogins -dirlogins yes

- Disable the Remote Management menu extra.
  kickstart -configure -clientopts -setmenuextra -menuextra no

The following examples are only for OS X 10.5 and later.

- Allow access for only these users (the users must be specified in a separate command).
  kickstart -configure -allowAccessFor -specifiedUsers

- Allow access for all users and give all users full access.
  kickstart -configure -allowAccessFor -allUsers -privs -all

- Start the Remote Management service.
  kickstart -activate

Version 0.9



RUNNING FROM THE COMMAND LINE

This script can be run like any UNIX tool from the command line or
called from another script.

Before starting:

- Use this script at your own risk.  Read it first and understand it.

- Log in as an administrator (you must have sudo privileges)

- Copy this script to any location you like (such as /usr/bin/local/)

- Ensure this file has Unix line endings, or it won't run.


Running:

- Run the script using "sudo" (enter your password if prompted)

      sudo ./kickstart -restart -agent


Command-line switches:

The optional "parent" switches activate the top level kickstart features:

-uninstall
-install
-deactivate 
-activate 
-configure 
-stop
-restart

These features can be selected independently, but will always be done
in the order shown above.

For anything interesting to happen, you *must* specify one or more of
the parent options, plus one or more child options for those that
require them.  Child options will be ignored unless their parent
option is also supplied.

All options are switches (they take no arguments), except for -package
<path> -users <userlist> and -mask <number>, as noted below.


-uninstall  ## Enable the "uninstall" options:

  -files    ## Uninstall all ARD-related files
  -settings ## Remove access privileges in System Preferences
  -prefs    ## Remove Remote Desktop administrator preferences


-install    ## Enable the "install" options:

  -package path ## Specify the path to an installer package to run


-configure  ## Enable the "configure" options:

  -users john,admin ## Specify users to set privs or access (default is all users)

  -activate ## Activate ARD agent in Sys Prefs to run at startup

  -deactivate ## Deactivate ARD agent in Sys Prefs to run at startup

  -access   ## Set access for users: 
    -on     ## Grant access
    -off    ## Deny  access

  -privs    ## Set the user's access privileges:
    -none               ## Disable all privileges for specified user
    -all                ## Grant all privileges (default)...
                        ## ... or grant any these privileges...
    -DeleteFiles        ##
    -ControlObserve     ## Control AND observe (unless ObserveOnly is also specified)
    -TextMessages       ## Send a text message
    -ShowObserve        ## Show client when being observed or controlled
    -OpenQuitApps       ## Open and quit aplicationns
    -GenerateReports    ## Generate reports (and search hard drive)
    -RestartShutDown    ##
    -SendFiles          ## Send *and/or* retrieve files
    -ChangeSettings     ## Change system settings
    -ObserveOnly        ## Modify ControlObserve option to allow Observe mode only

    -mask number        ## Specify "naprivs" mask numerically instead (advanced)

  -allowAccessFor ## Specify the Remote Management access mode
    -allUsers       ## Grant access to all local users
    -specifiedUsers ## Only grant access to users with privileges

  -computerinfo         ## Specify all four computer info fields (default for each is empty)
     -set1 -1 <text> 
     -set2 -2 <text> 
     -set3 -3 <text> 
     -set4 -4 <text>

  -clientopts           ## Allow specification of several opts.
     -setmenuextra -menuextra  yes|no        ## Set whether menu extra appears in menu bar
     -setdirlogins -dirlogins  yes|no        ## Set whether directory logins are allowed
     -setreqperm   -reqperm    yes|no        ## Allow VNC guests to request permission
     -setvnclegacy -vnclegacy  yes|no        ## Allow VNC Legacy password mode
     -setvncpw     -vncpw      mynewpw       ## Set VNC Legacy PW
     -setwbem      -wbem       yes|no        ## Allow incoming WBEM requests over IP        

-stop       ## Stop the agent and/or console program (N/A if targetdisk is not /)

-restart    ## Enable the "restart" options:         (N/A if targetdisk is not /)

  -agent    ## Restart the ARD Agent and helper
  -console  ## Restart the console application
  -menu     ## Restart the menu extra

-targetdisk ## Disk on which to operate, specified as a mountpoint in
            ## the current filesystem.  Defaults to the current boot volume: "/".
            ## NOTE: Disables the -restart options (does not affect currently
            ## running processes).

-verbose    ## Print (non-localizable) output from installer tool (if used)
-quiet      ## No feedback; just run.

-help       ## Print this extended help message

ARD has four main components:

1) ARD Helper
2) ARD Agent & associated daemons
3) ARD Menu Extra    (controlled by the SystemUIServer)
4) ARD Admin Console (if you have an Administrator license)


What this script does:

1) Any running ARD components will be stopped as needed.  For example,
   they'll be stopped before an uninstall, reinstall, or restart
   request.  They will not be restarted unless you specify the
   -restart options.

2) Components will be restarted as required.  For example, restarting
   the administrator console forces a restart of the agent.
   Restarting the agent, in turn, forces a restart of the helper.

3) If you -uninstall but don't specify a new installer to run, then
   the -restart family of switches will be ignored.

4) Options can be specified in any order, but remember that the
   options are ignored unless their parent options are specified.  For
   example, -package is ignored unless -install is specified.


RUNNING THIS SCRIPT FROM A GUI

You can make yourself a GUI-based kickstarter program to run this
script if you like.  The options, set in the console, can be conveyed
via environment variables to this script, per a spec shown in the
source code for this script (or the traditional way using command-line
switches).  Be sure the console application runs this script with sudo
privileges. The console should also specify its own location in the
APP environment variable, and may specify the location of a
STRINGS_FILE to use to load string definitions for any localizable
messages produced by this script.

A GUI console could stay up & running between runs of the script but
should avoid running multiple instances of this script at the same
time.



WARNING

This script can be used to grant very permissive incoming access
permissions.  Do not use the -activate and -configure features unless
you know exactly what you're doing.

try! Swiftで気になったセッション

https://www.tryswift.co/events/2018/tokyo/en/

調べてみたい

  • Meta programming系

    https://github.com/krzysztofzablocki/Sourcery
  • Final Tagless DSL
    https://bkase.github.io/slides/no-problemo/
  • SnapKit DSL – Recruitや多くのエンジニアが使っていた
    https://github.com/SnapKit/SnapKit

面白そう

  • SwiftNIO – Swift版Netty
  • Swiftでゲーム
    https://speakerdeck.com/giginet/-11
  • RxSpriteKit – Reactive版SpriteKit
    https://github.com/giginet/RxSpriteKit
  • SRCNNKit – NNで特徴的なデータを圧縮
  • Pivotal Tracker – ヤフオクが使っていたタスク管理ツール
    https://www.pivotaltracker.com/

macOS Spotlight 無効化

sudo mdutil -a -i off
sudo defaults write /.Spotlight-V100/VolumeConfiguration Exclusions -array "/Volumes"
sudo rm -rf /.Spotlight-V100/*

ソース:https://forums.macrumors.com/threads/disabling-spotlight-in-sierra.2075261/

上記でSpotlightがメモリ・ディスク・バッテリー消費しなくなった。
しかし一部のアプリケーションはSpotlightがないと動かないみたいなので、結局ホームディレクトリを除外することで落ち着いた。

ジブリ美術館のチケットを代理で購入

外国人に「ジブリ美術館のチケットを代理で購入してもらえないか」と聞かれた。(これで2回目)

チケットを頼まれる理由

ジブリ美術館のチケットの購入できる数は、海外と国内で別れている模様。

国内向けは毎月の10日に次の月のチケットが販売開始されるが、
海外向けのチケットはその前に売り切れてしまうらしい。

そのため、こちらにとってはまだ発売前なのだが、「チケットがもう売り切れだ、他に手に入れる手段がないか」と聞かれる。

購入時の注意点

ジブリ美術館のチケットには名前が印刷される。
転売を阻止するため、美術館に入場するときに入り口でチケット購入者の本人確認が行われるからだ。

公式サイトより引用:

購入者のお名前が券面に印字される記名式のチケットとなります。美術館入口にてチケット購入者の本人確認を行う場合がありますので、身分証明書(免許証、各種保健証、学生証、パスポート、マイナンバーカードのいずれか)をご持参くださるようお願いいたします。また、お連れの方は全員そろってご入場ください。

ローソンの販売機(ロッピー)でチケットを購入すると、チケットに印刷される名前は自由に編集でき、アルファベットも使える。
この名前は購入者で、複数枚購入するときは各チケットに同じ名前が記載される。
入場のときは購入者が自分の名前を証明するためにパスポートを持ってくる必要がある。

ローソンの販売機では電話番号も聞かれるが、日本の番号でないと駄目か分からないため、自分の番号を入力して買った。

お金の受取

日本では大人のチケットは1000円。
Paypalアカウントのメールアドレスを希望者に送り、チケットの金額と手数料を入金するように依頼した。
(Paypalは、残高を銀行に移すときに250円掛かる。)

チケットが海外でいくらで販売されているかわからないが、ものすごく喜んでいた。

LINE Payカードで総額100万円超える航空券を旅行会社で支払う

動機

航空券を支払う際、LINE Payカードを利用し、2%のポイントを取得すること。

結論から言うと、チャージ上限、決済上限が100万円のLINE Payカードでも、総額100万円を超える航空券を支払えた。
今回は新宿ルミネ1のJTBで、マネージャーっぽい人が担当してくれて、話が通じた。

ハードルは高めだが、例えば総額200万円だと20分位の手間で4万円(ポイント)もらえると考えると、悪くないかも知れない。

手順

  1. 店員に決済の全体の流れを説明する。(若い店員は嫌がる)
  2. 搭乗者の席や名前を指定して予約を普通に進める。
  3. 決済を何回かに分割するようにお願いする。
    (航空券1枚ずつ、2枚ずつ等、1回の決済が100万円以内になるように調整)
  4. セブンATMに行く→LINE Payカードをチャージ→旅行会社に行く→決済 を分割した回数繰り返す。
    (航空券の予約から支払いまでの期限は1日なので、同じ日に済ませる)

解説

同じ予約の搭乗者がそれぞれ自分のカードで支払うケースに旅行会社が対応している。
支払いは航空券ごと分割して別のカードや別の支払い方法が使える。

ただし、支払いを分割した上で毎回同じ人が払い、毎回同じカードを使うのは店員にとってかなり特別なケース。

現実

まずLINE Payカードみたいな、名義が氏名と異なるカード(名義は「LINE MEMBER」固定)は店員が慣れていないので使えるか確認に時間が掛かる。
JTBのシステムでは「LINE MEMBER」と入力して貰って使えた。

若い店員は支払いを航空券ごと分割できることを知らないので説明が必要。(電話で確認取っていた。)
更に分割して同じ人が支払うと言うと不審者を見る目で見られるので、「ポイントを貯めるため」とはっきり説明して説得する必要がある。

注意点

セブンATMで1回で入金できるのは50万円までだが、何回でも入金できるので実質問題無い。
他の入金方法だと制限があるので注意が必要。

セブンATMが遠いと大変なので、WEBでセブンATMの位置を確認した。
ちなみに新宿ルミネ1の6階にあるJTBは、ミロード3階のセブンATMが一番近い。

JTBだと1回の決済に5分位掛かった。電話でどの航空券を次に決済するか指定してから実行という流れだ。
この方法で決済する場合、決済の回数ごとに席を離れるので、比較的空いている朝の時間に訪れるのが良かった。

bash trap使うサンプル

trap中

#!/bin/bash -e

echo begin
trap 'echo trap exit' EXIT

echo processing
#sleep 3 # ターミナルでcontrol+C
#exit 1 # スクリプトをexit
#kill $$ # 自分のpidをkill
#false # -e オプション使用中に1の返り値

trap - EXIT
echo end

出力:

begin
processing
trap exit

trap解除後

#!/bin/bash -e

echo begin
trap 'echo trap exit' EXIT

echo processing

trap - EXIT

#sleep 3 # ターミナルでcontrol+C
#exit 1 # スクリプトをexit
#kill $$ # 自分のpidをkill
#false # -e オプション使用中に1の返り値

echo end

出力:

begin
processing

bash -e オプション

エラーコード(0以外のステータス)が発生した時にスクリプトを中断してくれる -e オプション。
中断しないケースを調べた。

中断しないケース

  • whileとuntilの直後のコマンドの場合
  • ifに使われている条件コマンドの場合
  • || や && リストに実行されるコマンドの場合、ただし最後のコマンドは除く
  • パイプラインの中のコマンドの場合、ただし最後のコマンドは除く
  • コマンドの結果を ! で反転している場合
  • サブシェルでエラーが発生したけど、その環境では-eを設定していない場合

エラーにたいするtrapが設定されている場合は、終わる前に実行される。

一部中断したくない場合の手段

||でコマンドを終わらせる

失敗した場合の処理又はtrueを追加する。
失敗コマンドのエラーコードは消えてしまう。

#!/bin/bash -e

false || true
echo $?
false || echo failed
echo $?
echo end

出力:

0
failed
0
end

&& trueでコマンドを終わらせる

何もしない && true で終わらせる。
失敗コマンドのエラーコードは取れる。

#!/bin/bash -e

false && true
echo $?
echo end

出力:

1
end

一時的に-eオプションを解除する

#!/bin/bash -e

set +e
false
set -e
echo end

出力:

end

参照

Bash Reference Manual (The Set Builtin) より引用:

Exit immediately if a pipeline (see Pipelines), which may consist of a single simple command (see Simple Commands), a list (see Lists), or a compound command (see Compound Commands) returns a non-zero status. The shell does not exit if the command that fails is part of the command list immediately following a while or until keyword, part of the test in an if statement, part of any command executed in a && or || list except the command following the final && or ||, any command in a pipeline but the last, or if the command’s return status is being inverted with !. If a compound command other than a subshell returns a non-zero status because a command failed while -e was being ignored, the shell does not exit. A trap on ERR, if set, is executed before the shell exits.

This option applies to the shell environment and each subshell environment separately (see Command Execution Environment), and may cause subshells to exit before executing all the commands in the subshell.

If a compound command or shell function executes in a context where -e is being ignored, none of the commands executed within the compound command or function body will be affected by the -e setting, even if -e is set and a command returns a failure status. If a compound command or shell function sets -e while executing in a context where -e is ignored, that setting will not have any effect until the compound command or the command containing the function call completes.

git でコミットの差分を適用

任意コミットの差分を適用

git cherry-pick --no-commit <commit1> #<commit2>...

オプション --no-commit(又は -n)を指定して任意コミットをチェリーピックすると、差分だけを適用できる。
(指定しないとコミットのコピーが現在のブランチにコミットされる)

例:


git cherry-pick --no-commit b61ae28116cfe5c4cc8bcc027e489fe40a5d1bff

マニュアルの説明:


git help cherry-pick
#...
       -n, --no-commit
           Usually the command automatically creates a sequence of commits.
           This flag applies the changes necessary to cherry-pick each named
           commit to your working tree and the index, without making any
           commit. In addition, when this option is used, your index does not
           have to match the HEAD commit. The cherry-pick is done against the
           beginning state of your index.

           This is useful when cherry-picking more than one commits' effect to
           your index in a row.

任意コミットのパッチの作成と適用

git diff <basecommit> <modifiedcommit> > patch.diff

git diff で差分のパッチを作成できる。
差分に入るファイルパスは、レポジトリのルートが基準になる。

patch -p0 < patch.diff

パッチファイルはレポジトリのルートで -p0 (=ファイルパスをそのまま守る)で適用すれば良い。

macOS でポップアップの選択肢をタブのキーで操作

設定

システム環境設定/キーボードショートカット タブにて、
フルキーボードアクセス の部分で すべてのコントロール を選択する。

操作方法

  • ポップアップやダイアログが出たら、タブでフォーカス(青い枠)を移動して、選択を決定する場合はスペースを使う。
  • デフォルト(下地が青)の項目で決定するときは、returnキーが使える。

Mac ターミナルのカスタマイズ

bash

設定ファイル:.bash_profile

alias ls='ls -G'
alias l='ls -la'

emacs

設定ファイル:.emacs

(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(case-fold-search t)
 '(global-font-lock-mode t nil (font-lock))
 '(show-paren-mode t nil (paren))
 '(transient-mark-mode t))
(custom-set-faces
  ;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 )

(setq make-backup-files nil)
(column-number-mode t)
(line-number-mode t)