次郎Javaと違って変数の型の扱いが緩いので、取り扱いには注意しなければいけないのが難点でしょうか。実際に実行される段になってようやくエラーで止まる...ということがよくあります。パラメータで渡ってきたオブジェクトの型チェックを行いたい場合は、typeofやprototypeを用いて型を確認するのが良いようです。true作り込みバグには気をつけなければいけませんね。会社のWEBサイトのサイバー攻撃対策はどのようにしていますか?そう聞いてもサーバー管理会社に任せているって回答になりますよね。サーバー管理会社はどのようにWEBサイトを守ってくれているのかまでは知らないことが多いと思います。サーバーのセキュリティって皆さんのイメージはどのようなものでしょうか?Firewall(ファイヤーウォール)をイメージされますよね。Firewallなどを思い浮かべると思います。ネットワークに詳しい方ならば、IPS、IDSといったものも思いつくかもしれませんね。現在の日本におけるサーバー環境のセキュリティの大半はFirewall、より強固なところでIPSが導入されているといった状況です。昨今のサイバー攻撃は多様化しており、これらの対策だけでは不十分になってきています。ところが、日本企業において、セキュリティ強化はコスト増大と考えられ、上記のような対策にとどまっているのが現状です。注目すべきは、昨今のサイバー攻撃はFirewallやIPSでは防げないSQLインジェクション攻撃、XSS、ランサムウェアが増えているということです。これらを防ぐにはアプリケーションで対策をせねばならず、しかし対応がおいつかない、コストがかかるなどで対応が後手になっています。Firewall)を用いたセキュリティ対策です。Firewall防御対象:ネットワークL4レイヤレベルで通信元、通信先の組み合わせで防御するもの。通信における送信元情報と宛先情報(IPアドレス・プロトコルTCP/UDP等・ポート番号)を基にアクセス制御をおこなう。System)防御対象:サーバーシステム攻撃パターン(シグネチャ)に一致する通信をみつけて防御するもの。OSの脆弱性を悪用する攻撃やファイル共有サービスへの攻撃を防御。Active-Xを悪用したり、WEBサーバーの脆弱性を悪用する攻撃を防御。IDSは検知し通知するまでの機能をもつもので、防御はおこなわない。Firewall)防御対象:WEBアプリケーションHTTP/HTTPSプロトコルの通信をL7レイヤレベルで防衛するもの。SQLインジェクション、クロスサイトスクリプティング(XSS)などWEBアプリケーションへの攻撃を防御。WEBアプリケーションのパラメータを悪用する攻撃を防御。cookieを悪用する攻撃を防御。参考サイバー攻撃されてからでは遅いWAFはWEBアプリケーションに特化したL7レイヤーの防衛方法です。保護するソフトウェア、またはハードウェアです。リケーションの実装面での根本的な対策ではなく、攻撃による影響を低減する対策です。イトと利用者間の通信の中身を機械的に検査することでサイバー攻撃を防ぎます。サイバー攻撃を受けてからアプリケーションを対策修正していては、時間がかかります。その間にシステムは利用できなくなり、攻撃もやみません。WAFを導入しておけば、素早く対策が取れるというメリットがあります。IPAからも紹介されていますので一度ご覧ください。導入・運用コストが普及を妨げるサイバー攻撃の対策はネットワーク技術者、サーバー技術者が主に対応しますが、WAFはFirewallやIPSとは異なりネットワーク・サーバー技術者だけでは運用できません。WEBアプリケーションへの攻撃を防ぐという特徴からWEBアプリケーションの開発者の協力が不可欠です。対策をするWEBアプリケーションの特徴に合わせて防衛シグネチャを構築する必要があるためです。アプリケーションは頻繁に更新されますから、都度シグネチャの見直しが発生します。そのため、WAFを導入したら終わりというものではなく、導入してからの運用コストも考えなければなりません。このことが普及を妨げている理由だと考えています。金WEBページを作成する上で理解が必要なCSSだが、そもそもCSSって何なの???という状態の解消から、これ便利なんじゃない?にいたるまでどんなページをみて、どんな理解をしたのかをずらずらずらとメモしていこうかなと。私はそもそもイメージが沸かないと頭に入ってこない場合が多数。検索→説明文ヒット→いまいちイメージつかない→そもそも全体像は?(全体の中の役割は?)と実際なっていたので次に検索して理解しやすかったのはコチラ↓http://www.cyber-concierge.co.jp/pc_tama/css/css.htmlこれをみると、なるほどそうか、それぞれが役割もってがんばって表示させているんだなとなんとなく理解。HTML:WEBページの枠組みとか構造CSS:色とか文字の大きさとか装飾Javascript:クリックしたらどうとか複雑な動きここまでくると、じゃあようやくCSSのできることできないこと云々かんぬんに進める状態。WEBページを装飾していく中でCSSでできることは何だろう???CSSでできることリスト↓http://www.htmq.com/style/index.shtmlCSS3でできることリスト↓http://www.htmq.com/css3/index.shtmlここで出てきたCSSとCSS3。初心者を悩ませるこのバージョンの違いは何なんだ、、、という疑問を抱いてしまい、やっぱり検索。(=書き直す必要がない)2HTML5とセットではない3今すぐ使えるふむ。1と3から分かることはCSSとCSS3は別物という考え方ではなく、追加でできること増えましたっていうことですね。(2についてはまた話が膨らむのでまた別記事で)ってことは!基礎を学ぼうと思えば、CSSで検索ヒットした内容をみていけばよいとすっきりしました。初心者ってどの情報が正しいかの判断がまずつかないのが勉強方法難しいところだなあ。CSSの基礎ってなんだろう?まずは書き方かな。文法とそれぞれの意味を知らなくては読み解けないから、、、http://www.d3.dion.ne.jp/~tiyoko01/style/style3.htmlセレクタと属性と属性値なるものを書けばよい。装飾する範囲と範囲のどの部分をどうするかを書けばよい。これで大体読み解けそうだなってとこまでこれました。実際に反映させてみたい。そのほうが手っ取り早い!ということで、どうやってHTMLのベースのところにCSSの装飾を反映させるの?ってなるんだけれども反映のさせ方は種類があるようなのでまた検索。http://qiita.com/kikako/items/580039de452de909d82d3種類かあ~。それぞれにメリデメがあるみたいだけれどそれはまあ追々。今回はhtmlファイル1つとCSSファイル1つ作成して、htmlファイルに外部ファイルとしてCSSファイルを読み込ませる。して文字コードをUTF-8にして保存。次に新しくメモ帳をひらいて、htmlファイルで読み込ませたファイル名と同じ名前(style.css)のCSSファイルを作成して保存。royalblue;}保存したhtmlファイルをクリックして実行すれば、CSSファイルの内容が反映された背景の色が青い文字が登場します。ここまででCSSについての理解は大体できました!あとはどんなことできるのかなあ~~~~~ってわくわくしながら調べてサンプル作っての楽しい時間です。今回は実際にデザイン通りに作っていくタイミングで検索検索した結果、これは便利そうと思った内容をご紹介。大きな違いはなく、バージョンが上がることでできること増えたよという内容でした。そのCSS3でできることの一つに、HTMLの記述順に関係なく自由に表示順を変更できるCSSという情報を見つけました。そもそもHTMLも初心者だったので、HTMLの順番で表示するというなんとなくの理解とhidden使ってscriptで画面表示切替はできるなっていうアイデアしか頭になかった。最近はスマホの普及でレスポンシブデザインを知らぬ間に目にしていて今回のWEB画面の用途はPCのみなので、特にこのレスポンシブデザインを組み込む予定は無いけれどこれできたら、自由自在だなあ。簡単にできそうだなあ。なったのでブックマークに追加して個人メモにしておいた。flexbox(フレキシブルボックス)を追加するだけでできちゃうレスポンシブデザイン。土とあるシステムのWEB画面を改修していたときのこと。使っていたのはjavaのeclipseで、既存システムのjsファイルに新規システムの内容を追記して反映させようとした。ところがどっこい、いざWEB画面を更新してみてもなんにも変化がない、反映されていない。eclipseでソースをクリーンしてみたりしてみたものの、やはり変化がない。これはなんだろう、見てるjsファイルはこいつじゃないのか?などと、んーんー唸って時間が過ぎていた。一人で唸っていても埒が明かないので人に聞いてみたところ、更新前のキャッシュが残っていてそのキャッシュを利用しているから変更が反映されていない、ということだった。言うことでひとまずの解決案として、ブラウザのキャッシュをクリアすることに。それによってめでたくjsファイルの変更は反映されましたとさ、終わり!!ってタイトル回収できてないよ!!ブラウザのキャッシュをクリアしたら、変更したjsファイルが反映される。いちいちそんなことしてたら面倒くさいよね、キャッシュを有効にしつつも変更したファイルを反映させる方法があるらしいよ!やったことないけどね!!と、私に教えてくれた人は言いました。これは調べてみるしかあるまいて。本題の前にそもそもキャッシュってなんだっけ?こういう調べものをするたびに、ところどころに「これなんだっけ?」っていうのがある。今回で言うと、キャッシュ。なんとなーくわかるんだけど、どういうものだっけ?ってなる。以下、キャッシュに対する自分的解釈。キャッシュとは、データへのアクセスを速くするために記憶領域にデータを一時的に保存しておくもの。新たにデータを作成してという順序が必要なくなるので、その分だけ処理を速くすることができる。今回の場合は、変更する前のjsファイルデータがキャッシュに保存されていて、そのデータを使用して処理を行っていたために、変更したjsファイルデータが反映されていない状態となっていた。開発をする際にはそのキャッシュが邪魔になってしまうということ。いうことで合っている、はず!対象ファイルのみ修正するそんなこんなで本題です。調べてみたところ、変更したjavaファイルに変更日付を自動的に取得させてしまうという方法があった。この仕掛けをjavaで作ってしまえばいいんですね?ファイルの変更日付が変更されれば、パラメータも同時に変更されるというもの。以下のjavaソースが、参考にさせてもらったサイトにあったものです。timestampFormat.format(lastModified);}}そして、読み込み側のjspを以下のようにする。rel="stylesheet">これで、変更したファイルの日付が変わるとパラメーターも同様に変わるので、確実にファイルの変更が反映されることになる。いうことが出来るようなので、JSPやjavaで開発しているときには利用してみるとストレスがなくなると思う。cssやjsファイルを変更する度にキャッシュのクリアなんてしていたら面倒ですもんね。以下、参考にさせて頂いたサイト様。UPDATE文、DELETE文などがあるが複数の更新処理を連続して実行し、1つの関連性のある集まりとして簡易する場合、トランザクションという概念が必要になる。注文テーブルに商品数を登録し、在庫テーブルから商品数を減らす。品数が減らずデータ(商品個数)に不一致が発生する。このようなケースではトランザクションを使うと問題を解決することができる。上の例では注文と在庫の管理を1つのトランザクションとしてまとめ全ての更新に成功した場合のみ、商品の注文/在庫の個数を確定する。処理が途中で失敗した場合、全ての処理が取り消される。このため商品在庫数に変動はなく、データの整合性が保たれる。これらはACID特性と呼ばれるトランザクション処理の信頼性を保証する性質である。分散トランザクションとは1つのトランザクションが複数のデータベースに対してアクセスするトランザクションのことである。合、図Aのように原始性を損なう問題があった。データベースBに対してコミットが成功し、データベースCに対してコミットが失敗した場合、データベースCに対してロールバックを実行してもデータベースBに対する変更までもロールバックできない事態が考えられる。■分散トランザクション(2フェーズコミット)先の分散トランザクションの問題を解決するのが図Bに示す2フェーズコミットである。フェーズ1では各データベースに対してコミット可能か状態を確認する準備の指示を送る。これを受けたデータベースはコミット可否をアプリケーションに伝える。コミットできる状態であればアプリケーションに「準備完了」を伝える。コミットできない状態であればアプリケーションに対して「拒否」を伝える。フェーズ2では、フェーズ1の各データベースの返答をもとにデータベースに対してコミットかロールバックの決定を行う。全てのデーターベースから「準備完了」の返答を受け取った場合のみ、各データベースに対してコミットの指示を送る。この指示によってトランザクションがコミットされる。1つでも「拒否」の返答があった場合、全てのデータベースに対してロールバックの指示を送る。このように2フェーズコミットはコミットのための準備とコミット処理を行う実行を分けることによってトランザクションの原始性を保証している。■トランザクションマネージャ先に説明した分散トランザクションを実行するにあたってアプリケーションからトランザクションの制御を切り離し別のコンポーネントに任せたトランザクションマネージャと呼ばれるものを照会する。トランザクションマネージャの導入により、アプリケーションから2フェーズコミットの処理が隠ぺいされたことにより、分散トランザクションを単一のデータベースにおけるトランザクション処理と同様な手順でコミットできるようになる。■X/OPENのDTPモデル複数のデーターベースを利用する場合、そのインターフェースが統一されていないと連携がとれない。X/OPENの分散トランザクションは、分散トランザクションに関するインターフェースを標準化することでこの問題を解決することができる。●アプリケーションシステム利用者が高級言語で作成するプログラムのこと。●トランザクションマネージャトランザクションを管理し、データベースの更新情報をもとに一貫性を保守する。●リソースマネージャデータベースのこと。■TXインターフェースアプリケーションからトランザクションマネージャへトランザクションの開始/終了を指示する。■XAインターフェーストランザクションマネージャとリソースマネージャでデータベースの更新情報の同期をとる。■SQLデータベースを操作するSQLのこと。金C++でWindowsのファイル操作を行うとき、意外と困るのが「フォルダの削除」です。Windowsの一番基本的なAPIから、以下の機能を組み合わせて使用します。指定フォルダ内のフォルダ、ファイルを1つずつ取り出す(FindFile()、FindNextFile())ファイルを削除する(DeleteFile())"空の"フォルダを削除する(RemoveDirectory())ここで重要なのは、フォルダ削除に使用するAPIが、"空の"フォルダしか扱えないということです。「フォルダの中にある全てのファイルを削除してから親フォルダを削除する」ということはすぐに思いつくでしょう。フォルダ削除()という関数にして、中にある要素がファイルなら削除、フォルダならそのフォルダパスを引数にしてフォルダ削除()と呼ぶだけです。あとちょっと面倒くさそうなのは、「指定フォルダ内のフォルダ、ファイルを1つずつ取り出す」という部分だと思います。FindFile()の引数にフォルダパスをそのまま渡してもファイルを列挙してくれません。"\\*.*"というワイルドカードをフォルダパスの後ろに付けることで、そのフォルダ内の全ファイルを列挙してくれるようになります。ここまでの部分を理解したうえで、「こういうパターン化された処理は、誰かがソースコードを公開しているだろう」と検索をするのはよくあることではないでしょうか。そのほうが自分でひとつずつコーディングするよりもはるかに速くできるということを、経験している人も多いと思います。フォルダ削除」と検索すると、そのようなことをしているソースコードがすぐに見つかります。ここで見つかったソースコードを手元でそのまま使用しては、絶対にいけません。呼び出し元のプログラムがしっかりと作られているときは、いらないフォルダを削除するためにこのフォルダ削除処理を呼び出し、問題なく指定したフォルダの削除に成功するでしょう。プログラムの開発段階において、そういつも正しく実行できるとは限りません。このフォルダ削除呼び出しの引数に「空文字」を指定したらどうなるでしょうか?フォルダの削除を目的とする処理なのに引数にフォルダパスになる文字列が来なければ何もせずに処理を終わればいいと思うのですが、検索して見つかるソースコードにそのようなチェック処理はほとんど入っていません。FindFile()の引数が"\\*.*"だけとなるのですが、これはどこかのフォルダ内ではなく、ドライブの最上位パスから検索を開始するという動作になります。いうわけで、単にフォルダ削除処理の呼び出しをミスしただけのことが、ドライブ内全ファイル削除という暴走処理になってしまうことがあるのでした。私ではないのですが、これをやらかしたメンバーは、動作確認中に応答待ちになって待っていて「なんとなくファイルが減っていっている気がする」と言い出して気づいたときには数割のファイルが消えた後だったということです。みなさん本当に気をつけましょう。土はじめにプログラムに関わりはじめてから2年ぐらい経つ。画面があるプログラムに関わったことは一度もない。画面があるプログラムについて知りたい。C#の知識が主なので、C#で作成したい。そこで、WPFについて学んでみようと思った。・WPFの概要を知る。3.0以降に含まれるプレゼンテーション層技術(GUI開発ライブラリ)。・コアの部分にグラフィックス・ハードウェア(GPU)を活用したベクター・ベースのレンダリング・エンジンを採用。→ベクタ形式で画像処理を行う。拡大縮小や画像サイズが見た目の大きさに依存しない。動画などのメディア、リッチテキスト(RTF)などの整形済み文書に対して、統一的な開発機能を提供。→とにかく幅広く対応できる。Language)と呼ばれる、XML形式の宣言的言語を用いてユーザー・インターフェイスを記述する。→見た目(=外観デザイン)に関する部分をXAML言語で記述し、ロジックをC#言語などを用いて記述することで、アプリケーションの見た目に関する部分をロジックから完全に切り離す構造になっている。・階層構造を把握しやすい<メモ>画面レイアウトで、ボタンとかをドラッグ&ドロップで置いたら、XAMLコードが自動生成される。・ツリー構造のUI要素<利点>・要素の親子関係によって柔軟に変更可能<メモ>例えば、親要素が回転したら、子要素も回転する(親の位置に依存する)ということらしい。・データ・バインディング(ビューとモデルを分離するための仕組み)<利点>・ビューとモデルの接点が1点(DataContext)で済む・ビューの内部には一切ロジックを持つ必要がない<メモ>例えば、画面の色変えたいときに、内部ロジックで色を使用していたら、画面とロジックの両方で修正が必要になってしまう。→拡張性低い、保守性低いDataContextはobject型でなんでも入るらしい。Formsを思いつくと思う。FormsではなくWPFを選んだのか?両者を簡単に比較してみる。カスタマイズが困難カスタマイズが容易タッチパネル対応カスタマイズが容易に越したことはないので、やはり、WPFの特徴でもあるバインディング機能が、魅力的にみえる。Formsのほうがよいとも思っていた。UPWなどが全部XAMLを使っているということがわかってきたので、今後のことを踏まえWPFを選択した。MVVMとは?話を戻す。WPFの特徴がなんとなく掴めたところで、ビュー、モデルといった単語が出てきた。プログラムの構成を、ビューやモデルとして分けて考えることが大事なようだ。プログラムの構成モデルにはMVC,MVVMなどがあるが、WPFは、MVVMを基本とする。MVVMとは何か?・MVVM(Model-View-ViewModelの3つの部分に分割して設計・実装するもの。)正直、まだこの部分については理解できていない、、。画面とロジックは完全に分離、ロジックだけで単体テストが通ることが望ましいという感じか?以下サイトで、MVVMパターンで作成されたサンプルコードを見ることができる。イメージは掴めるかもしれない。その1「シンプル四則演算アプリケーションの作成」https://code.msdn.microsoft.com/windowsdesktop/MVVM-d8261534サンプルで学ぶ~百聞は一見に如かず~ここからは自分でサンプルを作成し、理解を深めてみる。World(-ω-)/新規プロジェクトの状態。MainWindow.xamlとMainWindow.xaml.csが勝手に作成されてる。あと、すでに初期のXAMLコードが作成されてる。この時点のXAMLから理解していきたい。JavaScriptの知識があると難易度が下がるそうだが、あいにくどの知識もないため、XML風の謎言語といった感じである。そこで、調べたことを整理していく。タグなので、Windowsクラス。XML名前空間なので、名前空間(※)。属性なので、プロパティ(すでに値が設定されている)。タグなので、Gridクラス。クラス群)の2種類のタグがある。WPFで定義されたタグ(クラス群)。試しにLabelをドラッグ&ドロップ。Helloにしてみる。次に、Helloプロパティを追加。DataContextがビューとモデルの接点とのことなので、DataContextに自分を設定。(自分を設定するのはHelloを自分が持っているから。別クラスならそのクラスを設定する)ちなみに、Bindingできるのはプロパティだけなのでフィールドとかはダメらしい。あと、publicじゃないとダメらしい。おわりに本当はもう少しアプリらしいサンプルも作成する予定であったが、なかなか難しく作成まで至らなかった。次は、MVVMを意識して、アプリ作成に挑戦してみたいと思う。月SVGという画像フォーマットSVGは、XMLベースのベクター形式画像フォーマットです。要するに、以下の特徴があります。svgタグをHTML中に埋め込むことができます。/></svg>JavaScriptで動かすJavascriptでDOM操作をすることで、動的に変更することができます。/></svg>CSSを適用するSVGの要素自体にCSSを適用できます。オートフィルターを操作する方法について調べる機会があったので、その内容をここにまとめておく。オブジェクトの選定方法については後述。Criteria1:=">10"ただこれだけだと、ワークシート内で既にオートフィルターが設定されている場合に問題が起こる。オブジェクトが無視され、設定済みのオートフィルターでフィルタリングが行われてしまう。いう場面にも対応するには、事前に「オートフィルターを解除する」コードを忍ばせておく。メソッドを呼び出していた。範囲がフィルタリングされるのであった。これは、表内の別のセル(たとえばB7とか)を指定しても同じである。この挙動は「データ範囲の自動認識」によるもの。セルの書式とか、セルに値が入っているかどうかなどを見て自動的にどこからどこまでが表かを判断してくれている。詳しい仕様は以下のページを参照https://support.microsoft.com/ja-jp/help/814229http://www.eurus.dti.ne.jp/~yoneyama/Excel/yakusoku/range.html「データ範囲の自動認識」は、セルを1つだけ選択してオートフィルターを適用した場合にのみ働き、セルを2つ以上選択してオートフィルターを適用した場合は働かない。Criteria2)には、以下6種類の比較方法を指定できる。以下"<=xx"また、ワイルドカードと組み合わせて以下のような条件も表現できる。関数の条件式に指定できる内容と同じ。←これところで、少し気になったことがあったので実験。以下のようなデータを用意(ちなみに、昇順にソートしてある)。これを、(まずはVBAを使わず手動で)「=b(イコール・ビー)」「より大きい」でフィルタリングしてみる。予想では、昇順に並べて「=b」「より大きい」データ...即ち「=c」「a」「b」「c」の4つが引っかかるはずである。実際は、「b」「c」の2つしか引っかからなかった。フィルターオプションを開き直してみると、さっきと内容が違っている。コードを吐かせてみると原因ははっきりしており、当初「=b」「より大きい(>)」のつもりで設定した条件が、実際は「b」「以上(>=)」と解釈されてしまうため。よる解釈はこっちエスケープする方法とかないのかと探してみたが見つけられず。条件を指定してやることになるか。Serverの負荷テストで大量のデータを作成しないといけなくなり、できるだけ高速で作成する方法を探してみました。単純にループを使用して100万件のデータを作成するSQLを作成してみました。END上記SQLを実行した結果。ループ処理で100万件データを作成した結果、処理時間は3分6秒でした。1000万件のデータを作成しようとした場合、単純計算で30分かかります。テーブル数が多い場合やデータ件数が増えてしまうと、実用的には厳しい感じです。他にいい方法がないかと調べた結果、再帰クエリを使用した場合、飛躍的に高速でデータが作成できました。上記SQLを実行した結果。再帰クエリを使用して100万件のデータを作成した結果、処理時間は9秒でした。この方法だと、1000万件のデータでも90秒で作成できます。1億件でも約15分程度で作成できることになり、実用的なレベルで使用できると思います。上記SQLでも十分かなと思っていたのですが、もう一工夫することでもっと早く作成できることができました。上記SQLを実行した結果。先ほどの再帰クエリを修正して実行したところ、100万件のデータを作成する処理時間は4秒でした。1000万件でも約40秒で作成できることになり、ループを使用して作成するより圧倒的に高速でデータが作成できるようになりました。ストアドプロシージャにしてテーブル名や作成する件数を変数化してやればもっと汎用的に使用できるようにもなり、データ作成も高速に行えると思います。木1.C言語は時代遅れの言語か?●なぜいまだにC言語がつかわれるのかC言語が世に出たのは、1972年で、現在使われている言語のなかでは、かなり古い言語に分類されます。パソコンやWeb、スマートフォンなどといった分野でも、JavaやPHP、C#などといった新しい言語が主流になり、ともすれば、C言語は必要ではない古い言語ではないか、と思われがちです。C言語というのは不思議な言語で、C言語が世に出た当時も、そして、その後今に至るまで、数多くの「C言語よりも優れている」と思われる言語が出現してきたものの、結局生き残っているのです。C言語と同時期、もしくはそのあとに出てきて、一時的にC言語よりも広く使われていても、その後廃れてしまったり、ほとんど使われなくなった言語は非常にたくさんあるのです。してそんなにC言語は長い間使われ続けているのでしょうか?●C言語の歴史まずは、そもそもC言語とはいつ、どのようにして開発されたかということについて説明しましょう。前述のように、C言語は1972年に開発されました。Thompsonらと共同で、ミニコンピュータのオペレーティングシステムであるUNIXの開発に携わっていました。このOSは、初期の段階ではアセンブリ言語を用いて開発されましたが、その後、C言語で書き直されました。UNIXを移植するために開発されたのがC言語なわけです。そのためC言語はUNIXの副産物であると言えるでしょう。いったこともあり、UNIX上で動作する多くのアプリケーションも、C言語で開発されることになりました。その勢いはとどまるところを知らず、次第に大型コンピュータやパーソナルコンピュータの世界にも普及していったのです。●C言語はこまわりがきくこの当時、C言語以外にも様々なプログラミング言語が存在していました。それにもかかわらずC言語がこのように爆発的に普及したのでしょう?理由の一つは、C言語の「コンパクトさ」にあるでしょう。JavaやC#などといった言語は、C言語の欠点を補う様々な改良がなされていますが、実行に独自のフレームワークを必要としたり、同じような処理を行うにしても、C言語にはスピードの速さや、コードのコンパクトさの面でかなわない、という特徴があります。詳しく言うと、C言語によって生成されるアセンブラのコードのサイズが小さいため、スピードが速いうえに、メモリの使用も最低限で済ませることができるからで、これに関してC言語に取って代われる言語はほかにないでしょう。いったことから、OSなどの心臓部分を記述するのは、相変わらずC言語です。組み込みプログラミングと言って、家電製品や自動車の制御装置など用いられているコンピュータは、相変わらずC言語が用いられています。小回りが利いて、スピーディーであり、それでいてアセンブラほど難しくないというのがC言語の特徴であり、その利点を生かせる分野では、C言語はまだまだ現役バリバリで活躍中です。●OSも、プログラミング言語も最後はC言語が必要そういったことから、Ruby、Java、PHPなどといった言語のようなC言語よりもかなり後にできた言語のコンパイラーやインタープリタも、実はC/C++言語で記述されています。同様に、サーバー系のOSとして主流である、Linuxも、「カーネル」と呼ばれる核になる部分はC言語でなくては記述できません。その他、WindowsやMacOSなどといった、主要なOSも、期間部分はC言語で記述されています。いったことからも、C言語がまだまだ必要であり、かつ現役のプログラミング言語であることがよくわかると思います。●過去の蓄積も豊富またもう一つの理由は、「過去の遺産の多さ」です。C言語は、後継言語であるC++言語によって、オブジェクト指向という新しい考え方のプログラミングでも用いることができるようになりました。C++言語の最大の特徴は、C言語のソースコードをそのまま流用できることにあり、過去の遺産を継承しつつ、オブジェクト指向という新しい技術に対応できるようになっているのです。いったこともあり、C言語は、長い間使いづけられ、その結果、ソースコードやノウハウが蓄積し、よりプログラマーにとって利用しやすい言語となって生き残ってれこれたのです。2.なぜ、C言語っていうの?●C言語の名前の由来C言語という名前を聞いて、「なぜそんな名前なの」と、疑問を持った人も少なくないでしょう。実は、この「C」という言葉が言語に採用された理由は、「その前にB言語という言語があったから」ということが大きな理由です。B言語とは、1970年にケン・トンプソンという人が、PDP-7というコンピュータ上で最初のUNIXシステム用に開発したプログラミング言語です。Language)という言語を元に開発されたものなので、この推理は間違いです。C言語は、明らかにB言語の後継の言語として作られたもので、その点に関しては、C言語の作者自身が明らかにしているので、間違いないでしょう。●B言語との違いB言語には、実行環境に依存しないという特徴があり、その点はC言語で受け継がれています。B言語は、もともとC言語と違い、「型の指定」がありませんでした。これは、現代の様々な言語の先取りをしているといえますが、C言語はあえてこの考え方を捨てました。これにより、B言語のプログラマーが意識しなくてもよかったデータの「型」というものをプログラマーが自分で意識しながらプログラムをする必要が出てきました。これは一見、言語としてはB言語よりある意味では後退している、と言えなくもありません。結果的にこれがC言語を普及させるうえでプラスになった、と言っても過言ではありません。れこによりプログラマーは、よりアセンブラに近いコードが記述できるようになり、コンパクトで効率的なプログラムを記述できるようになったのです。当時のコンピュータの性能は現在のものとは比較にならないほど低かったため、こういった現実的な対応が、結果としてはC言語の普及に拍車をかけたといえるでしょう。●かつて全盛を極めたC言語C言語が誕生したときには、すでに沢山のプログラミング言語が存在し、C言語よりもはるかに普及していたものもありました。C言語はそれらを押しのけて、やがてプログラミング言語の中でもっとく普及する、いわば「プログラミング言語の王者」となります。この時、言語としてはC言語よりも完成度が高い言語はほかにも生地にも存在していたにもかかわらず、です。一体、なぜそのようなことになったのでしょうか?理由はいろいろありますが、その一つはC言語がUNIXとセットになっていた点にあるでしょう。その後、UNIXはコンピュータのOSの主流として大いに普及していき、それとともに、C言語もそれと伴い、広く使われるようになりました。UNIXをまねて作られたマイクロソフト社のMS-DOSの普及もまた、それに拍車をかけました。MS-DOSは、当時主流だったパーソナルコンピュータ、IBMのIBM-PCの主要OSとして普及し、そのプログラミング言語としてもっともよくつかわれていたのが、C言語でした。この、マイクロソフトのMS-DOS(または、PC-DOS)と、C言語の組み合わせは世界中に普及し、ほぼ「デファクトスタンダード」と言ってもいいような組み合わせとして存在していました。当時のパーソナルコンピュータは、現在のコンピュータほど性能が良くなかったために、高級言語で高パフォーマンスの言語を作れるC言語は非常に重宝されていたのです。現在、C言語は、いわば「歴史的役割」を終えて、主要なプログラミング言語の第一線を退いていると言えます。その後継の言語はまだまだ現役で使用されており、そういった意味でC言語の存在感は失われていないと言えるでしょう。C言語の直接の後継言語は、C言語にオブジェクト指向の考え方を導入したC++言語です。同じような意味でアップル社で開発されたObjective-Cもまた、オブジェクト指向のC言語の直接の後継言語といえるでしょう。直接の関係はありませんが、Java言語も、文法の仕様などでC言語の営業をかなり受けており、C言語を覚えたプログラマーにとっては非常にとっつきやすい言語使用になっています。マイクロソフト社が開発したC#言語も、C/C++言語の後継言語として開発され、現在では主流のプログラミング言語として君臨しています。このように、現在使用されている主要なプログラミング言語はほぼすべて、C言語の後継か、強く影響を受けた言語だということがよくわかります。●バッファーオーバーフローとは何か?アプリケーションソフトにセキュリティホールが見つかって、「悪意のあるコードが実行される可能性がある」というような内容のニュースを聞いたことがある人は少なくないでしょう。そもそも、この「悪意のあるコード」とは一体何なのでしょうか?コンピュータウイルスやワーム、バックドア、キーロガーなどが代表的で、情報システムや提供するサービスの妨害など、悪影響を及ぼすコードが含まれるプログラムのことで、文字通りシステムに「害悪」をもたらすことを目的とした者によって作成されたプログラムのことです。いった悪意のあるコードが、システムを攻撃する手段としてよく用いられるのが、この「バッファーオーバーフロー」という手法なのです。●バッファーとその仕組みバッファーオーバーフローについて説明する前に、そもそも「バッファー」とは何かということから説明しましょう。コンピュータのプログラムは、情報を格納するための領域をメモリ上に確保します。文字情報を格納する場合、その文字数に応じて連続したメモリ領域を確保します。このように、同じ形式のデータを複数個格納するためにメモリ上に確保する領域のことをバッファ領域と言います。バッファへの情報の格納方法としては、ネットワークからの入力、ファイルからの入力、キーボードなどの入力デバイスを介してのユーザーからの入力などがあります。●バッファオーバーフローの仕組みしかし、言うまでもないことですがこのバッファーの容量には限界があります。バッファ領域の上限はプログラムが規定出来ても、プログラムを実行するCPUはバッファ領域の上限がわかりません。そのため、情報をバッファ領域に格納する際、格納する情報の大きさがバッファ領域の上限を超えてしまうことがあります。すると、CPUはバッファ領域を超えて情報を格納してしまいます。これが、バッファーオバーフローです。バッファオーバーフローが起こってしまうと、メモリ上の不正な場所に情報を格納することになってしまうため、プログラムが誤動作したり、ほかの領域に保存されている大事なデータを破壊してしまったりします。●バッファーオーバフローによるセキュリティーホールクラッカーは、このバッファオーバーフローをわざと起こしてデータの改竄・コンピュータシステムの損壊につながる操作をおこなうことから、ソフトウェアでバッファオーバーフローの脆弱性が発見されると、高い優先度で修正が行われ、更新バージョンのプログラムや修正パッチの公開・配布などが行われます。それだけ、バッファーオーバフローによる攻撃はやっかいなのです。実はC言語は、このバッファーオーバフローが起こりやすい仕組みを持っている、という致命的な欠点を持っているのです。C言語の標準入出力関数であるscanf関数やgets関数はバッファ長のチェックを行わないで標準入力をバッファに書き込むので、バッファーオーバーフローを起こしやすくなっています。C言語の歴史はたいへん古く、インターネットが現在のように普及するはるか以前に作られた言語ですから、言語の仕様の中にそういった欠点があるのはある意味仕方がないのとかもしれません。いったこともあり、C言語は新しいバージョンであるC11でこういった問題に対処するために、gets関数を排除するなどの対策をしています。メールサーバーなどで用いられるsendmailと呼ばれるプログラムは、C言語でかかれ、古いライブラリ関数を多用していることから、頻繁に修正されていましたが、ついにはセキュリティ上の問題などでsendmailを標準プログラムから排除する動きがあり、いくつかのOSの標準セットからsendmailは取り除かれてしました。●セキュアなコードこういったバッファーオーバフローなどによる脆弱性への対策を行っているコードのことを、「セキュアなコード」と言います。そのようなコードのプログラミングを行うことを「セキュアプログラミング」と言います。セキュアなコードをかくための方法は大きく分けて二つあります。一つは、従来の枠組みのなかでできるだけ「セキュア」にプログラミングをする方法、そしてもう一つは「セキュアな関数」を用いてプログラミングを行う方法です。マイクロソフトは、自社が開発したVisualC++コンパイラで、危険性のあるscanfのかわりに、scanf_sという「セキュアな」scanfを用意して、バッファーオーバランを回避する工夫をしています。これにより、以前よりもセキュアなコードを作成しやすくなりましたが、「完全」な対策を行うことは不可能です。セキュアなコードをかく方法に関しては、研究が進んでおり、ネットなどでも多くの情報を得ることができます。プログラマーは、そういった情報を絶えずチェックして、脆弱性の低いプログラム作りを心掛ける必要がります。●C言語は構造化プログラミング言語このコラムのいくつかのトピックでもすでに取り上げたように、C言語というプログラミング言語は1972年に開発された言語で、ITという変化の激しい世界の中では非常に歴史の古い存在で、それだけ長く残ってきたことは偉大なことではありますが、どうしても「時代遅れ」の部分があることも事実です。そもそも、C言語というプログラミング言語は、構造化プログラミング言語と呼ばれるもので、プログラム全体を段階的に細かな単位に分割して処理を記述していく手法です。Dijkstra)氏らによって提唱されたもので、C言語はそれを具現化したものの一つです。3つの論理構造によって記述できる」というもので、この原則に従うことにより、大規模なプログラムを効率よく、少ないミスで設計・記述できるようになりました。この原則に従うことにより、大規模なプログラムを効率よく、少ないミスで設計・記述できるようになるようになったので。それは、C言語が大きく成功した理由の一つでした。●C言語の限界このように、当時としては斬新な手法で開発されたC言語は、プログラミングのみならずコンピュータ関連技術の発展に大いに寄与しました。いえ、やはり時代の変化には抗しがたく、C言語にも限界が見えてきました。C言語の欠点は、いくつか挙げることができますが、ここで最大の問題になったのが、「大規模開発に向かない」ということでした。いう言い方をすると、「それは、C言語が開発されたときのメリットの一つだったのでは?」と疑問に思う方もいるでしょう。C言語が出来た当時とその後とでは、「大規模」の「規模」が違ってきてしまうのです。C言語は確かに、「その当時としては」大規模開発に適した言語でした。C言語が可能にしたさらなる大規模開発には、「C言語では物足りない」という状況を創り出していったのです。なんとも皮肉な話です。●オブジェクト指向の考え方の導入そのように、限界にぶつかったC言語でしたが、この状況を打破する方法として考えられたのがオブジェクト指向という考え方の導入でした。オブジェクト指向とは、ソフトウェアの設計や開発において、操作手順よりも操作対象に重点を置く考え方で、データやその集合を現実世界のモノ(Object)になぞらえた考え方です。我々が自動車を運転するとき、自動車の内部でどのような装置が動作しているかを理解する必要はありません。運転方法だけを知っていればいいだけです。このように、個々のオブジェクトに対し、操作方法を設定することでその内部の難しい詳細を覆い隠し、利用しやすくしようとする考え方がオブジェクト指向です。このオブジェクト指向を導入すれば、プログラマーはすでに用意された完成された「部品」を上手に組み合わせることにより、簡単にプログラムができるようになります。C言語とは無関係に開発されたこのオブジェクト指向という考え方ですが、ついにその考え方がC言語にも適用されるようになったのです。●C++とObjective-CC言語に対するオブジェクト指向への対応という拡張は、独自に2つの道がとられました。一つは、最もポピュラーなオブジェクト指向言語の一つといえる、C++(シー・プラス・プラス)です。Classes」でした。C++は、Simulaという当時使われていたオブジェクト指向言語の特徴をとりいれたもので、C++という名称の由来は、C言語に存在する算術演算子の一つで、整数型の変数の値に1を加えるインクリメント演算子「++」から来ているといわれています。「C言語より1つ進歩した」といったl気持ちなのでしょうか。一つが、Objective-Cです。Objective-Cは、1983年にブラッド・コックスによって開発され、そのコンパイラやライブラリを支援するためにStepstone社を創立しました。Computer社を創立した際には、その製品であるNeXTコンピュータの主力言語となりました。のちにジョブズがアップル社に復帰すると、この言語は、MacOSXや、iOSのソフトウェア開発に用いられるようになり、現在では、「アップル製品用のオブジェクト指向言語」として普及するようになりました。前述の二つの言語、C++や、Objective-Cの特徴は、C言語のソースコードがそのまま使える、ということでした。それまでのC言語の資産を継承しつつ、オブジェクト指向プログラミングが可能である、という点が最大の特徴でした。その後、オブジェクト指向が、プログラミングの一般的な考え方となると、C言語の記述方法などは継承しつつ、C言語とは全く違ったオブジェクト指向言語が現れ、普及するようになりました。そのなかでもメジャーなものの一つが、Javaで、C言語/C++言語の文法を参考にしつつも、ポインタ等の低レベルな操作は基本文法から排除されており、仮想マシンの上で動作し、これにより、プラットフォームに依存しないアプリケーションソフトウェアが開発できるというC言語にはなかった特徴を持っています。マイクロソフトが開発したC#言語もまた、C言語やC++言語を継承しており、これら言語の文法の利点を継承しつつ、独自の拡張がなされています。言語の開発に従事したアンダース・ヘルスバーグは、「C#」が「C++++」(すなわち「C++をさらに進めたもの」)にみえるのが由来、と語っており、このことからも、この言語がC/C++言語の後継言語であることを意識していることがわかります。アップル社も、Objective-C言語の後継言語として、Swiftという言語を開発しました。このように、オブジェクト指向もいわば「第二世代」に入り、残念ながらC言語はますます肩身が狭くなりそうです。仕事でSolarisサーバーからシステム日付の前月と前々月の年月をYYYYMM形式で取得する処理のシェルスクリプトを書くことになりました。この時に、一筋縄ではいかないことがありました。その時にどうやって対処したかを記載します。普通、日付の1か月前の計算はこのようにして行います。ago’このように-dオプション又は-dateオプションを使います。ところが、同じUnix系なのにSolarisでは使えません。(参照:http://www.fujitsu.com/jp/products/computing/servers/unix/sparc/technical/command-reference/sys2/07.html)Solarisのdateコマンドで過去や未来の日付を出すにはsh-utils若しくはshutilsというパッケージをインストールすればいいらしいです。(参照:https://blogs.yahoo.co.jp/bobuton/26034312.html)そこで、これを本番環境でインストールしてもいいかお客様に尋ねたところ「他の重要な処理に影響が出たら困るので、避けてほしい」との回答が......。いうことで、-dオプションを使わずに日付計算をすることになりました。“+%Y%m”`(1日前の年月日時刻を取得し、YYYYMM形式で表示)(参照:http://shellscript.sunone.me/date.html#gnu-date-が使用できない場合-1)でした。この処理が「毎月1日に行われる」ことを利用した策ですが実行日を変更するとき、わざわざこの“+15”を変えないといけません。これではいつの日にか、ユーザー様にご迷惑をお掛けすることになりますね。これは最大でも1週間程度までしか遡れなかったので中旬以降に実施することに変更になってしまえば、たちまち使えなくなってしまいます。別の手段を探すことになりました。日付を整数として計算するという方法を見つけました。(参照:http://shellscript.sunone.me/date.html#先月の月を取得する)まずは、システム日付を年月だけの形式(YYYYMM)で取得します。-1`しかし、これではある罠にはまってしまうことに気付きました。この処理が2018年1月に行われたとき、どうなるでしょうか。LASTMONTH=201801-1=201800と、2018年0月となってしまいます。これでは具合が悪いので1月にこの処理が行われた時とそうじゃない時とで条件分岐を与え別の処理を施す必要が出てきました。最初に思いついたのはこの変数LASTMONTHを月だけに分けLASTMONTH_M=${LASTMONTH:4:2}(これで変数から部分的に文字列を取得する)このLASTMONTH_Mが”00”になるときはLASTMONTH=LASTMONTH-88をするということでした。実際、2018年1月にこの処理を実行したとするとLASTMONTH=201801-1=201800LASTMONTH_M=00LASTMONTH=201800-88=201712となります。これでいいかどうか、相談してみたところ月計算で88を使うなんて直感的ではない、分かりにくいと指摘を受けました。それとともに、年と月で分けて計算したほうがいいのではないか?とアドバイスをもらいました。その後、次のように変更しました。-1`LASTMONTH=”${LASTMONTH_Y}12”fi取得した前月を年と月に分け前月が“00”になったとき年だけ1引いてその年の後ろに“12”を付け足すという考えです。=201712fiこのように前月を取得することができます。?というと、megacliの後継に当たるCUIのRAID管理ユーティリティツールで、megacliの後継にあたるツールらしい。後継と言うからにはmegacliに出来ることは全部できるらしいので、今回はこれを使ってRAIDのステータスを確認し、異常を検知したら通知する仕組みを作ることになった。今回使ったのはVersion1.17.08。それだと、こんな感じで表示される。オプションに指定すると、こんな感じで全コントローラのステータスが習得できる。ステータスについて、最初は冒頭のStatusCodeやStatusを見れば良いのかな?と思ったが、紛らわしいことにこいつはコマンドの実行結果を示すようなところらしい。Overview」を見て判断する必要があるようだ。末尾のHlthがステータスを示すパラメータのようで、正常時はOpt。異常時は、エラー起こさないといけないので試せてないけども、DNOptとかVNOptとか、Msngになるのかな。RaidStatus.txtコントローラのIDとステータスがこれで取れるので、あとはwhileループなりで処理してやれば、異常の検知は出来そうだ。show」としてやれば、0番のコントローラのシリアル番号だとかFWバージョン、PCIスロットの位置だとか色んな情報が取得できる。物理ディスクのステータスも確認できるので、いざ障害が発生したときはこれで調査すると良さそう。all」だと更に細かい情報も取得できるけども、情報が多過ぎるので自分で見る分にはshowだけの方がわかりやすそうだった。火LINQが提供する機能を紹介します。SelectManyから。select(シーケンスの各要素を新しいフォームに射影)selectはクラスから特定のプロパティを取り出したり、プロパティ値を加工したりすることができます。シーケンスに平坦化)SelectManyは、結果を平坦化するSelectです。言葉ではイメージしにくいので具体例で理解してください。金iPhoneアプリを作ってみたいと思っていましたが、Mac持っていないし、つくれないじゃんって半分あきらめていましたが、とうとうWindowsでも開発が可能になったという朗報を聞き、早速試してみました。可能にしたのは可能にしたのは、VisualStudioとXamarin(ザマリン)です。試してみたところ、試験運用中のようですが、動作はしました。PlayerをIPhoneにインストールします。左のQRコードはAppStoreへのリンクです。無料のようなので、インストールします。Communityをダウンロードします。Studioインストーラーを起動します。Updaterが導入できず、あきらめました。Preview版で試した履歴です。インストーラを起動すると、どのモジュールをインストールするか選択する画面が出てきます。Xamarinを使用するので、「.Netによるモバイル開発」にチェックを入れて、インストールボタンをクリックしてください。※iOSのアプリを試したいだけなら、Android用のJDKなどは要らないかもしれないですが、今回はお試しなのと、HDに余裕があったので、全量インストールしました。概要欄の不要なものからチェックを外せば、インストール対象から外れるようです。Studioを起動してみます。起動できたら、Xamarinが使える状態か確認します。上部メニューから「ツール」>「拡張機能と更新プログラム」を選びます。SDK」がインストール済みであることを確認します。Updater」をダウンロードします。Studioを落とすと、インストールが始まります。Studioを起動して、「ツール」>「拡張機能と更新プログラム」>「更新プログラム」を選びます。Xamarinを左メニューから選び、中央に表示されるもの全てを更新します。Studioを落とすと、インストールが始まります。Studioを起動します。上部メニューから「ツール」>「オプション」を選びます。「Xamarin」>「その他」を選びます。チェックを入れて、OKを押します。Playerのボタンが表示されます。これで準備は整いました。Playerのボタンを実行すると、右図のような画面が表示されます。手っ取り早く稼働確認したいので、サンプルアプリをダウンロードしてきます。(iOS)がかわいらしい絵柄だったのでダウンロードしてきました。Studioから開きます。Liveを起動します。Studio」をクリックすると、カメラが起動します。Studioに表示されたQRコードを読み取りペアリングします。これで稼働検証ができるようになります。すると、サンプルアプリが稼働します。起動しておく必要があるようです。iPhoneがエミュレータのように動いているだけで、iPhoneにインストール(デプロイ)されるわけではないようです。必要になるということでしょうか。コードを書いたり、試したりはこれで十分なのかなと思います。金ローカル環境で簡単に使用できるDBが無いか、出来ればJavaScriptで書いているコードなのでJavaScriptから扱えるものを、と探していたところに、JavaScriptで書かれたライブラリのAlaSQLというものを知りました。AlaSQLhttp://alasql.org/https://github.com/agershun/alasql/wiki/readmealasql.min.jsというライブラリをimportするだけで、オンメモリで動いてくれるDB、さらにクエリ発行も可能ということだったので、自分の求めていた機能は大体実装されていました。触ってみた所を書いてみたいと思います。人参:1050といった具合に直感的に使えます。rs6[j].name);}}).catch(console.error);CSVからのimportも可能です。(他にも、xlsやxlsx、IndexedDB、LocalStorage、SQLiteなどにも対応しているようです。)軽く触ってみただけでも自分の欲しかった機能は大体見つかったのですが、まだまだ多くの機能を有しているようです。(トランザクション機能もあるのだとか(!))是非使いこなしていきたいですが、いやあJavaScriptは深いですねえ...。水JavaScriptのオブジェクト指向JavaScriptのオブジェクト指向ではインスタンス化/インスタンスという概念はあるもののJavaやC#でいうクラスというものがありません。あるのは実体化されたオブジェクトだけであり、新しいオブジェクトを生成するときも既存のオブジェクトが元になっています。this.firstName;}変数Personに代入される関数がコンストラクタ、その中身のthis.〇〇〇がプロパティとなります。prototypeプロパティはオブジェクトにメンバーを追加するためのプロパティでここに格納されたメンバーはそのオブジェクトを元にしたインスタンスから利用することができます。prototypeプロパティに追加されたメンバーはインスタンスから暗黙的に参照され、インスタンスにコピーされないためメモリの使用量を減らすことができます。変数名.プロパティ名、変数名.メソッド名で呼び出すことができる。4継承するオブジェクトのインスタンスを継承先のprototypeにセットすることで親オブジェクトに定義されたメソッドを呼び出すことができる。上記のようにJavaScriptのオブジェクト指向では独特なクラス定義を書く必要がありましたがES2015からclass命令が導入され、以下のような定義が可能となりました。}}また、extendsキーワードを使うことで既存のクラスを継承したサブクラスを定義できます。ようなアクセス修飾子は利用できないなど注意する点もありますがJavaやC#の経験者であれば理解しやすいものとなっています。■はじめに金融とテクノロジーを掛け合わせたフィンテックが最近、注目を集めています。要な技術といわれているのがブロックチェーンです。■ブロックチェーンは分散型ブロックチェーンは分散型のネットワークシステムであり、中央集権(第三者機関)を置かずに信憑性を保つことを可能とする技術です。ブロックチェーン誕生以前は、中央集権(金融業界であれば第三者機関の銀行)を通して行われていました。これまでは中央集権(銀行)が絶対的な力をもっていました。ブロックチェーンを使えば第三者機関を通さずに買い手と売り手が直接取引きすることが可能になります。■ブロックチェーンは騙せないビットコインでは仮想通貨をウォレットという財布で保管します。悪意のあるA氏がウォレットの残高(10000BTC)を偽装しても、A氏のウォレットに10000BTCが入っているという記録がブロックチェーンに存在しないのでA氏が自分が持っている通貨より高い通貨で取引を実施しようとしても拒否されます。取引の履歴データが世界中に分散されている(お互いに監視されている)ため、ハッキング(偽造)ができない仕組みになっているます。ブロックチェーンは力をもった支配者に支配されることなく、世界中の人と自由に取引が可能になります。■ブロックチェーンのメリット1.コスト従来型(中央集権)では中央機関から仲介手数料が取られる。ブロックチェーンは手数料が低くい。従来型(中央集権)では中央機関のシステムが停止した場合、利用不可となるがブロックチェーンは分散型のためシステムは停止することなく利用できる。3.セキュリティ参加者全員が監視しているためセキュリティ性(改ざん等の防止)が高い。■ブロックチェーンのデメリット1.パフォーマンスビットコインではブロックチェーンによる取引の記録(登録)には10分かかる。全ての取引の履歴を保存するため保管するデータ量が膨大になる。■ブロックチェーンは止められないインターネットを止められないように仮想通貨(ビットコイン)のブロックチェーンは誰にも止めることはできません。システムが世界中に分散されているためです。■ブロックチェーンの応用ブロックチェーンは通貨外にも応用できます。第三者機関を経由している業界の仲介役を取り除くことができ直接取引が可能になります。木C言語の時刻取得の勉強として、以下のようなプログラムを作成する。0;}time_t型には秒が入っているので、年に変換して表示している。00:00:00(UTC)として、そこからの経過時間をtime_t型の値としているため。※日本時間では12:14:07)でオーバーフローする。現在はtime_t型を符号付き64ビットにするなどコンパイラ側で対応されているので、最近のコンパイラでビルドをしたプログラムなら問題ないはず。再ビルドせずに使い続けられているモジュールは多い。旧システムの改修には古いコンパイラを使用することもある。ソースコードもあらかじめ決められた要件の箇所以外は触ることはなく、だれにも気づかれずに残り続ける可能性がある。新旧さまざまなシステムのどこに32ビットのtime_tが使われているかわからない。これからも気にし続ける必要がある。使った事あるでしょ!あれはWindowのデフォルトのもので何もコントロールが出来ないので、つまらないでしょうね?ダイログの形も、色も、サイズも、ヘッダーのキャップションも変えることも出来ないですね。Libraryを作ったほうがいいじゃないか!と思ってるので、作ってみました。(バーション未確認、何でもいいと思います)を置きます。入れたい場合「animate.css」も必要です。以上のファイルをインポートします。