開発環境に関する用語略語
C
コンパイラだけでは、外部との入出力のない実行形式しか作れない。
<stdio.h>をインクルードすることにより標準入出力を操作できる。
<windows.h>をインクルードすることによりGUI入出力を操作できる。
C++ (C/C++7.0,1992)
構造体を発展させ、オブジェクトを扱うことができる。
CとC++のソースは一つのビルドの中に混在させることができる。
MFC(:Microsoft Foundation Class) Win32 のC++オブジェクト指向ラッパー
(C++4.2〜7.0は大きな変化なし)(VS2008で大きく増補)
CRT(:C Run Time)
ライブラリのバージョン毎にメモリ管理が異なるため、
互いに異なるバージョンのEXE-DLL間でDLL境界を越えてMFCオブジェクト、
CRTオブジェクトのやりとりはできない。
CLI(:Common Language Infrastructure共通言語基盤)
.NET Frameworkの基幹を構成する実行コード、実行環境についてMicrosoftが策定した仕様
CIL(:Common Intermediate Language、共通中間言語)
バイトコードスタイルフォーマット
ネイティブに翻訳される(JITコンパイラによる)
かまたは仮想機械により実行される。
en:List of CIL Instructions [en.m.wikipedia.org/wiki/List_of_CIL_instructions]
に機械語コードの一覧表がある。
C++/CLI
.NET Framework上で実行するプログラムを作るためC++を拡張したプログラミング言語。
C++の上位互換。VS2005以降で利用可能。
#using <mscorlib.dll>
using namespace System; ナド
ガーベージコレクションの手動・自動が明確化
.NET, COM を参照することができる。
RAD(:Rapid Application Development)
ウィンドウに部品を配置すると、開発ルールが関数まで自動的に用意する。
プログラマは実際の処理を追記するのみ。
C#(拡張子.cs)
中間言語(.NET)を出力するコンパイラ
現在のC#は、ネイティブを出力できる(.NET 中間言語(.NET)を出力するコンパイラ
現在のC#は、ネイティブを出力できる(.NET Native)
COM:Common Object Model
Windowsで利用できる。
.NET Framework 以前のオブジェクト。新規開発は無いが過去の蓄積がある。
ファイル形式は拡張子.dll 以前のオブジェクト。新規開発は終わったが過去の蓄積がある。ファイル形式は拡張子.dll
である。
I○○というインターフェースをもち、GUIDであるクラスID、インターフェースIDがある。
全てのCOMに共通のIUnknownというインターフェースがあり、
当該COMに実装されたインターフェースの一覧を得ることができる。
COMはレジストリに登録される。
Administrator% regsvr32 /s xxx.dll
COMはC++をベースにBASIC,C#から利用できる(デュアルインターフェース)。
C++: IUnknownを継承したインターフェースを定義しCOMサーバを用意
IDispatchを実装したcoclassを用意し、IDispatchを介して呼び出す。
[例:VBScript]
Option Explicit
Dim obj
Set obc=CreateObject("Ichgo3.Logwriter");
obj.Write "ichigopack COM sample 3" & vbLf
COMオブジェクト, COMコンポーネント
COM仕様に基づいたオブジェクト、ActiveXとも呼ぶ。
C#の参照設定では、.NET と COMの他、個別のプロジェクト、ファイルがタブ選択できる。
.NET で参照できるものには、開発環境と共に提供・導入されたDLL群がある。
(C:\Windows\Microsoft.NET\Framework\V2.0.\System.dll, ・・・)
COMで参照できるものには、OSで提供されたDLL群がある。
(c:\Windows\SysWOW64\PortableDeviceApi.dll等)dll, tlb がある。
コンポーネントファイルとして、.dll, .tlb, olb, .ocx, .exe, .manifestを参照できる。
DirectX
3D画面表示機能で、COMインターフェースの形で提供されている。
ATL(:Active Template Library)
COM開発を簡単にするラッパー
AcriveXコントロールを作成するために使用される。
スマートポインタを使用する。
ActiveX Control, COM, 昔のOLE
IEに機能を追加する。ハードに直接アクセスするため高性能だが危険。
(例:Adobe Flash)
//レジストリから取得した情報を基にクラス内のメソッドを呼び出す。
シマンテックやトレンドマイクロのオンラインウィルススキャンサービスは、
ActiveXを使用している。現在ログオンしているユーザーがアクセス可能な
全てのファイルに自由にアクセスできる。それ自体がセキュリティホール。
ActiveXは大概、(1)ActiveX Controlを指すが、
他に(2)ActiveX Document(サーバ上のExcelデータを編集する)
(3)ActiveX Scripting(JScript, VBScript, PerlをIISやOFFICEで利用する)
(4)Active Server Pages(ASP)
ComPtr
IUnknown をラップするスマートポインタ
ATL CComPtr <atlcomcli.h>で定義している 。
WRL (:Windows Runtime Template Library)でも利用可能
<wrl/client.h> <wrl/wrappers/corewrappers.h>
RIA(:Rich Internet Application)
昔はActiveXにより、2015年頃からはJavaScriptやHTML5により実現
.NET
共通中間言語を用いて、異なるCPU、開発環境の共通基盤を構築する。
C,C++,VB、F#、Java,Python,PHP,Rubyから.NET向けプログラミングが可能
C++とC#は一つのビルドの中に混在させることができない
C#でDLL(クラスライブラリ)を作成し、これをC++から呼び出すことができる
(1) C++/CLI ビルドから呼び出す
(2) C#で関数をエクスポートする(GllExport.batを使用)
(3) COM参照可能にし、C++からCOM参照する
(4) C++/CLIでラッパーを作成し、アンマネージドから呼び出す
マネージコード
IL(中間言語)にコンパイルされる
.NETから呼び出せる
エクスポートできない。普通のC++から呼び出せない
アンマネージコード、ネイティヴコード
機械語(ネイティブ)にコンパイルされる
エクスポート(dllexport)でき、普通のC++から呼び出せる
C++/CLIで作成するDLLには、マネージドとアンマネージドを混在できる
C++/CLI:Pure では、マネージドだけを出力する。
CLR(:Common Language Runtime, 共通言語ランタイム)
.NET Framework を実行するための仮想機械
CIL(:Common Intermediate Language,共通中間言語)を
JIT(:Just In Time)コンパイラが、実行時にコンパイルする。
メモリ管理(ガーベージコレクション)、スレッド管理、セキュリティ等
VB(:Visual Basic)
インタプリタ言語
クラスライブラリ(IL.dll)を作成することができる
COMを利用することができる
CL(:Class Library) C#で作成したDLL
BCL(:Basic Class Library, 基本クラスライブラリ)
全てのCLI言語(C#,C++/CLI, F#,VB.NET等)の基本クラスとして以下の名前空間がある:
System
System.Collections
System.Diagnostics
System.Globalization
System.IO
System.Net
・・・
JCL(:Java Class Library)
MIDL(:Interface Definition Language インターフェース定義言語)
VSに付属した コンパイラ
インターフェース定義ファイル.idl をソースコードとする。
インターフェース.h とタイプライブラリ.tlb を出力する。
ADO(:ActiveX Data Objects)
(C:\ProgramFiles\CommonFiles\System\ADO\msado15.dll)(VC-4D.cppで#import利用)
VS
2005から、C++/CLI
2015から、Android, iOSのクラスプラットフォーム開発
個人であれば、Visual Studio Communityで開発・配布ができる
MONO
Android上で.NET Framework互換のアプリを動作させる実行環境(有償)
Unity (MONO開発環境)
Xamarin(C#と.NETでiOS, Androidを)
.NET のLINUX版を開発していた会社、Microsoftが買収
iOS版は開発までできるが配布にはMacが必要
Java 中間言語
Java仮想マシン(JVM, JM)の上で実行する中間言語。
1995年、Sun Microsystemsが開発、
2007年、AndroidではDalvic仮想マシンを用意し、Java APIを含めた
2010年1月にOracleがSUNを買収
同年、Oracleは無断使用としてAndroidを訴訟。
2012年の判決では敗訴。
其の後の控訴審ではJava APIは著作権が認められた。
2016年には、Java APIはフェアユースの範囲内と判定。
2018年3月控訴審では、フェアユースではないことに。
当時、BlackBerry、Danger、Nokiaなどの企業が、Java SEのライセンスを取得していたが、
GoogleがAndroidへのアクセスを無料で提供したことから、Oracleの顧客はJava SEのライセンスを取得することなく、Androidに移行した。
「ソフトウェアのインターフェースが著作物になる」という判断
Oracle、有償化、訴訟問題などで利点喪失。
COVID-19
2019年に流行したウィルス。印尼では流行しなかった。推定理由は、
@温度が高く、冷却装置が普及していないためウィルスが熱で死ぬ
1)
A蝙蝠、蛇、蜥蜴等の媒体がない
Bウィルスがあらゆるところに溢れている環境で免疫が既存
中国から避難したインドネシア国民238人と、避難にあたり接触した国軍兵士を、
リアウ州ナトゥナ諸島に隔離。なおこの付近は中国漁船の違法操業で警備強化されていた。
1) 推定の根拠と推定される論文:
Harper, G.J."Airborne micro-organism: survival tests with four virses"
J hyg Camb 59, pp.479-486, 1961
温°C相対湿度%→試験体噴霧から6時間後の生存率%(インフルエンザウィルスの場合):
7.0-8.0°C23-25%→63%
7.0-8.0°C51%→42%
7.0-8.0°C82%→35%
20.5-24.0°C20-22%→66%
20.5-24.0°C50-51%→4.2%
20.5-24.0°C81%→5.0%
32.0°C20%→17%
32.0°C49-50%→0.7%
32.0°C81%→Trace
喇叭法
以下の方法により、CLIを使用しない本体.dllからC#.dllを使う。
C#長調で暮らす、ライブラリ.dllを作成
全接続先のリストを報告する。
一つの接続先の先頭を報告1)し、終わりまで次を報告2)する。
一つのフォルダの先頭を報告3)し、終わりまで次を報告2)する。
(報告は、System::Stringからchar*に変換4)したものを返す)
C++/CLIで、喇叭.dllを作成
MTPクラスをメモリブロックとして作成する。
このメンバとして先頭と次のメソッドを実装する。
メモリブロックへのハンドルをグローバルに持たせられないため、
コンテナ5)の中にグローバルを封入する。
ライブラリを変えた場合、喇叭もビルドする。
C++按摩螺旋土から喇叭を吹く
LoadLibraryで喇叭.dllを読み込む。
GetProcAddressで、必要な関数を呼び出す。
1) FindFirst関数はデバイス番号整数値を引数として最初のコンテンツ文字列を返す。
2) FindNext関数は引数無しで、次のコンテンツ文字列が返す。
3) FindFirst関数はフォルダのID文字列を引数として最初のコンテンツ文字列を返す。
4) char*p=System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(s).ToPointer();
strncpy(buf,p);//bufはスタティック
System::Runtime::InteropServices::Marshal::FreeHGlobal(System::IntPtr(p));
5) ref class Kontena{public: static MTP^ mtp = nullptr;};
GetFirst(int device){
・・・
Kontena::mtp = gcnew MTP;
Kontena::mtp->init();
System::String^ s = Kontena::mtp->GetFirstFile(device);
・・・
return string;
}
FIT
固定価格買い取り制度:2012年度に42円/kWhから始まり、徐々に低下して21円/2020に(<10kW)
10-50kW1では、40から12、13に
ダブル発電では34から24に
この間、設置費用は40万/kWから、15万/kWまで低下
売電期間が終了すると、電力各社が7〜9円程度で買い取る
自家消費するのが経済的となる
例えば電気自動車が普及すると、ガソリン代の節約になる
蓄電池が高価であるため、夜間照明などには不経済だが、
バイポーラ型鉛蓄電池により、コストダウンの期待が高まっている。
古河電池の場合、縦300×横300×厚250mm 50Ah, 48V 4500サイクル
1日1サイクル行う電力貯蔵用では約15年
充放電電流は満充電と全放電をそれぞれ5時間で終えられる0.2CA
離隔距離が不要なのでリチウムイオン電池よりも設置面積当たりのエネルギー量は大
空調や温度管理も大幅に簡略化できる。
揚水式発電施設よりも割安。
マイクロ揚水発電は、100kW以下の規模
(ダイキン)
10kW未満:21円(全国一律)
10kW以上50kW未満:13円(自家消費要件あり、全量売電できない)
50kW以上250kW未満:12円
ソーラーシェアリング(営農型太陽光発電)
自家消費要件がないので全量売電もできる