No Programming, No Life

プログラミング関連の話題や雑記

IT用語斜め読み - ミドルウェア

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

いつもお世話になってるいる IT用語辞典 e-Wordsさん。 今回は何となく気になったミドルウェアについて見ていきます。 ミドルウェアって、IT系のお仕事をしているサーバ寄りの方にはなじみが深いのかなと思います。 逆にフロント側、HTMLでWEBでみたいな感じだとあまり関わりがないのかな?

ミドルウェアって何?

まずは概要から。

ミドルウェアとは、ソフトウェアの種類の一つで、オペレーティングシステム(OS)とアプリケーションソフトの中間に位置し、様々なソフトウェアから共通して利用される機能を提供するもの。OSが提供する機能よりも分野や用途が限定された、具体的・個別的な機能を提供する場合が多い。 IT用語辞典 e-Words より

うん、これだけじゃ分かりづらいですね。もう少し嚙み砕いてみましょう。

OSとソフトウェアの仲介役

OSの提供する機能は沢山あるし、直接APIを呼び出すのも大変だ。簡単に言うと、ミドルウェアはそれを使う業務アプリケーションがOSのことを気にせずに機能を利用できるようにするためにいるOSとアプリケーションの仲介役みたいなものだ。この中間層を準備するっていう発想はバーチャルマシン(VM)っぽいな。

ミドルウェアの守備範囲

どのようなソフトウェアがミドルウェアとして提供されるかは分野によって大きく異なる。

などがミドルウェアとなることが多いらしいです。

など、パソコンならOSが提供するような機能がミドルウェアとなることもあるが多いらしいです。

まとめ

リンク

IT用語辞典 e-Words

IT用語斜め読み - VPN

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

最近のIT用語検索トレンド

いつもお世話になってるいる IT用語辞典 e-Wordsさんの 2020年5月4日(月)のアクセスランキングを見てみると、

1位 SNS 2位 サインイン 3位 スクリプト 4位 PDF 5位 情報 6位 API 7位 Web 8位 オンデマンド 9位 サブスクリプション 10位 HTTP 11位 VPN 12位 レンダリング 13位 プラットフォーム 14位 デバイス 15位 OS

となっていました。新型コロナウイルスの影響でリモートワークを始めたという人も増えている時期だと思いますので、今回はこの中で気になった11位のVPNについて見ていきたいと思います。

VPNって何?

まずは概要から。

別名: バーチャルプライベートネットワーク仮想専用ネットワーク

VPNとは、通信事業者の公衆回線を経由して構築された仮想的な組織内ネットワーク。また、そのようなネットワークを構築できる通信サービス。企業内ネットワークの拠点間接続などに使われ、あたかも自社ネットワーク内部の通信のように遠隔地の拠点との通信が行える。 IT用語辞典 e-Words より

低コスト

昔はこのような用途のために専用線を引いていたが、現在ではインターネットを利用した「インターネットVPN接続」で可能となるため、低コストで通信が可能となるとのこと。 ただ、どうしてもインターネット経由なのでセキュリティや通信品質の確保はキャリアの通信網を利用するよりも難しくなる。

VPNルータ

VPN(Virtual Private Network:仮想専用ネットワーク)構築のための機能を持ったもののこと。 通常のルータとしての機能の他にVPNゲートウェイとしての機能を持ち、ネットワークを介して他のVPN機器との間で暗号化された専用の通信路を形成することができる。

まとめ

うん、ネットワークさっぱりわからん。ざっくりとインターネット経由で暗号化した社内LANという感じですね。

リンク

アクセスランキング - IT用語辞典 e-Words

【VBA】VBAプロジェクトの全ソースを一括エクスポートする

f:id:fumokmm:20200504205857p:plain

VBAプロジェクトのソースって、他のJavaやCなどのプログラミング言語と違って、ExcelAccessVisual Studio Editor(VBE)をわざわざ開かないと閲覧・編集できないし、バージョン管理もしづらいですよね。そんなとき、ソースを右クリックし「ファイルのエクスポート」をすることができますが、これがファイル単位でしか行えないから非常に不便、みなさんそんな風に感じませんか?

そこで、この記事では、そんな悩み多きVBAプロジェクトで、全ソースを一括でエクスポートする方法をご紹介します。

なお、この記事ではExcelを例にご紹介しています。Accessなどでも同様のことを行いたい場合は、少しの修正で対応が可能になると思います。

想定読者

