The Nameless City

何故か製薬やSAS関連のブログ、の予定。

SAS on Linuxで気をつける事。

SASLinux版もありますが。
というか、SASってWindows版後から出してた印象なので、むしろWindows対応に四苦八苦してた気が。

どのLinuxでも載るという訳ではありません。

ええと、SAS Analytics UだったかはVM入れさせるのであんまり関係ないのですが、素でLinux版を入れる場合には気をつけてください。
RPM使うやつしか対応してません。公式には、RHELOracle LinuxSUSEのEnterprise版だったかと思います。
CENT OSは試しに入れられるのを確認した事はありますが、Scientific Linuxとかはやってない。OpenSUSEは試した。
何が違うって、ライブラリの名前とかが変わったり、インストール時にOSチェックしているところでコケました。
Linux版では幾つか先に入れとくべきモジュールがありますのでインストールマニュアル読んだ方がいいです。フォントの仕込み方も書いてあったけどあれはインストール後のマニュアルに書いてあったような。
53997 - Prerequisites for installing SAS® 9.4 on Red Hat Enterprise Linux 7


なお、RHEL7はサポートが2024年までなので長めです。
けど、Fedoraから見ると五年前の基盤なのよね・・・・・・

SAS DMSのLinux版は、UTF-8対応していません。

というのがログに出ます。
GUI部分がおかしくなるのだろうと思います。エンジンは対応しているので。
Linux版でDMS使う方が稀だと思いますが、念の為。
出力の為に別途クライアント側にその手のサーバを立ててとかあった気がするけど、RHELに入れた時にはサーバに立ててXで引っ張れるように仕込んだ記憶が。

けどSASソリューション製品を使うのであれば、UTF-8推奨です。

SASのメッセージがS-JISなのをソリューション側に引っ張る時に文字コード変換してくれてないケースがあるようです。
バグだと思うんですが、そもそもSASソリューションはデバッグできるIDEというものではちょっとないので(SAS DMSでもマクロのミスで治らない場合には強制再起動だったりしますが、SASソリューションも裏ではsasのプロセスが生きているWorkspace Serverで動いてます)、大変悩ましいなあとは。
ローカルSASで開発して本番はサーバ上で、というやり方はしばしば見かけました。今だとブラウザ上で実装されていてもソコソコの速度で動くとは思うのですが、モダンブラウザじゃないとHTML5とかWebAssemb

SAS StudioかSAS EGか。

認証機構が実はちょっと違うし、使うポートも変わるので。
ただ、SASプログラムで構築したい、というのであれば、SAS Studioがあるのならそちらでいいかと思います。
SAS EGは、ちょっと癖のあるGUIで統計やりたいとかの人向けです。SASプログラムも書けますが、面倒。プログラム実行順序とかを別途定義する必要もあったりしますので、システム開発者にはいいかもですが。

templateの保存場所には気をつけて。

同一ユーザでマルチでセッション貼った場合、SASUSERフォルダが厄介です。Windowsだとプロファイル読めないとかって警告が出たかと思いますが、サーバ環境だとちょっと違うオプションがあったりして、使えはするが書き込めないとかも発生する可能性があります。
ODSのPATHを変える事で、スタイルのテンプレートとかをWORKライブラリにする事は出来、また、RSASUSERオプションで起動時からSASUSERフォルダを読み込み専用にするという事は出来ます。こういう場合、templkateの永続化が勝手には為されないので、注意が必要です。
まあ、「むしろ勝手に保存されているに気付かずツラい」みたいな話の方があるかもですが・・・・・・

Windowsで自動ログオンを可能にする方法として、Autologin.exeを利用する。

タスクスケジューラーで自動的に何らかのプログラムを動かし、例えば毎日一回は何かを実行する、というのは大変よくやると思うが、タスクスケジューラーで実行しづらいものはあり、例えばデスクトップセッションで画面を必要とするようなものは、実行出来ない。

それに対しては、Windowsの機能で、「起動時に自動ログインする」という機能を有効にすると上手く出来る。
電源が入って起動し、保存されたIDとパスワードでマシンにログオンしておいてくれるという機能だが、つまりは電源入れると自動でログオンされてしまうので、セキュリティ的に問題がある。コマンドで画面ロック等をすると良いかと思う。


Autologon.exeがMSのサイトからダウンロード出来る。
technet.microsoft.com
パスワードは暗号化されるらしい。
参考:Windowsでシステムに自動ログオンする(Autologonツール編):Tech TIPS - @IT


通常の端末であれば、モニターに内容がそのまま見えてしまうので問題があるのだが、例えばVMの場合、物理モニターにダラダラ表示される訳ではない為、特に問題ない可能性は高い。
ただ、かなり気持ち悪い動きはする事になるかと思う。

