jsiiの仕組みの確認
Node.Js上でサーバが立ち上がり、クライアントのJavaと、JSONを用いたプロセス間通信をする。
Client : Java Server : javascript > node jsii-runtime.js JsiiRuntimet.java <-- STDIN/STDOUT protocol --> jsii-runtime.js --> jsii-kernel.js ------ JSON ------
jsiiのjavaライブラリを使う側は、JssObjectを継承したクラスを作成する。
* Class Dependency JsiiObject --> JsiiEngine --> JsiiRuntime <--> JsiiClient | ProcessBuilder (Java API) * Java object method call JsiiObject#jsiiCall -...-> JsiiClient#callMethod -> JsiiRuntime#reqestResponse * Library Dependency Jsii -> Jackson
設定ファイルを読み込むstack ghciの起動
いつもstack ghci
で起動した後に手で``:set prompt " > "
をしていました。これを起動時に自動的に実行したかったのですが、やり方がわかりませんでした。
PS C:\Users\User\haskell\> stack ghci Using main module: 1. Package `RS' component exe:RS-exe with main-is file: C:\Users\User\haskell\Main.hs ... [2 of 2] Compiling Main ( C:\Users\User\haskell\app\Main.hs, interpreted ) Ok, two modules loaded. Loaded GHCi configuration from C:\Users\User\AppData\Local\Temp\haskell-stack-ghci\548116bc\ghci-script *Main Lib> *Main Lib> :set prompt " > " >
確かに
Loaded GHCi configuration from C:\Users\User\AppData\Local\Temp\haskell-stack-ghci\548116bc\ghci-script
のログが出ていて、ここに起動時に実行されるスクリプトがあります。
中身は
:add Lib C:\Users\User\haskell\app\Main.hs :module + Lib
となっています。
ここに書けば実行されるはずですが、stack
が自動的に作成するTemp
内にあるので、ここには書きたくありません。
マニュアルには、起動時に実行するスクリプトの配置場所が3か所書いてあります。
4. Using GHCi — Glasgow Haskell Compiler 8.8.1 User's Guide
なので、ここにスクリプトを配置すればよいのですが、stack ghci
で起動したときの.
やappdata
や$HOME
の場所がわかりませんでした。
あれこれ悩みましたが、答えは単純で、System.Directory
にある関数を使えば、これらの場所がわかります。
*Main Lib> import System.Directory *Main Lib System.Directory> getCurrentDirectory "C:\\Users\\User\\haskell\\" *Main Lib System.Directory> getAppUserDataDirectory "" "C:\\Users\\User\\AppData\\Roaming\\" *Main Lib System.Directory> getHomeDirectory "C:\\Users\\User" *Main Lib System.Directory>
自分の環境の場合は
"C:\Users\User\haskell\"
に.ghci
ファイルを作成しました。
:set prompt " > " :set +t
これで、stack ghci
時に自動的にスクリプトが実行されます。
型の情報も欲しいので:set +t
も入れています。
polymorphism
種類 | 内容 | 実装 | Haskell |
---|---|---|---|
parametric | すべての型に対して成立する | 実装が同じ | type variable |
ad-hoc | 一部の型に対して成立する | 成立させる型ごとに実装が異なる | type class |
Fix, Free, Cofree
def | embed | project | note |
---|---|---|---|
data Fix f = Fix (f (Fix f )) |
fix | unFix | |
data Free f a = Free (f (Free f a)) | Pure a |
free | unFree not total |
sum |
data Cofree f a = Cofree a (f (Cofree f a) |
cofree not total |
unCofree | product |
PowerPointで選択したテキストの情報をスライドタイトルも含めてクリップボードに入れるマクロ
Public Sub getSelectedTextInfo() Dim s As PowerPoint.Slide Set s = GetActiveSlide() If s Is Nothing Then Debug.Print "アクティブなスライドを取得できません。", vbCritical + vbSystemModal Else putCB ("スライドタイトル / 内容 = " & s.Shapes.Title.TextFrame.TextRange.Text & " / " & getSelectedText()) End If End Sub ' 参考 https://tonari-it.com/powerpoint-vba-selection-textrange-font/ Public Function getSelectedText() With ActiveWindow.Selection If .Type >= ppSelectionText Then getSelectedText = .TextRange.Text End If End With End Function ' 参考 https://www.ka-net.org/blog/?p=2294 Public Function GetActiveSlide() As Slide Dim ret As Slide Set ret = Nothing On Error Resume Next Set ret = ActivePresentation.Slides.FindBySlideID(ActivePresentation.Windows(1).Selection.SlideRange.SlideID) On Error GoTo 0 Set GetActiveSlide = ret End Function ' クリップボードに入れる Private Sub putCB(ByVal val As String) With CreateObject("Forms.TextBox.1") .MultiLine = True .Text = val .SelStart = 0 .SelLength = .TextLength .Copy End With End Sub