この記事はある程度VBAのスキルがある読者を想定しています。少なくてもVBAプロジェクトのソースをエクスポートして、ソース管理したいな・・・と思えるくらいの人を想定しています。

準備

まずはVBAプロジェクトの下準備が必要です。具体的には以下の参照設定にチェックが付けられているか確認して下さい。

f:id:fumokmm:20200504182529p:plain
Microsoft Visual Basic for Applications Extensibility 5.3への参照設定にチェックを付ける

f:id:fumokmm:20200504182726p:plain
Microsoft Scripting Rungimeへの参照設定にチェックを付ける

方法

1.まずVBEを開きます。(Alt + F11)

2.標準モジュールで新規モジュールを作成します。例ではExportModuleという名前で作成しました。(名前は任意)

f:id:fumokmm:20200504183504p:plain

ソースはこちら (ExportModule)

Option Explicit

Sub ExportMacroSource()
    ' [参照設定] Microsoft Visual Basic for Applications Extensibility 必要
    ' [参照設定] Microsoft Scripting Rungime 必要

    Dim p_fso As Scripting.FileSystemObject
    Set p_fso = New Scripting.FileSystemObject
    
    Dim p_macroDir As String
    p_macroDir = p_fso.BuildPath(Application.ActiveWorkbook.Path, "MacroSource")
    If Not p_fso.FolderExists(p_macroDir) Then
        p_fso.CreateFolder p_macroDir
    End If

    Dim p_vbComp As VBIDE.VBComponent
    Dim p_typeLabel As String
    Dim p_extension As String
    Dim p_outputFileName As String
    For Each p_vbComp In Application.VBE.ActiveVBProject.VBComponents
        ' タイプから拡張子を特定
        Select Case p_vbComp.Type
            Case vbext_ct_ActiveXDesigner
                p_typeLabel = "ActiveXDesigner"
                p_extension = "cls"
            
            Case vbext_ct_ClassModule
                p_typeLabel = "ClassModule"
                p_extension = "cls"
            
            Case vbext_ct_Document
                p_typeLabel = "Document"
                p_extension = "cls"
            
            Case vbext_ct_MSForm
                p_typeLabel = "MSForm"
                p_extension = "frm"
            
            Case vbext_ct_StdModule
                p_typeLabel = "StdModule"
                p_extension = "bas"
        End Select
    
        ' エクスポート実施
        p_outputFileName = p_fso.BuildPath(p_macroDir, p_vbComp.Name & "." & p_extension)
        Debug.Print "[export] " & p_outputFileName
        p_vbComp.Export Filename:=p_outputFileName
     
    Next p_vbComp
    
    Debug.Print "Finish export."

End Sub

3.ExportModuleを開いているエディタ上で、F5をクリック (実行)します。

4.イミディエイトウィンドウにも出力結果が出力されます。

f:id:fumokmm:20200504184452p:plain
イミディエイトウィンドウの出力結果

5.Excelファイルが置いてあるパスと同じパスに「MacroSource」というフォルダが作成されVBAプロジェクトの全ソースが一括エクスポートされます。

f:id:fumokmm:20200504184612p:plain

注意として、2回出力するとソースは上書きされますのでご注意下さい。 あとは、お好きなソース管理システムにコミットして下さい。

信頼性に欠けるというエラーが出た場合は?

実行時に「信頼性に欠ける」というエラーが出た場合、「開発者向けのマクロ設定」の「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックボックスにチェックを付けてから実行してみて下さい。

f:id:fumokmm:20200504184101p:plain

f:id:fumokmm:20200504184134p:plain

f:id:fumokmm:20200504184150p:plain

まとめ

ここではVBAプロジェクトで、全ソースを一括でエクスポートする方法をご紹介しました。 アドインにするなどすればもっと便利にできると思いますが、サクっと一括エクスポートできる環境を整えたい場合には、ぜひ今回ご紹介した方法を利用してみて下さいね!

参考

MS Access のVBAモジュールを全てエクスポート | mofu犬blog

Groovyで2回目の呼び出し以降は計算せず高速で値を返却するメソッドを作る

2回目の呼び出し以降は計算せず高速で値を返却するメソッドを作ってみました。 いわゆるメモ化ですね。Groovyの場合はクロージャが使えるので、理解しやすいと思います。

動作環境

Groovy Version: 3.0.2 JVM: 14 Vendor: Oracle Corporation OS: Windows 10

ソース

def calc(num1, num2) {
    def num = num1 + num2 // 計算結果をここで保持
    return { num } // 計算結果を返すクロージャを返す
}

