それ、逸脱チェックみたいな話になっていくのかな?
という感想。
時代が進まねえ・・・・・・
論理チェックとかかなり軽量化していったのを経験した身としては、そんな金とリスクのトレードオフに合わせて適当にさじ加減変わるなら、そのように要件早めに出しておいてほしいものだと思います。
それ、逸脱チェックみたいな話になっていくのかな?
という感想。
時代が進まねえ・・・・・・
論理チェックとかかなり軽量化していったのを経験した身としては、そんな金とリスクのトレードオフに合わせて適当にさじ加減変わるなら、そのように要件早めに出しておいてほしいものだと思います。
IronPythonをWindows 7にインストールしたらVisual Studio Codeで食わせるのにハマった。
こちらは標準のPythonにPython .NETを食わせることで回避。完全互換ではないようですが。
Python .NET(pythononnet)をFedoraに入れてみようとしたら、Monoとの連携にハマった。
Atom EditorもどうもProxy超えがしんどいし、Visual Studio CodeはChromiumベースなのでWin/Linuxどっちでもいける。
.NET Framework Coreもmonoも案外安定しない。Spotfireの事がなければIronPythonとか考えたかないからなあ・・・・・・なんで今Python2系なのか。
JupyterNotebookとか使ってみてえ。
spotfiremaniacs.net
余談ながら、「StreamBaseとH2O連携 | Spotfireで学ぶデータサイエンス超入門」
がIoTとかには必要になってくるやつなので興味深いです(が、どこまで使えるかは分からないです触ってないので)
何が出来て何が出来ないという範囲を探したのですが日本語ソースはなかったので。リンクを張っておきます。
community.tibco.com
Limitationの話。
community.tibco.com
Limitations
https://community.tibco.com/wiki/how-develop-ironpython-scripts-tibco-spotfirer-and-their-limitations#toc-4
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.
これは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
こんなの。
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は改行の文字コードをあんまり配慮してくれないので、別レコードになることがあるけど、二重引用符の数を認識して取り込むという感じです。
Pinnacle 21ほどのチェックはいらないんだけど、単純にnullがあるとか、全部nullとか、データセットの素性を明らかにするようなチェックツールがいるなあと。
Enterprise Guideで一変数要約統計みたいなのが簡単に出せたような記憶があるけど、怪しい文字変数内のドット検出とかもあった方が良く。
愚痴っぽいメモ。
google:プロジェクト 失敗 コミュニケーション不足
失敗気味であればあるほどコミュニケーションは阻害される。コミュニケーション不足は擬似相関な要因で、兆しを見付けたらなにかがおかしいので別の所の故障原因を探すのが吉。
「コミュニケーションしろ!」と声掛けても飲み会開いてもあんまり上手くいかないよね。
誰かをワルモノにしない問題点とか対応策探しは大事。
酷ければ、もっと上の人をワルモノにするとかやりようは幾つかあるけど。
監査スキームはあまり上手くいかない事が多い。Audit Trailの作成作業が手作業ってのは良くない(リソース不足とかで作らされる事はあるが)。
チェックスキームを自動化して毎日ぶん回してダッシュボードで作業者が確認する、くらいがホントはいいよなあ。人間の脳内にタスクを置く意味あんまりあるとは思えず。
そういう事がやりやすい、一つのプラットフォームを何か準備しておきたい所で、それがRedmineのカスタマイズやなにかで回せるならいいけど、多分難しいだろうなあ。
GitHubとかで治験の作業をプロトコル単位で回したい。WordやExcelファイルに拘束されるのは良くない。
パスワードの定期変更推奨が無くなりました。総務省から。
当面は、Part11とかの影響引き摺るんでしょうが、今後は無くなりそうです。
その代わりと言ってはなんですが、ユーザーの管理はしっかりやってく必要あるでしょうね。
現行Py3系統の最新安定版は3.6.4。公式版、64bitを使う。
ただ、実際のところ32bit版が安牌な気がするが要調査。
会社内で使っているプロキシを通す、のだが、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 install pip --upgrade」としても、入ってますーとか言われて終わるかと思う。
コンパイル済みのモジュールを入れる為。
全部pythonで完結してりゃ楽なんだけど、実はそうはいかないという事がある。そこが、mklのところ。
Intel Math Kernel Libraryの簡単な言い方っぽい。x86とx86-64(AMD64)版があるがそれをインストールしてnumpyにそれ参照するように設定して~というやり方は今回せず、
https://www.lfd.uci.edu/~gohlke/pythonlibs/
からのnumpyに組み込んだpre-build版を使う。Intel Math Kernel Libraryのところからダウンロードするのが登録必要で面倒臭い為(フリーではあるけど)。pre-build版はUnofficialなので自己責任でどうぞ。
こちらはデータサイエンティストとデベロッパーのあいのこみたいなものなので、こんな感じで入れておく。
家ではFedoraだし。
Anacondaは、一人で一台みたいな状況であれば別に問題はないんだと思うけど、余計な環境変更を行う事があるらしく、トラブルの元にもなるようなので止めておく。
ダウンロードしたファイルを特定フォルダに入れて、pipでインストールする。ローカルのソースをインストール出来る。
WDSとかは置いておいて。University Editionは商業利用出来ないし。
コードエディタとしてはSAS DMSの他、SAS Drug Developmentの~とかSAS Studioとかあるが、如何せんライセンスの問題もあるし、何より、SAS Intelligence Platformのサービスが立ってないと動かんものが多い。で、これは、起動前のクレデンシャルの問題とかをどうするか決めておく必要があるし(AD連携は可能なんだけど)、実行結果を貰う側がどうやって貰うかも考えておく必要があり、それも含めて今はSAS謹製のものを利用する以外はあんまり解がない状況ではある。
Eclipseプラグインとかは、AppDev Studioのライセンスにくっついて来た。あんまり深くは調べていないが、JavaからSASを呼べる・使えるというところで、多分これもSAS Intelligence Platformが必要だなあと。しかもJava用であり、SASをそのまま実行させる用ではない。。。。。。
結論としては、あくまでも他のアプリ使うのは、エディタの範囲までかなと思う。
同一マシンにおけるなら、SAS入れたサーバにリモート実行しかけることができるなら、バッチ実行までは大丈夫だけど、sshみたいな仕掛けがWindowsの標準ではかなり穴が開いてないのもあって難しいしわかりづらい。PowerShellで出来るんだけどさ。。。。。。psexecはハマりがキツくて非推奨。
各種テキストエディタは適当に使え、なんだけど、テキストエディタではやはり能力に限界がある(色分けくらい)ので、プログラムエディタくらいは投入したいところ。
今想定しているのはAtom Editor。
設定には一癖二癖あることもあって、VS Codeも見てみたが、野良で機能を突っ込むにはAtom Editorの方が楽だろうとは思っている。現行環境では外部パッケージを取り込むことは出来ているので、あとはautocomplate機能、language-sasのもうちっとのカスタマイズ、辞書機能の利活用どうするの問題をクリアできればなあ。
ただ、正直サクラエディタのgrep機能が便利過ぎてなあというのと、Atom文字エンコーディングのデフォルトがUTF-8というので、日本のSASの標準的にはS-JISな環境ではうまくいかないかもしれない。
と言っても大げさなものではなく、
単純に、SASUSERのパス変えた違うsasv9.cfgで実行させればいいという話です。
パラレルにバッチ実行するには、rsasuserシステムオプションと、ods pathのパスの最初にWORK.TEMPLATEとかをprependしてやればよいです。ちょっとのコマンドであれば、autoexec.sasではなくsasinitstmtで実行させられます。
たまに忘れるので。
1Twips=1/20pt(0.05pt)=1/1440inch
1pt=1/72inch
線の太さもこれで変換出来る
コード変換については、SASの場合にはフォーマット/インフォーマットを使うのが楽です。
聞きなれない言葉かもしれませんが、、、外部の文字列を取り込んでSASの変数に格納する際に適用される、フォーマットの逆みたいなやつです。
普段はあんまり使わないんですが、CSVからデータ取り込みするとかの場合に適用されます。
また、ほとんどの場合にはフォーマットと対になるインフォーマットがあるんですが、例外も結構あります。
日付型のYYMMDD10.フォーマットは、亜種にYYMMDDS10.フォーマットとかあるんですが、インフォーマットはYYMMDD10,インフォーマットしかないです。スラッシュ区切りでもYYMMDD10.インフォーマット使えばいいのですが。
こんな感じ。
/* S-JISでやってます */ proc format ; invalue _SEXI '男子'=1 '女子'=2 ; quit ; data CLASS ; set SASHELP.CLASS ; attrib SEXN length=8 label='SEX (N)' ; keep NAME SEX SEXN ; SEXN = input(SEX,?? _SEXI.) ; run ; proc print data=CLASS ; quit ;
OBS Name Sex SEXN 1 アルフレッド 男子 1 2 アリス 女子 2 3 バーバラ 女子 2 4 キャロル 女子 2 5 ヘンリー 男子 1 6 ジェームズ 男子 1 7 ジェーン 女子 2 8 ジャネット 女子 2 9 ジェフリー 男子 1 10 ジョン 男子 1 11 ジョイス 女子 2 12 ジュディー 女子 2 13 ルイーズ 女子 2 14 メアリー 女子 2 15 フィリップ 男子 1 16 ロバート 男子 1 17 ロナルド 男子 1 18 トーマス 男子 1 19 ウィリアム 男子 1
このままだと、実はアサインされていない文字列の場合には、bestで適当に数値変換されてしまいます。
通常は文字列を数値に変換しても問題ないのですが、たまたま数値にうまく変換出来る場合であると、変な事になります。
proc format ; invalue _SEXI '男子'=1 '女子'=2 ; quit ; data CLASS ; set SASHELP.CLASS ; attrib SEXN length=8 label='SEX (N)' ; keep NAME SEX SEXN ; if SEX = '男子' then SEX='3.14' ; SEXN = input(SEX,?? _SEXI.) ; run ; proc print data=CLASS ; quit ;
OBS Name Sex SEXN 1 アルフレッド 3.14 3.14 2 アリス 女子 2.00 3 バーバラ 女子 2.00 4 キャロル 女子 2.00 5 ヘンリー 3.14 3.14 6 ジェームズ 3.14 3.14 7 ジェーン 女子 2.00 8 ジャネット 女子 2.00 9 ジェフリー 3.14 3.14 10 ジョン 3.14 3.14 11 ジョイス 女子 2.00 12 ジュディー 女子 2.00 13 ルイーズ 女子 2.00 14 メアリー 女子 2.00 15 フィリップ 3.14 3.14 16 ロバート 3.14 3.14 17 ロナルド 3.14 3.14 18 トーマス 3.14 3.14 19 ウィリアム 3.14 3.14
これを回避するのには、ちょっと仕込みがあります。
otherの設定をしてやると良いです。
proc format ; invalue _SEXI '男子'=1 '女子'=2 other=. ; quit ; data CLASS ; set SASHELP.CLASS ; attrib SEXN length=8 label='SEX (N)' ; keep NAME SEX SEXN ; if SEX = '男子' then SEX='3.14' ; SEXN = input(SEX,?? _SEXI.) ; run ; proc print data=CLASS ; quit ;
OBS Name Sex SEXN 1 アルフレッド 3.14 . 2 アリス 女子 2 3 バーバラ 女子 2 4 キャロル 女子 2 5 ヘンリー 3.14 . 6 ジェームズ 3.14 . 7 ジェーン 女子 2 8 ジャネット 女子 2 9 ジェフリー 3.14 . 10 ジョン 3.14 . 11 ジョイス 女子 2 12 ジュディー 女子 2 13 ルイーズ 女子 2 14 メアリー 女子 2 15 フィリップ 3.14 . 16 ロバート 3.14 . 17 ロナルド 3.14 . 18 トーマス 3.14 . 19 ウィリアム 3.14 .