Vivaldi 2.0 on Fedora 28について少し。

Vivaldi 2.0にしたついでに、寝ながら使うFedoraマシンのブラウザを完全にVivaldi一本でやる試み。

Vivaldiって何

Chromiumベースのブラウザで、色々カスタマイズして使いたい人向けのブラウザ。
ステータスバーやペイン表示がデフォルトで設定可能。設定項目もかなり使いやすいように、そう人向けのブラウザとして開発されている。
Chromiumがベースなので、Chrome拡張も使える。ただ、今までパスワードや設定のSyncがなかったが2.0で導入された。本格的に使えるようになった。
なお、個人的に使いやすいと思っているのは、ブックマークの使い勝手・設定のカスタマイズのやりやすさ、タブブラウズのやりやすさ、あとスクリーンショットが簡単に取れたりする所です。


ただ、Adobe Flashが同梱されていない為別途インストールする必要があったり、DRM保護機能のあるビデオの場合に苦労したりする。

Adobe Flashをインストールする

PPAPI版のAdobe Flashをインストールする必要がある。Flashサイトからダウンロード出来る(今はブラウザ自動検出で対象のFlashをダウンロード出来る・Repoの情報も取ってくるのでアップデートは以降普通にdnf updateで出来る)

Flashの日本語文字化け対応

Windows版では問題にならないと思うが、Linuxの場合ロケールが日本であっても何故か中華フォントであるuming.ttcが使われるのでVLゴシックのフォントで置き換える(まあ使わないし)※ただ、Fedoraのバージョンアップで元に戻ったりするかと思うので注意。

SASのエディタとしては、今はVS Codeかなと思っている。

namelesscity.hatenadiary.com
あれから使いながら、結局Atom EditorからVS Codeに引っ越した。


理由としては、
「会社のプロキシ超えするのにAtom Editorでハマリが多すぎる」
から。
ユーザIDやパスワードの特殊文字の調査とかもダルい。
VS CodeWindows版でもその設定はChromeと同様に使える。
参考:
Visual Studio Codeが1.15版で認証プロキシに対応していた


開発も、Git的に「ファイルサーバから複写して、開発、その後にリモートにプッシュ」という形をしたいのだが。
そういうフォルダ構造で管理すると結構捗る。フォルダ毎にVS Code用の設定が出来る。
ただなー、今共用サーバなんだよね。


他。
Linter拡張はない。Linterってのは、文法チェックを行う仕掛けなのだけど。
ほしいなあ。
そもそもSASのプロセス起動がかなり重い処理であるので、これをなんとかしないとLinter使うたびにSASプロセス起動してたのでは話にならない。
SAS Integration Technologiesの中では、セッションと対になる形でサーバ上ではSASプロセスが起動しっぱなしになるが、実行の度にプロセス落としていたら遅いというのも理由にはある。本当はサーバ上に適当に起動されたSASプロセスが複数あって、ユーザからのリクエストに対して適当にバランスしてくれればいいのだけどそういう作りにはなってないのよな。Viyaではそれが変わるのかしらん(マイクロサービスとか言っているからなあ)


参考として
http://www.sas.com/offices/asiapacific/japan/service/help/pdf/v94/hostwin.pdf
のp.197くらいからパフォーマンスの事が記載されている。ただ、MEMLIBも、軽量プロセス化を想定しているものではないとは思うので、起動がそこまで軽くはならなさそうだしなあ・・・・・・まあ、メモリ上に仮想ドライブを設定するという古の技を用いれば速くはなるが。
LinterはSASが出してほしいんだよなあ。syntaxcheckモードみたいなものだけど・・・・・・あれの有効活用出来ないものかな。
LintネタはSASの発表とかではある。
https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2018/2543-2018.pdf

Central Statistical Monitoringという話題を聞いて考えた事。

それ、逸脱チェックみたいな話になっていくのかな?
という感想。


時代が進まねえ・・・・・・


論理チェックとかかなり軽量化していったのを経験した身としては、そんな金とリスクのトレードオフに合わせて適当にさじ加減変わるなら、そのように要件早めに出しておいてほしいものだと思います。

なんかすみませんね。

SASユーザー総会にて。
社内の人に挨拶をするだけのつもりが、いきなりだったのでちょっとビックリしました。


流石にブログ名音声で呼ばれるのはなあ。いやつけたのは自分ですが。

IronPythonとPython .NETでハマった。

IronPythonWindows 7にインストールしたらVisual Studio Codeで食わせるのにハマった。
こちらは標準のPythonPython .NETを食わせることで回避。完全互換ではないようですが。


Python .NET(pythononnet)をFedoraに入れてみようとしたら、Monoとの連携にハマった。