def doCalc = calc(5, 8)
assert doCalc() == 13
  • 最初に calc メソッドが呼ばれた時に1回だけ num1 + num2 が計算されて、結果が num に格納されます
  • 格納された num を返却するクロージャが返却されます
  • 返却されたクロージャは何度呼び出しても num を返却するだけなので高速です

IT用語斜め読み - JFIF

f:id:fumokmm:20191117132854j:plain (photo by Pixabay)

最近のIT用語検索トレンド

いつもお世話になってるいる IT用語辞典 e-Wordsさんの 2020年3月7日(土)のアクセスランキングを見てみると、

1位 SNS 2位 NDR 3位 サブスクリプション 4位 Web 5位 API 6位 YouTube 7位 クラスタ 8位 プロキシ 9位 LDAP 10位 SSID 11位 プラットフォーム 12位 スクリプト 13位 インフラ 14位 インスタンス 15位 JFIF

となっていました。今回はこの中で気になった15位のJFIFについてです。

JFIFって何?

まずこれ読み方はジェーエフアイエフじゃなくて「ジェーフィフ」らしいです。

ジェーフィフ JFIFJPEG File Interchange Format 】 JFIF JFIFとは、JPEG形式の画像データをファイルに記録するための形式を定めた標準規格の一つ。ファイル名の標準の拡張子は「.jpg」あるいは「.jpeg」。

IT用語辞典 e-Words より 

JPEG形式の標準規格ってことらしいです。知らなかった。JPEGJPEGだけなのかと思ってたけど、色々あるんですね。 符号化された画像データ本体、画像の付加情報とか、圧縮アルゴリズムの種類とか、カラーモデルとか色々取り決めしているらしい。

Exif (Exchangeable image file format)

JFIFには、画像を扱うソフトウェアが独自情報を記録するための拡張領域を作成する方法を定めているらしい。で、この仕組みを応用して、撮影時の情報(撮影日時、機種名、解像度、GPS計測による撮影位置などなど)を記録するための標準的な規格として「Exif」っていうのがあってそちらが有名。現在では素のJFIFファイルは少ないみたいで、多くのJPEGファイルはExif情報を含んだ形式となっている。

おわりに

画像フォーマット、奥深し。

Javaはつまらなくなったな

f:id:fumokmm:20191223002811p:plain:w500

これは、Javaに限った話ではないが、最近の流れとして、プログラミング言語がどれもこれも似てきてしまっているように思う*1。 あまりに言語が似すぎてしまうと、何を選んでも大差ない、選ぶ基準は動かせるプラットフォームとか、動作速度とか、そういった部分になってきてしまう。言語を選ぶ基準がその言語の特徴的な機能や、その言語でしか出来ないことでなくなってしまうことに、ワクワク感が薄れてしまうのは私だけだろうか。

AltJava言語達

このブログの読者の皆さんならきっとご存知と思うが、JavaはJava8でついに重い腰を上げて関数型の構文が取り入れた。そのあたりから進化のスピードが加速してきており、その後はJava10で型推論が導入されたり、Java12ではSwitch式が取り入れられたりと枚挙にいとまがない。 しかしJava8が世に出る以前から、AltJava言語*2では既に取り入れられていたものが多くある。 諸事情により、Java6で長い間更新が滞ってしまっていたこともあり、その間に多くのAltJavaが栄えたのではないかと思う。

その機能をよこせ

さて、このように「公式がなかなかやってくれないから俺がやるぜ!」と名乗りを上げた多数の言語達が、その当時Javaがまだ持っていなかった先進的な機能をどんどん繰り出すことによって優位性を誇示していた。 しかし現在、Javaは貪欲にそれらの機能を吸収し続けていっており、どんどん複雑になってきている*3。 こんな状況だから、心無い開発者から「もうその機能はJava自体で使えるんだから、AltJavaはいらないよねー」と言った声が聴こえてくると、とても悲しい。 誤解しないで欲しいのは、公式に採用されたことは非常に喜ばしいことであることに違いはない。世の中に広く普及するための第一歩を踏み出したのだ。だが、それでAltJavaのことを忘れないであげて欲しいのだ。牙を抜かれたライオンのような扱いはやめてあげて欲しい。

あえて削る

上であげたようなJavaの貪欲さとは対照的な美しさ、それはシンプルであることだと思う。 JavaJVMというシンプルなスタックマシンで動いている。コアはシンプルな方が美しい。本当に必要な機能だけを卒なく美しく提供してくれればそれでいい。それでよかったのだ。

