プログラミング

「bash入門 (Nutshell handbooks)」本を読みました。

Linuxでお世話になっているbash。。。
でも、その機能を全然引き出せていませんでした。

今回の復習で、フロー制御、コマンドパラメータ展開、変数置換、ジョブ制御、並列化、readliine、などなど、その強力な力を知ることができました。

シェルでもスクリプトを色々工夫して組めば、よりLinux環境が快適になるんですね。

CUIやCLI自体は1974年のUNIX誕生以来あったわけですが、非常に今更ながらその機能を学ぶとともに、今日のPC環境の発展にともなった変化の恩恵を受け、新たなLinuxCUI・CLIの意義を知ることになりました。

今後ともぜひ、CUI・CLIの機能を発揮できますように。(^_^)

Angular2によるモダンWeb開発 を読みました

AnguralrJS2について、その立ち位置や大まかな概念の解説から始まり、具体的なコードを解説し、基本の分かるアプリの作成方法とコード、応用的なアプリの作成方法をコードが丁寧にな言葉で語られているため、とても読みやく理解がしやすかったです。
また巻末のanguryやaotやテストツール、npmバッチのチップテク紹介もお得でした。実践で役に立つと思います。^^
ありがとうございました。

JavaScriptプログラマのための 実践的TypeScript入門 を 読みました

TypeScriptの文法を一通り覚えるのによかったです。
特にソースコード例が秀逸で、JavaScriptとの違いがよくわかりました。
、、、ちょっと日本語は独特で、日本語の説明は流し気味に読んで、ソースコードであたりをつける、みたいな読み方をしていました。

改訂新版JavaScript本格入門 を 読みました

確かに本格派。JSとES6(ECMAJavaScript2015)について、どっぷり勉強できる。
余すところなく解説してあるので、これ1冊読んでればJSの基本は大丈夫。
後はネットで検索して調べる予定です。^^

ControlSavable 2015/2/21 | Visual Studio 2012 Pro用

VC++の練習をしています。

今回、テキストボックスのテキストやコンボボックスのリスト項目を全てSQLiteのデータベースにセーブ・ロードできるようにコントロールをカスタマイズしてみました。

ControlSavable

ControlSavable

http://ringing-web.com/wp-content/uploads/2015/02/ControlSavable_20150221_001.zip

↑ControlSavableのソースです。(VS2012Proのプロジェクトですが、ソースとライブラリだけ抜き出されてください。)

上記UMLに沿って、VC++で作ってみました。

あ、使っているSQLiteライブラリはKompexというものでGPLですので、ControlSavableもソースを公開しています。

以下、ソース抜粋です。

[cpp]
class AFX_EXT_CLASS IContolSavable
{
public:
IContolSavable(void);
~IContolSavable(void);
virtual void Save( CControlSettingsDAOContext& con ) = 0;
virtual void Load( CControlSettingsDAOContext& con ) = 0;
virtual void Save( CControlSettingsDAOContext& con, const CString& header ) = 0;
virtual void Load( CControlSettingsDAOContext& con, const CString& header ) = 0;
virtual void GetExt(CString& Ext)
{
Ext = _T("_EXT_");
}
};

class AFX_EXT_CLASS IHasName
{
public:
IHasName(void);
~IHasName(void);
virtual void GetName(CString& Name) = 0;
};

class AFX_EXT_CLASS IHasTextCollection
{
public:
IHasTextCollection(void);
~IHasTextCollection(void);
virtual void GetTextCollection(CArray& arrayTextCollection ) = 0;
virtual void SetTextCollection(const CArray& arrayTextCollection ) = 0;
};

class AFX_EXT_CLASS CControlSavableEnumAdapter : public IContolSavable
{
public:
CControlSavableEnumAdapter(void);
~CControlSavableEnumAdapter(void);
static void GetChildControlSavable( CWnd* pCWnd, CTypedPtrArray &objPtrArray );
private:
static BOOL CALLBACK EnumChildProc( HWND hWnd, LPARAM lParam );
};

BOOL CALLBACK CControlSavableEnumAdapter::EnumChildProc( HWND hWnd, LPARAM lParam )
{
CWnd* pCWnd = CWnd::FromHandle( hWnd );
CTypedPtrArray* pArray = (CTypedPtrArray*)lParam;
if( pArray == NULL ) return TRUE;

IContolSavable* pWndSavable = dynamic_cast(pCWnd);
if( pWndSavable == NULL ) return TRUE;

pArray->Add( pWndSavable );

return TRUE;
}
void CControlSavableEnumAdapter::GetChildControlSavable( CWnd* pCWnd, CTypedPtrArray &objPtrArray )
{
if( &objPtrArray != NULL )
{
EnumChildWindows(pCWnd->GetSafeHwnd(), CControlSavableEnumAdapter::EnumChildProc, (LPARAM) &objPtrArray );
}
}

class AFX_EXT_CLASS CControlSaveAdapter : CControlSavableEnumAdapter, IHasName
{
public:
CControlSaveAdapter(void);
~CControlSaveAdapter(void);
virtual void Save( CControlSettingsDAOContext& con );
virtual void Load( CControlSettingsDAOContext& con );
virtual void Save( CControlSettingsDAOContext& con, const CString& header );
virtual void Load( CControlSettingsDAOContext& con, const CString& header );
virtual void MakeKey( CString& key );
};

class AFX_EXT_CLASS CCollectionControlSaveAdapter : public CControlSaveAdapter, public IHasTextCollection
{
public:
CCollectionControlSaveAdapter(void);
~CCollectionControlSaveAdapter(void);
virtual void Save( CControlSettingsDAOContext& con );
virtual void Load( CControlSettingsDAOContext& con );
virtual void Save( CControlSettingsDAOContext& con, const CString& header );
virtual void Load( CControlSettingsDAOContext& con, const CString& header );
};

class AFX_EXT_CLASS CSavableButton : public CButton, public CControlSaveAdapter
{
public:
CSavableButton(void);
~CSavableButton(void);
virtual void GetName( CString& name );
};

class AFX_EXT_CLASS CSavableTextBox : public CEdit, public CControlSaveAdapter
{
public:
CSavableTextBox(void);
~CSavableTextBox(void);
virtual void GetName( CString& name );
};

class AFX_EXT_CLASS CSavableComboBox : public CComboBox, public CCollectionControlSaveAdapter
{
public:
CSavableComboBox(void);
~CSavableComboBox(void);
virtual void GetName( CString& name );
virtual void GetTextCollection(CArray& arrayTextCollection );
virtual void SetTextCollection(const CArray& arrayTextCollection);
};

class AFX_EXT_CLASS CSavableListBox : public CListBox, public CCollectionControlSaveAdapter
{
public:
CSavableListBox(void);
~CSavableListBox(void);
virtual void GetName( CString& name );
virtual void GetTextCollection(CArray& arrayTextCollection );
virtual void SetTextCollection(const CArray& arrayTextCollection);
};
[/cpp]