Atom EditorもどうもProxy超えがしんどいし、Visual Studio CodeChromiumベースなのでWin/Linuxどっちでもいける。


.NET Framework Coreもmonoも案外安定しない。Spotfireの事がなければIronPythonとか考えたかないからなあ・・・・・・なんで今Python2系なのか。
JupyterNotebookとか使ってみてえ。

Spotfireで使えるPythonの話へのリンク

spotfiremaniacs.net
余談ながら、「StreamBaseとH2O連携 | Spotfireで学ぶデータサイエンス超入門
がIoTとかには必要になってくるやつなので興味深いです(が、どこまで使えるかは分からないです触ってないので)


何が出来て何が出来ないという範囲を探したのですが日本語ソースはなかったので。リンクを張っておきます。
community.tibco.com

Limitationの話。
community.tibco.com

Limitations
Scripts are executed in isolation from the rest of the running Spotfire code. This is to ensure that faulty scripts cannot crash the running client and also provide security to avoid malicious scripts. To provide further security, scripts must also be trusted before they are used. Spotfire use a undo/redo system to give the user the option to revert the changes done after the script has executed.

https://community.tibco.com/wiki/how-develop-ironpython-scripts-tibco-spotfirer-and-their-limitations#toc-4

これはLimitationなのかとちょっとわからなくなるんですが。


Spotfire 7.6のAPIリファレンス(英語)
TIBCO Spotfire 7.6 API Reference - Table of Content
Spotfire 7.13のAPIリファレンス(英語)
TIBCO Spotfire 7.13 API Reference - Table of Content

Excelから出てきたようなCSVを、途中の改行を別フレーズに置き換えるサンプル。

こんなの。

filename _IN  ... ;
filename _OUT ... ;