Javaもかつては無駄な*4機能は削ぎ落す選択をしていた。だから未だにプロパティ*5を扱えなかったり、演算子オーバーロードできないし、もちろんポインタ*6も使えない。しかし、この状況だから、そのうちJavaでもプロパティが使えて、演算子オーバーロードできて、そしてついにはポインタが使えるようになってしまうかもしれない。そんなJavaはたぶんつまらない。 私はJavaをJava1.4の頃から使っているのだが、あの頃の不自由さが今思うと非常に懐かしい*7

多様性の海に

とりとめもなく書いてきたが、Javaに限らず、プログラミング言語は他の多種多様な言語の様々な機能に囲まれ、影響され、磨かれて進化してきたのだ。 たとえAltJavaが衰退しようとも、太りすぎたJavaがシンプルな新言語に将来もしかしたら駆逐されようとも、それはそれで。 この弱肉強食のプログラミングの多様性を最後まで見届けようと私は思う。

参考

Java8の新機能を徹底解説!(ラムダ式、Streamなど) | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

Java9の新機能とサンプルコード - Qiita

JDK9 Jigsaw を試してみた - Qiita

Reactive Programming with JDK 9 Flow API | Oracle Community

Java 10新機能まとめ - Qiita

Java9,10,11の新機能 - Qiita

Java8からJava11への変更点 - Qiita

Java12新機能まとめ - Qiita

[速報]Java 13が登場。ZGCの改善やSwitch式の実現など新機能。 Oracle Code One 2019 - Publickey

*1:JavaよりもむしろJavaScriptなんかの方が状況がひどいことになっているかもしれないが、それはまた別の機会に

*2:Scala, Kotlin, Groovyなど

*3:例えるなら、千と千尋の神隠しに出てくるカオナシみたいな感じだろうか

*4:少なくとも、複雑になることを犠牲にしてまで取り入れなかったという意味で

*5:.propertiesではなくて、クラスのプロパティのこと

*6:参照先アドレスの直接操作の話

*7:こんなことを考えるようになったというのは、歳を取ったからなのだろうか

Windows環境にRustをインストールする

f:id:fumokmm:20191216085325p:plain:w150:h150f:id:fumokmm:20191211185740j:plain:w150:h150

突然、RustをやりたくなったのでWindows環境にインストールしてみた。 その時のインストール手順をメモしておく。 環境やバージョンなどは以下の通り。最近インストールばっかりしてるなー。

環境

バージョン
OS Windows 10 (64bit)
Rust 1.39.0
rustup 1.20.2
Cargo 1.39.0

手順

インストーラーダウンロード

こちらよりダウンロード

f:id:fumokmm:20191217164935p:plain

ダウンロードした rustup-init.exe を実行

f:id:fumokmm:20191217164940p:plain

すると、C++コンパイラが要るよと言われるので、コンパイラを先にインストール

f:id:fumokmm:20191217164823j:plain

C++コンパイラをインストール

せっかくなので、Visual Studio 2019の方から入れてみた。

まず新しいプロジェクトの作成を選んで

f:id:fumokmm:20191217164827p:plain

C++ユニバーサル Windows プラットフォームツールを選んで

f:id:fumokmm:20191217164831p:plain

インストール開始

f:id:fumokmm:20191217164836p:plain

f:id:fumokmm:20191217164841p:plain

インストール完了!

f:id:fumokmm:20191217164845p:plain

Rustのインストール(続き)

Rustのインストールを再開

f:id:fumokmm:20191217164911j:plain

1) Proceed with installa (default)を選択

f:id:fumokmm:20191217164857j:plain

Rust is installed now Great!

f:id:fumokmm:20191217164902j:plain

インストール完了!

rustc --version でバージョン確認してみる

f:id:fumokmm:20191217164907j:plain

rustup --version でバージョン確認してみる

f:id:fumokmm:20191217164920j:plain

cargo --version でバージョン確認してみる

f:id:fumokmm:20191217164923j:plain

ということで、Rustがインストールできたみたい

Hello World

ひとまずget startedのハローワールドまでやってみた。

cargo new hello_world でプロジェクトが作成される

f:id:fumokmm:20191217164932p:plain

Visual Studio Codeで開いてみたところ。 hello_worldにTerminalで入っていって cargo runで実行できた

f:id:fumokmm:20191217164927j:plain

おしまい。

参考

Rust Programming Language

Windows 10 で Rust のインストール - Qiita