2016年2月14日日曜日

息子の学校から手紙が来たけど一読してまるで解読できなかったので辞書見ながら解読したよ!

息子が通ってる英語の学校「The CAMFIRST SCHOOL」からお手紙が来ました。
この学校は、インターっていうより、英語の学校です。
うちから徒歩3分ととても近いし、地に足が着いた方々がかよっているので、全人的教育という意味で非常に気に入っております。
英語以外の科目については、ホームスクーリング状態です。
それについてはまた稿をあらためます。

さて、このお手紙なんですが、上半分と下半分で内容が分かれており、上半分は学費払えということでとてもわかりやすいんですが、下半分が、さらっと一読しただけでは、お恥ずかしい話、まったく意味がわかりませんでした。
これは「はぁ? 意味わかんない」とか日本のJKが言うアレではなくて、純粋に、文字どおり、私のクメール語力不足で、解読できなかったのです。

そこで、日曜の夜をちょっと時間割いて、辞書ひきひき、解読に挑むことにしました。

2015年10月6日火曜日

FrameMakerスクリプトでFMObjectをTextFrameへ「キャスト」する

ニッチすぎて99.9999%の方には何言ってるか意味不明と思うが、スクリプティングガイドにもネット上にもまったく記述がなくあれこれ試行錯誤して2時間ほどハマったので吐き出したい。

FrameMaker 10のスクリプトで(whileループ内にいると思いねえ)、

2015年7月28日火曜日

node.jsからどうしてもFTPアクティブ接続がしたい貴方に

 私もそんな少数派の一人であります。
 なぜなら接続先がパッシブ接続を受け付けてくれないからであります(ちゃんと構成してくれよ…)。

 そもそもnode.jsとか以前に、アクティブ接続をするからには、FTPサーバからのデータコネクションを受け入れるポートが開いてないといけません。
 ポート決め打ちせずFTP接続モジュールだけ特別扱いする方法もあるのですが、安易にiptablesの、SSHとかHTTPを許可してる行に寄り添う場所に
# accept FTP
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8686    -j ACCEPT
を追加いたしました。こんなんでマジいいのか?

※実際追加したポート番号は8686ではなくいちおう内緒ですので8686をアタックしてこないようお願いいたします。



 さてnode.jsにはアクティブ接続をしてくれるFTPクライアントがありません。jsftpもftpも残念ながらパッシブ接続しかできないのです。

 そこでlftpをchild_process.execから利用ということになります。command引数は、たとえばls情報がほしい場合は

'lftp -e "set ftp:ssl-allow off;set ftp:passive-mode off;set ftp:auto-passive-mode no;set ftp:port-range 8686-8686;recls -1B nanika/path;exit;" -u oresama,oresamapass 123.456.789.012'

という感じになります。
 こうするとexecのコールバックのstdout引数にファイル・ディレクトリ一覧が改行区切りで入ってきます。
 パッシブとかSSLに絶対ならないようこれでもかと設定しています。これらのうちどれかの設定は省けるかもしれませんが面倒なので試していません。
 FTPクライアントからFTPサーバに通知するデータコネクション受け入れポートをつねに、さっきiptablesで穴開けた8686番一択に固定しています。こんなことしてFTP標準的には許されるんでしょうか、よく知りません。

 まぁ動いているのでとりあえずいいかとしておきますが、そんなんヤベーよというお教えお待ちしております。

※ちなみにreclsの-Dはなぜか動作しませんでした(--長い名前のほうも)。


2015年7月24日金曜日

ハッキングのリスクを減らしたいなら、これらのアカウント名は作るな!

 毎日、ウチのVPSサーバへいらした悪いひとが、ウチをハッキングするために、ウチに存在するかどうかいろんなUNIXアカウントを試しています。

 その様子はログに残ります。

 ご参考までに、昨日1日のうちに試されたアカウントの一覧は、以下のとおりです:


webmaster

baseball

backup

backuppc

badmin

bank

billing

biblioteca

blink

blog

bo

boffice

book

box

business

buster

cache

captured

captures

ceo

checkin

checkout

chief

clamav

clerk

client

communication

com

couple

couples

comercial

company

contact

computer

contactus

controller

corp

customer

cv

cvsuser

curl

databank

debug

default

desk

device

dialer

dir

direction

director

dns

doctor

admin

admin01

accounts

administrator

communications

display

postmaster

support

service

spam

contakt

sales

exit

education

fax

formation

general

sample

sales01

sales1

score

scores

scan

scanner

school

send

setting

settings

hr

info

intern

inventory

monitor

newsletter

office

reception

user01

user1

webadmin

test01

direction

client

test

administration

record

vscan

transfer

tomcat

backoffice

backupexec

bkupexec

canon

admin123

admin12345

admin1

administrate

kontakt

advanced

account

accounting

accouting

user

user2

agent

video

sekretariat

secretaria

webmaster

baseball

backup

backuppc

badmin

bank

billing


 たまに、なんでこんなアカウント名がありがちと思われてるんだろう、というアカウント名もありますが、きっと、私などには計り知れない理由により、ありがちなのでしょう。

 「baseball」とか意味わかりませんが、野球好きのユーザーがこういうアカウントにしやすいということなのでしょうか。

 いずれにせよ、ハッキングされるリスクを少しでも減らすためには、できれば、これらのアカウント名は避けておくのが賢明な気がします。

2015年7月21日火曜日

Drupalで新記事登録とか何か起きたらSlackへ自動通知

 Rules HTTP ClientというDrupalモジュールがありますので、これをオレオレDrupal環境にインストールすればいいのですが(7.x-1.0-beta1)、設定に癖があり、ややハマったのち成功したので備忘録。

 いろいろなルートがありえるわけですが、今回はとりあえずマイクテストてすてすって感じで、最もベーシックな方法といえるSlack本体のIncoming WebHooksを使うことにしまして、まず、投稿先チャンネル/ダイレクトメッセージ先/プライベートグループのWebhook URL(https://hooks.slack.com/services/ ではじまる)を取得しておきます。

 しかるのち、

  1. DrupalRulesで新しいルールを追加。
  2. 何かイベントを登録します。(例)新しいコンテンツを保存後 of タイプ お仕事
  3. それに対するアクションを登録し、種類を「Request HTTP data」(Rules HTTP Clientをインストールしたことによってこの選択肢が増えています)とします。
  4. このアクションの設定画面に以下のように記入します:
  • URL->Value: Slackから取得したWebhook URL
  • HEADERS->Value: Content-Type:application/x-www-form-urlencoded ※ここ重要ッス。自明のように思えますが、これを指定してやらないと、エラーが出て、アクションが引き起こされません。
  • METHOD->Value: POST
  • DATA->Value: payload=Slackへ送りたいJSON (例)payload={"text": "お仕事が登録されました: [node:url]"} ※Content-Type:application/jsonとしてここのpayload=を省いて生JSONにしてみましたが動作しませんでした。

とすれば動作します。

 上の例ではプレーンテキストを投稿しているだけですが、もっとリッチなテキストにする方法や、Slackのアバターや投稿先オーバライドなどの指定方法も、Incoming WebHooksの設定画面で具体的に記されていますので、必要に応じてJSON内で指定すればOKです。