data _NULL_ ;
  length TEXT $32767. ;
  infile _IN lrecl=32767 dlm='1a'x;
  input TEXT ;
  file _OUT lrecl=32767 dlm='1a'x;
  length NUM_DQ FLG_DQ 8. ;
  retain FLG_DQ ;
  if _N_ = 1 then FLG_DQ = 0 ;
  NUM_DQ=klength(TEXT)-klength(transtrn(TEXT,"""",trimn(""))) ;
  FLG_DQ = mod(NUM_DQ+FLG_DQ,2) ;
  if FLG_DQ=0 then put TEXT ;
  else do ;
    put TEXT +(-1) "<LF>" @@ ;
  end ;
run ;

補足

文字コード'1a'xは、まずレコードの区切り文字としては使われない文字コードを変数区切り文字に設定したということ。
置換文字 - Wikipediaとか参照。
結構End Of Fileのマークとして使われることがあります。
SASは改行の文字コードをあんまり配慮してくれないので、別レコードになることがあるけど、二重引用符の数を認識して取り込むという感じです。

SSL対応しました。そして、Symantecの証明書サービスが別会社に移る際の問題。

はてなブログSSL対応をしました。
無料版でありはてなドメインなのでLet's Encrypt対応です。


Symantec絡みの事で、製薬企業のサイトで見えなくなりそうなサイトが・・・・・・大丈夫でしょうかね。
シマンテックの SSL/TLS サーバ証明書の入れ替えについて | DigiCert & Symantec
Symantecの事業はDigicertに移管されますが、元々審査が甘いという事で証明書発行プロセスが疑われた事が発端なので、そのうち殺されざるを得ないとは思います。

簡易チェックツールいるなあ。。。。。

Pinnacle 21ほどのチェックはいらないんだけど、単純にnullがあるとか、全部nullとか、データセットの素性を明らかにするようなチェックツールがいるなあと。
Enterprise Guideで一変数要約統計みたいなのが簡単に出せたような記憶があるけど、怪しい文字変数内のドット検出とかもあった方が良く。

ほとんどのプロジェクト失敗の原因はコミュニケーション不足、とか言われるその先を考えてほしいなと。

愚痴っぽいメモ。
google:プロジェクト 失敗 コミュニケーション不足


失敗気味であればあるほどコミュニケーションは阻害される。コミュニケーション不足は擬似相関な要因で、兆しを見付けたらなにかがおかしいので別の所の故障原因を探すのが吉。
「コミュニケーションしろ!」と声掛けても飲み会開いてもあんまり上手くいかないよね。


誰かをワルモノにしない問題点とか対応策探しは大事。
酷ければ、もっと上の人をワルモノにするとかやりようは幾つかあるけど。
監査スキームはあまり上手くいかない事が多い。Audit Trailの作成作業が手作業ってのは良くない(リソース不足とかで作らされる事はあるが)。
チェックスキームを自動化して毎日ぶん回してダッシュボードで作業者が確認する、くらいがホントはいいよなあ。人間の脳内にタスクを置く意味あんまりあるとは思えず。


そういう事がやりやすい、一つのプラットフォームを何か準備しておきたい所で、それがRedmineのカスタマイズやなにかで回せるならいいけど、多分難しいだろうなあ。
GitHubとかで治験の作業をプロトコル単位で回したい。WordやExcelファイルに拘束されるのは良くない。

Windows PowerShellのイマイチイケてない所。

バージョンの差異が少なからずあり、Win7とWin10ではバージョンが違う。

最大の欠点がこれで、当面WindowsDOSコマンドから抜け出せないのもこのせい。
正直当てに出来ない。

未だにシェルの文字エンコードS-JIS

Winの、「表示はS-JISなんだが実際には裏はファイル名やファイルパスはUnicodeで~」という仕様がしんどい。
chcp65001でシェルを使おうとして、Unicode対応フォントが当てられないのも困る。

エイリアスが外部の実行ファイルとかぶる。DOSコマンドとの非互換性がきつい。

lsが使えるのになーという所が。
cdが/dを受け付けない。iexと打ったらエイリアスに蹴られる。

セキュアな仕掛けがシェルとしての利用を阻む事が・・・・・・

いやまー、パスワードとか埋め込めないのは正しいっちゃ正しいんですがね。

パスワードルール、変わっていくと良いんですが。

パスワードの定期変更推奨が無くなりました。総務省から。


当面は、Part11とかの影響引き摺るんでしょうが、今後は無くなりそうです。
その代わりと言ってはなんですが、ユーザーの管理はしっかりやってく必要あるでしょうね。

WinでのPython入れ。

Python入れる。

現行Py3系統の最新安定版は3.6.4。公式版、64bitを使う。
ただ、実際のところ32bit版が安牌な気がするが要調査。

Proxy通す。

会社内で使っているプロキシを通す、のだが、PACファイルでProxy設定しているパターンなので、それはそのままは使えず。
念の為いうと、PACファイルのはnetsh winhttpコマンドでも取れず。LinuxでもGNOMEのsettingで一部対応はしているけど、認証付きProxyにはうまく対応しないなど色々ある。
基本的にここ、pipの設定ファイルで設定してpipコマンドにだけproxyを~というところなのだろうけど、会社環境ではそもそもコマンドのパラメータにある--proxyでうまく設定できなかった。
なので、「UNIX系アプリで使われる古くからのProxyの設定方法」で試すと通った。

set HTTP_PROXY=http://<user>:<password>@<server>:<port>
set HTTPS_PROXY=http://<user>:<password>@<server>:<port>

なお、@は%40として対応。pipとかのproxyの設定で上手くいかないのは、このあたりの特殊文字の扱いのせいかも。
この設定は、アップデートなんかはWin/個人レベルという事で、環境変数としてもそちらで設定しておいた。サーバ再起動は不要。


なお、Linuxの場合、プロキシ設定がどんどん進化はしているので、環境に合わせて設定した方がいいと思うし、それが疲れると思うならpip.confとかのやり方をやるのがいいと思う。
このやり方は暫定的なやり方で、Winのプロキシ認証とかちゃんとお作法に則りたいところなんだけど、Pythonのインストールモジュールではそこまで考慮しないので、環境変数にハードコーディングしているような感じに。

pipアップグレードしておく。

実際には、「pip install pip --upgrade」としても、入ってますーとか言われて終わるかと思う。

wheel入れる

コンパイル済みのモジュールを入れる為。

numpy+mkl.whlをダウンロード。

これは何?

全部pythonで完結してりゃ楽なんだけど、実はそうはいかないという事がある。そこが、mklのところ。
Intel Math Kernel Libraryの簡単な言い方っぽい。x86x86-64AMD64)版があるがそれをインストールしてnumpyにそれ参照するように設定して~というやり方は今回せず、
https://www.lfd.uci.edu/~gohlke/pythonlibs/
からのnumpyに組み込んだpre-build版を使う。Intel Math Kernel Libraryのところからダウンロードするのが登録必要で面倒臭い為(フリーではあるけど)。pre-build版はUnofficialなので自己責任でどうぞ。

この入れ方について。

こちらはデータサイエンティストとデベロッパーのあいのこみたいなものなので、こんな感じで入れておく。
家ではFedoraだし。
Anacondaは、一人で一台みたいな状況であれば別に問題はないんだと思うけど、余計な環境変更を行う事があるらしく、トラブルの元にもなるようなので止めておく。

ダウンロードしたファイルを特定フォルダに入れて、pipでインストールする。ローカルのソースをインストール出来る。

他インストール。

numpy、scipy、wxPythonとか。djangoとか。
pyenvとかは今回はやってない。特に複数バージョン云々やらんつもりで。あと、pyenvはWinは無理だったそういや。