さあやってまいりました。
プログラムのノウハウをメモしていこうよ。
VB.NETだよ全員集合
就職できないよ
つっこみ歓迎!
ナレッジマネジメントしていこう。
はい、ではまず第一問
VB2010 のスレッドタイマーについて
タイマーは、必ず、一度、UIスレッドで tick 処理を開始する。
tick 処理内でスレッドを作成しても、
tick 処理自体がUIスレッドで遅れてしまう可能性がある。
時間の流れ→→
===−−−===−−−==−−==== ←UIスレッド
−↓−−−−↑−−−−−↑−−−↑−↓− ←やりとり(詳細は下記)
−==================− ←タイマースレッド
−@−−−−A−−−−−B−−−C−D− ←上記やりとりの説明用の番号
@ UIスレッドがタイマーを開始
A 一定間隔(インターバル)経過後、
タイマーがコールバックメソッドを開始させる。
コールバックメソッドはUIスレッドで処理される。
B Aと同じ。(インターバルは変更可能)
C Aと同じ。
D UIスレッドがタイマーを Dispose。
このように、タイマースレッドは別スレッドで常に動作し続け、
決められた時間が経過した後、UIスレッドで
コールバック処理を開始する、ということを繰り返す。
必ず、UIスレッドに踏み込むので、UIスレッドがビジー状態の場合、
処理が遅れる。(マルチスレッドになっていない。)
ということでOK?
プロポーサルフォントのバカァアアアアア
俺の頭が臭い
ハイエナはメスにもペニスがある。
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
callback関数の名前がきまっている
Thread クラスとか、Timer クラスとか、
不便極まりないから、
自分で Thread クラスをラップしたクラスを作って、
スレッドに引数を渡したり戻り値をもらったりできるようにして、
それを使いまわす、というのはよくあること?
プログラマーは、こうした自作クラスをいくつも用意して、
案件に合わせて組み合わせている?
熟練プログラマーほど、自作クラスを豊富に用意していて、
開発が早いというものなの?
俺もこれからクラスをいっぱいつくっていくぞ。
自作Threadクラス、
暗号化クラス、
フォルダツリークラス、
などなど。
みなさんは、どんな自作クラスを用意していますか?
自作クラスを押し付ける熟練プログラマーって最悪だよね
Haskellで既存コードから設計書を書きだすツールでも作るか・・・
10 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/02/06(水) 19:46:37.26
二次方程式の解の公式の分子式を有理化した形の方が解の精度が高くなる事がある。
4c ≪ b^2 の時だな
1985年4月より電気通信事業は自由化されたわけだが、事業者としてサービスを提供していくには引き続き郵政大臣の認可、登録、届出を要する。
電気通信事業者は、大きく、第一種電気通信事業者と第二種電気通信事業者に分けられるが、両者の違いは大変分かりやすく、
前者が自ら通信回線を保有してサービスを提供していくのに対して、後者は前者から回線を借りてサービス提供を行うというものである。
某調査会社によると、前者が保有する通信回線には、公衆回線でも専用回線でもよく、また有線に限らず無線であってもかまわない。
第一種電気通信事業者は、郵政大臣の認可を必要とし、事業者には外資規制がある。
また、サービスの料金設定や事業者間の回線を相互に接続する際には、郵政省の許可を必要とする。
日本電信電話(NTT)や国際電信電話(KDD)が第一種電気通信事業者の典型であるが、
市外電話や専用回線サービスをてがける長距離系事業者や、通信衛星を介した専用回線サービスを展開する事業老、
無線呼出し(ポケットベル)サービスを行う事業者、携帯電話サービスを行う事業者、国際通信を専門に扱う事業者などもそうである。
某調査会社によると、1997年4月1日時点では、138社が第一種電気通信事業者としての認可を受けている。
第二種電気通信事業者は、さらに特別第二種電気通信事業者と一般第二種電気通信事業者に区分けされているが、
特別第二種電気通信事業者は大規模の事業者、または専用回線を用いて国際間の接続を行う事業者であり、
一般第二種電気通信事業者とは、小規模の事業者または特定者向けのサービスを展開させている事業者のことである。
第二種電気通信事業者については、特別であっても一般であっても、外資規制は適用されていない。
また、特別第二種電気通信事業者の場合には、郵政大臣の登録制、一般第二種電気通信事業者の場合には、郵政大臣への届出制となっている。
某調査会社によると、第二種電気通信事業者についてはさらに自由化される方向で検討されているが、
第一種電気通信事業者が自ら保有する通信回線を用いたサービス内容を拡充させていくなかで、厳しい経営を強いられつつあるという背景もある。
1873年(明治6年)11月10日 : 内務省が設置される。
1885年(明治18年)12月22日 : 逓信省(第1次)が設置される。
1943年(昭和18年)11月1日 : 逓信省(第1次)と鉄道省が廃止されて、運輸通信省が設置される。
1945年(昭和20年)5月19日 : 運輸通信省が廃止されて、運輸省と逓信院が設置される(逓信院は内閣に設置)。
1946年(昭和21年)10月28日 : 行政調査部が設置される。
1946年(昭和21年)7月1日 : 逓信院が廃止されて、逓信省(第2次)が設置される。
1947年(昭和22年)12月31日 : 内務省が廃止される。
1948年(昭和23年)1月7日 : 内務省から地方財政事務を引き継ぎ、地方財政委員会(第1期)が設置される。
1948年(昭和23年)3月7日 : 国家公安委員会に国家消防庁が設置される。
1948年(昭和23年)7月1日 : 行政調査部が廃止されて、行政管理庁が設置される。
1949年(昭和24年)6月1日 : 逓信省(第2次)が廃止されて、郵政省、電気通信省が設置される。地方財政委員会が廃止されて、地方自治庁が設置される。
1952年(昭和27年)8月1日 : 地方自治庁が廃止されて、自治庁が設置される。電気通信省が廃止されて郵政省に統合される。国家消防庁を改組して、国家公安委員会に国家消防本部が設置される。
1960年(昭和35年)7月1日 : 自治庁が廃止されて、自治省が設置される。国家消防本部を改組して、自治省の外局として消防庁が設置される。
1972年(昭和47年)7月1日 : 総理府の外局として公害等調整委員会が設置される(土地調整委員会及び中央公害審査委員会を統廃合)。
1984年(昭和59年)7月1日 : 行政管理庁を廃止して、総務庁が設置される。
2001年(平成13年)1月6日 : 中央省庁再編により、郵政省、自治省、総務庁などを統廃合して総務省が設置される。総務省の外局として消防庁、公害等調整委員会(総理府から移管)、郵政事業庁が設置される。管区行政監察局は管区行政評価局に改称。
2003年(平成15年)4月1日 : 郵政事業庁が廃止されて、日本郵政公社が設立される。
2007年(平成19年)10月1日 : 日本郵政公社が解散して、日本郵政株式会社及び日本郵政グループの4会社(郵便事業株式会社、郵便局株式会社、株式会社ゆうちょ銀行、株式会社かんぽ生命保険)に移管・分割される。
1885年 逓信省(ていしんしょう)創設
1891年 逓信省電務局電気試験所設立
逓信省(ていしんしょう)は、1885年に農商務省から駅逓局(郵便業務)と管船局を、工部省から電信局と燈台局を承継、駅逓の逓と電信の信をあわせて逓信省とした。
明治20年(1887年)2月8日、逓信省は「今より(T)字形を以って本省全般の徽章とす」と告示した。
一説には、徽章としてはじめに発表されたのは漢字の「丁」(てい)を図案化したもので、
これは「甲乙丙丁」の「丁」が逓信(ていしん)の「てい」の読みに合うからだとされている。
「逓信」をローマ字(訓令式)で表した「Teishin」の頭文字だという説もある。
しかし後日、これが万国共通の料金未納・料金不足の記号Tと紛らわしいことが判った。
そこで2月14日に「テイシンショウ」の片仮名の「テ」を図案化した「〒」に変更し、2月19日の官報で「実は〒の誤りだった」ということにして発表したといわれている。
1949年 逓信省のうち郵便関係を郵政省、電信電話関係を電気通信省に分割。
1952年 電気通信省が廃止となり、日本電信電話公社(略称:電電公社)発足。
以降1985年に民営化が行われるまでの間、電電公社の存在は、日本の通信に関して推進面でも阻害面でも大きな影響を与えた。
なお公社とは、国の経営する公共企業体であり、当時、日本電信電話公社、日本専売公社(現日本たばこ産業(JT)、日本国有鉄道(現JR各社)を3公社といった。
コンピュータを有効に活用するには、本社と支店を通信回線で接続するオンライン処理が必要になる。1960年代中頃になると、先駆的なオンラインシステムが出現した。
1960年 国鉄の列車座席予約システムマルス(MARS)
1965年 国鉄「みどりの窓口」(座席予約の本格的実施)
座席予約システムとしてはMARSが最初であるが、それをオンライン化して実用化したの仕組みが「緑の窓口」である。みどりの窓口では、
日立HITAC303をベースとしたMARS101が利用された。なお、世界的に有名なアメリカン航空、座席予約システム「SABRE」が稼動したのは、1964年である。
1964年 東京オリンピックでオンラインシステム稼働(日本IBM)
1965年 三井銀行、本店・支店間オンラインを稼働
1968年 電電公社、全国地方銀行間データ通信サービスを開始
東京オリンピックでは、各競技場からの結果をオンラインで収集し編集する最初の試みであり、IBMの1410/1440各2台をオンライン接続するものであった。
そこでのオンライン化技術の転用した三井銀行システムは世界初のオンライン・バンキング・システムだとされている。
当時は民間企業間でのデータ通信には厳しい規制があり、銀行間ネットワークの構築は、電電公社が行うことになった。
しかし、一般企業でのオンライン化が進んだのは1970年代以降であり、当時はファイル転送など限定された処理だけであった。
通信回線を用いてコンピュータを共同利用するTSSが普及したのは、さらに遅れて1970年代末から1980年代になる。
16 :
デフォルトの名無しさん:2013/02/11(月) 02:48:06.39
パケット交換
1961年 (Leonard Kleinrock)がパケット交換に関する最初の論文を発表
1964年 バラン(Paul Baran)がパケット交換網に関する論文を発表
1974年 電電公社、DDXパケット交換網の運用開始
データ通信が行われるようになると、それまでの電話の接続方式とは異なる方式が求められる。
電話では、対話の間は、絶え間なく双方向に情報が流れており、その回線を独占的に確保する必要がある。それを回線交換方式という。
それに対してデータ通信では、瞬間的には一方通行でよく、データ全体が送信された時点で完全であればよく、その間の経過については問われない。
それで、データ通信やインターネットでは、一つの回線に多数のデータを相乗りさせる多重伝送方式が必要であり、
それには、データを小さなブロックに分割して番号と宛先を付けだパケットして送り、受信側はそれを番号順に並べて再現すればよい。この方式をパケット交換方式という。
パケット交換方式は、インターネットを含むデータ通信の基礎になった技術である。インターネットの前身であるARPANETでも採用されている。
衛星通信の始まり
1957年 ソ連(現ロシア)、世界最初の人工衛星スプートニック1号成功
1958年 スコア衛星、アイゼンハワー大統領のクリスマスメッセージが入った録音テープを本国に向けて送信
1960年 クーリエ1号、衛星に中継器を搭載。地上からの信号を蓄積して地上に送り返した。
1962年 テルスター1号、テレビや電話の大西洋横断中継実験が成功
1963年 リレー1号による第1回日米間衛星通信テレビ伝送実験。ケネディ大統領暗殺ニュースがテレビ放映された。
1963年 シンコム2号。最初の静止衛星。翌年、シンコム3号。これにより東京オリンピックのテレビ画像が北米に生中継された。
1964年 インテルサット(International Telecommunications Satellite Organization:国際電気通信衛星機構)の前身組織設立。1965年、インテルサット1号(アーリーバード)を大西洋上に静止。
1967年 インテルサット2号が太平洋上に静止。これを用いてKDDIが商用衛星通信を開始。日本も衛星通信時代に入る。
1970年代初頭までの通信回線は、電電公社がすべて管理しており、民間で独自に通信回線を用いることは許されていなかった。
また、当時では通信回線とは電話(音声)だけを想定しており、データ通信は考慮されていなかった。
データ通信は、自社内だけで特定通信回線だけを用いるときだけに限定されていたのである。そのため、
専用回線を用いた社内でのデータ伝送やTSSの利用は可能であったが、他社利用を目的とした計算センターなどがオンラインでサービスすること、
他社とのデータ交換、自社内でも専用回線が引かれていない事業所からの利用は原則としてできなかった(個別申請で許可されるケースもあったが条件が厳しかった)
これでは、コンピュータの高度利用ができない。米国などのネットワーク活用例などを知るに伴い、このような規制を撤廃すべきだとの意見が高まった。
そのような動きにより、第1次(1972年)、第2次(1982年)、第3次(1985年)と逐次的に規制緩和が行われてきた。
特に第3次は抜本的な通信回線の開放が行われ、それを通信回線開放、通信自由化、通信民営化などといっている。
1971年 特定通信回線でのデータ通信の利用制限撤廃
1972年 公衆通信回線でのデータ通信の利用制限撤廃(第1次通信回線開放)
特定通信回線のうちデータ通信で利用される場合には、一定条件の下での契約者以外の利用,共同での利用が認められた。
これにより、限定的ではあるが、専用回線を用いた企業間ネットワークが可能になった(音声利用専用回線での他人利用は不可)。
公衆通信回線では、公衆電気通信法の改正により、データ通信の規定が創設され、電電公社によるデータ通信サービス(DRESS、DIALS、DEMOSなど)などが認められた。
このような緩和措置により、計算センターのコンピュータを利用者側に設置した端末からオンラインで利用する形態が、限定的ながら可能になった。
1976年 特定通信回線の他人使用の基準を改正
情報処理業者の制限を大幅緩和して、他社と特定通信回線でのオンライン化が可能。しかし、事前承認が必要。
TSS(Time-Sharing System)とは、通信回線で接続した多数の端末から、1台のコンピュータを共同利用する利用形態である。
そのための技術は、1960年代から研究され実地に適用されてきた。しかし、一般企業の汎用コンピュータでTSSが実用化されるのは、1970年代後半である。
1961年 MIT、CTSS(Compatible TSS)開発
1964年 ダートマス大学、DTSS(Dartmouth TSS)開発
これらは研究者によるデモンストレーションの段階
1967年 MITとIBM、CP-67/CMS開発
IBM System/360 Model67にこのOSを搭載、数十台の端末からの同時使用を実用化
1968年 NEC、阪大の汎用機でTSS稼働
1968年 日立、電信電話公社のDIPS-0でTSS稼働
1970年 富士通、FACOM 230-50にTSS機能搭載
1971年 DEMOS開始
1970年代当初は、国内でも大学や研究所を対象とする限定的な利用であったが、1970年代中頃になると、TSS機能をもつOSを標準搭載する機種が普及しはじめた。
一般企業でのTSS利用は、当初はIT部門でのプログラム開発に採用された。
これまで、紙カードや紙テープにパンチしてバッチ処理をしていたのが、端末ディスプレイでコーディングでき、コンパイルを命令すれば即時に結果が得られる。この環境によりプラグラマの生産性が画期的に向上した。
さらに、1970年代末から1980年代にかけて、ユーザ部門に設置されたパソコンを端末にして、エンドユーザが汎用コンピュータをTSSで用いるようになる。
オンライン計算サービスの初期例に、電電公社による「公衆データ通信システム」がある。
1970年 DRESS、DIALS開始
1971年 DEMOS開始
電電公社は、一般の加入電話網を使って電子計算機を共同利用するサービスを提供、「公衆データ通信システム」とした。
DIALS (電話計算サービス)
プッシュホンを用いた電卓のようなもので、関数を番号で呼び出し、音声ガイドに従って数値を入力すると結果を音声で伝えてくれる。
従来とは異なるサービスへの好奇心から一時は流行したのだが、この頃からポケット電卓が出現し、その後、急速な価格低下が進んだため、1982年にサービスを停止した。
DRESS (販売在庫管理サービス)
利用者の事務所などに設置した専用端末機とDRESSセンターに設置した大型コンピュータを通信回線で結び、
端末から出荷・入荷などのデータを入力して、日報・月報などの作成、在庫の問合せに応じるシステム。
1980年頃にピークに達したが、その後ユーザ企業内でのオンライン化に押されてスローダウンした。1996年にサービスを終了。
DEMOS (科学技術計算サービス)
Denden Multi-access Online System。大規模TSS(Time Sharing System)。
経営科学計算としてのシミュレーション、技術計算としての建築、土木、機械の設計計算などに利用された。
利用者はキーボード、紙テープリーダからデータを送信し、計算結果はプリンターで受信する方式であった。
高性能の超大型電子計算機であるDIPS-1を利用したDEMOS-Eに発展、利用者数はピーク時では5000以上に達したが、これも社内TSSや商用TSSの普及により、1995年にサービスを終了した。
Visual Studio は、サーバーエクスプローラーから、コードの生成が可能だが、
Shell 関数を使うと楽な場合も多い。
知恵袋使えばいいのに
qsortよりもstd::sortの方が高速
//JavaScriptでクイックソート
Quicksort = function (xs) {
if (xs.length <= 1) return xs;
var pivot = xs[Math.floor(xs.length/2)];
return [].concat(
Quicksort(xs.filter( function(x){ return pivot>x;})),
xs.filter( function(x){ return pivot==x;}),
Quicksort(xs.filter( function(x){ return pivot<x;})));
};
Visual Studio 使ってる人、
フォームクラスを集めただけのプロジェクトを作って、
他プロジェクトと連携させることってありますか?
フォームクラスには、業務ロジックのコーディングは一切行わず、
全てを他プロジェクトで実装する、という形態。
フォーム上のコントロール類のスコープを全部 Public に変えてやれば簡単だけど、
一つ一つ、プロパティ、イベントを作って公開してます。
ここまで、問題ないかな?
26 :
デフォルトの名無しさん:2013/05/03(金) 06:29:20.72
ネットで調べてもどこにも載っていないため自力で解決した内容
スプリットコンテナ SplitContainer の制御方法。
パネル2の幅の最大制限を実装する。
幅が指定した値を超える時、その分、フォームを縮める。
−−−−−−
パネル1
−−−−−− ←分割線
パネル2
−−−−−−
パネル2の幅の最大値は m_splitPanel2MaxSize
にセットしているものとする。
SplitContainer1.SplitterMoved イベントハンドラにて
前半部分(長いので2分割。)
If Not m_enableSplitterMovedEvent Then
' 当イベントが無効の場合
Exit Sub
End If
' Me.SplitContainer1 を sender を通して取得。
Dim sc As SplitContainer = CType(sender, SplitContainer)
27 :
デフォルトの名無しさん:2013/05/03(金) 06:30:47.82
SplitContainer1.SplitterMoved イベントハンドラ
中盤部分(長すぎたので3分割に変更)
If sc.Panel2.Height > m_splitPanel2MaxSize Then
' Panel2 の高さが最大値を超えた時
' 当イベントの再帰呼び出しを回避
m_enableSplitterMovedEvent = False
' どのくらい超えたか記憶
Dim dis As Integer = sc.Panel2.Height - m_splitPanel2MaxSize
' パネル2 が最大の高さを超えた分、フォームの高さを縮める。
' これにより、あたかも SplitterDistance をフォームの下の
' サイズ変更グリッドのようにして扱える。
Dim f As Form = sc.ParentForm
f.Height = f.Height - dis
' これによって、コンテナの状態は以下のようになる。
28 :
デフォルトの名無しさん:2013/05/03(金) 06:31:31.17
SplitContainer1.SplitterMoved イベントハンドラ
後半部分
' これによって、コンテナの状態は以下のようになる。
' コンテナのサイズ… dis の分だけ縮む。
' (∵ コンテナは、パネル pnSC 内に Dock Fill で入っていて、
' pnSC はフォーム直下に配置され、Anchor プロパティに Bottom が含まれている。)
'
' Panel2 のサイズ…
' Splitter の移動後なので、Panel2 のサイズは変更済み。
' 上記処理によって、Panel2 の高さが最大を超えている時は、
' 超えた分だけ、フォームサイズ(コンテナサイズ)が縮む。
' それに伴い、コンテナの分割位置 SplitterDistance は、
' Panel2 の高さを維持して、Panel1 の高さを縮める。
' (∵ FixedPanel プロパティ = Panel2 )
'
' Panel2 の高さは、最大を超えたまま。
' Panel2 の高さを最大にセットする
' ↓このように Panel2 の Height で高さを明示的に指定することはできない。
'Me.SplitContainer1.Panel2.Height = m_SplitPanel2MaxSize
'
' SplitterDistance を使用する。
' Panel2 が最大サイズになるように、分割位置 SplitterDistance をセット。
sc.SplitterDistance =
sc.Height - m_splitPanel2MaxSize - sc.SplitterWidth ' 分割線の太さも引く
' 当イベントを有効に戻す
m_enableSplitterMovedEvent = True
End If
ポイントは、以下の3点
・SplitContainer は、フォームに直接配置せず、パネル内に Dock = Fill でセットする。
そして、そのパネルで、Anchor などを設定する。
・スプリットコンテナ内のパネルは、高さを直接指定できないため、
SplitterDistance でパネルの高さを調整する。
・フォーム、パネル、スプリットコンテナ、SplitterDistance 、
スプリットコンテナ内の各コントロール類の位置、サイズを
メモして、フォームの高さを変えたり、分割線の位置を変えたりしながら、
お互いのコントロールにどのような影響を及ぼしあうのか
調べることが基本。
クリオネは普段は可愛いが、食事の時は怖い
うむ
502:01/25(金) 22:27 [sage]
msysでvc++へのパスを通してconfigure時にCXX=clとかするだけで複雑怪奇なcl用のmakefile作ってくれるだね。
今頃気づいたよ。
mingw64使うよりautotoolでvc++使ったほうが互換性気にする必要なくて楽じゃん。
configureマンセー
STLのmapで、Keyによる検索ではなく、並んでいる順のインデックスで値を取ってきたいのですが、
現状では、begin()で先頭イテレータを取得し、取りたいインデックス回だけ++しています。
もっと一発で取れるようなエレガントな書き方はないでしょうか?
std::advance(i,10);
ofs.copyfmt(std::cout);
std::cout.rdbuf(ofs.rdbuf()); とすれば
coutに書き込んだ内容がofsに出力される(リダイレクト)
35 :
デフォルトの名無しさん:2013/05/31(金) 17:41:41.15
C++とC#を混ぜたプログラムの作り方
// hoge49.c 汚いお題のソース
// hoge.cpp
extern "C" int main();
public ref class Hoge { public: static int Submit() { return main(); } };
// foo.cs
class Foo { static void Main() { Hoge.Submit(); }}
cl /c /O1 /MD hoge49.c
cl /clr /LD /O1 hoge.cpp hoge49.obj
mt -manifest hoge.dll.manifest -outputresource:hoge.dll;#2
csc /o foo.cs /r:hoge.dll
vcはmsvcrt.dll(動的リンク)と
Iibcmt.lib(静的リンク)がもともとあって
前者だけOSに取り込まれたから
Cライブラリ=ランタイムライブラリ
というややこしい図式ができた
・Windows Form アプリでドロップダウンリストにチェックボックスを並べる方法
次の3つのクラスを利用
1.チェックボックスを継承したクラス
…2のアイテム要素に、ToolStripControlHost として、3を追加する。
1.のチェック状態がオンに切り替わった時、2を表示させる。
1.のチェック状態がオフに切り替わった時、2を閉じる。チェック状態を文字列として取得。
2.ドロップダウンリスト ToolStripDropDown
…Framework のコンポーネントをそのまま使う。コーディング不要。
3.メニューパネル チェックボックスを並べたパネル
…現在のチェック状態を文字列に変換するメソッド、
文字列を元にしてチェック状態をセットするメソッド
を用意。
検索用ワード: スプリットボタン ドロップダウン チェックボックス
↑
一度やってみたかっただけ
InsertAt の意外な力
配列やコレクション内でのインデックスの指定は、
最後の要素のインデックス(要素の数 - 1 )を超えると例外が発生する。
a = array[5] ' ← array の要素数が 5 の時、例外。
ところが、InsertAt では、最後の要素のインデックス + 1 を指定しても、
例外が発生せずに機能する。
array.InsertAt( "1" , 5 )
これは、ネットで調べてもよい文献が見つからず、
仕様なのかどうか不明だった。
最後のインデックス+1 を指定した場合は、Add と同じ結果になる、
と解釈したが、使用は自己責任で。
' データグリッドビューで選択中の行の下に新しい行を挿入する
i = DataGridView1.SelectedRows(0) ' 選択中の行のインデックス
DataGridView1.Rows.Insert(i + 1, newRow) ' 最下行を選択していた場合、さらに下の行に追加される。
最下行を選択している場合を分けて、Add を呼ぶ必要がない。
39 :
デフォルトの名無しさん:2013/06/20(木) 01:43:19.78
/* 0初期化しないvectorの作り方 */
何もしないconstructのアロケーターを
vectorの第二テンプレート引数に渡す
>>38 PHP の配列は、
配列[] = "aa";
とすれば、配列の最後に追加される。
add と insert の違いは、それほど違わない。
イテレーターの挙動を考えると、わかりやすいか。
//簡単なパスワードクラッカー
#include <stdio.h>
#include <string.h>
bool check(const char *s) { return strcmp(s, "pas") == 0; }
char *func(char ch1, char ch2, int len) {
static char buf[256];
for (int n = 0; n <= len; n++) {
memset(buf, ch1, n); buf[n] = 0;
char *p, *end = &buf[n];
for (;;) {
printf("%s\n", buf);
if (check(buf)) return buf;
p = end - 1;
while (buf <= p && *p == ch2) *p-- = ch1;
if (p < buf) break;
(*p)++; } }
return NULL; }
int main(void) {
char *p = func('a', 'z', 4);
printf("#%s\n", p); return 0; }
.Net で TextBox を透過させる方法
TextBox は、OS による制御が介入するため、簡単に透過できない。
代わりに Label を使ってみよう。
Label はスクロールできない。
そこで、Panel を用意し、Panel の AutoScroll を True にする。
その Panel 内に、Label を追加。
Label の AutoSize を True にしておけば、
文字列内に改行が含まれている場合、自動的に高さも広がる。
イベントファクタークラス、というのかな?
イベントの定義を一つのクラスにまとめることってある?
全てのクラス、フォームに通知したいイベント
(各クラスで処理が必要となるイベント)
を一か所にまとめて、適宜、発生させる、という形。
もし無いなら、忘れないうちにメモ。
・イベントファクタークラス
shared イベントを定義し、
またそれらのイベントの raise メソッドを用意しておく。
イベントファクタークラスの使い方は、
各実装クラスでハンドルを実装するのみ。
全てのクラス、フォームにイベントを通知することができる。
イベントを発生させる際は、アプリケーション内の各所で、
イベントファクタークラスの該当する raise メソッドを呼び出す。
これによって、全てのクラスに通知がいく。
各イベントハンドラでは、自身のクラスインスタンスが存在するかどうかを
判断して、必要に応じて、表示されているフォームだけが処理を
行う、なども可能。
一つのイベントにつき、複数のイベントハンドラが実装されている場合、
イベントハンドラの呼び出し順は、制御が難しいため、
(.NET 系言語などでは仕様が公開されていないため)
各実装クラスのイベントハンドラ内で次に起こしたいイベントを
イベントファクタークラス内で別イベントとして定義する形にする。
イベントドリブン系の言語では、常識?
古いリソースコンパイラでマニフェストを含む
リソースファイルをコンパイルするときは
#define MANIFEST 24
としておく。
46 :
デフォルトの名無しさん:2013/08/26(月) NY:AN:NY.AN
関数型プログラミングにおけるクイックソート・アルゴリズムの実装
www.h6.dion.ne.jp/~machan/misc/qsort-in-fp.html
C++コンパイル高速化と隠ぺい
// my_class.h
class my_class {
// ... all public and protected stuff goes here ...
private:
class impl; unique_ptr<impl> pimpl; // opaque type here
};
// my_class.cpp
class my_class::impl { // defined privately here
// ... all private data and functions: all of these
// can now change without recompiling callers ...
};
my_class::my_class(): pimpl( new impl )
{
// ... set impl values ...
}
49 :
デフォルトの名無しさん:2013/09/28(土) 00:46:08.13
50 :
デフォルトの名無しさん:2013/11/07(木) 01:06:27.45
gcc/g++を使う初心者に忠告:
コマンドラインに-Wall -pedanticを付けると勉強になる。
VBAでOptionボタンの分岐
Select Case True
case Option1(0): a=1
case Option1(1): a=5
case Option1(2): a=9
End Select
vb.netなんて負馬に乗りたがるアホの気が知れない
54 :
デフォルトの名無しさん:2014/01/19(日) 11:26:20.91
受験の裏技:
教員用教科書(指導書)は生徒や保護者でも購入できる。
塾に行く暇のない、忙しいセレブのお子さん達は、親に買ってもらった指導書で
勉強して成績上位をキープしたのであった。
赤ちゃんは強く揺さぶってはいけない。
頭の血管が切れて揺さぶられ症候群になってしまうから。
57 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/03/01(土) 20:03:01.16
【gccやg++でアプリをプロファイルする方法】
自分のプログラムをプロファイルすることで、時間がかかっている関数などが確認できます。
gccやg++では無料でプロファイルができます。実行速度の最適化に活用しましょう。
1.gccやg++のコマンドラインに-pgを付けてコンパイル&リンクする
2.できたプログラムを実行するとgmon.outというファイルができる。
3.gprof (プログラムファイル名).exe gmon.out > gmon.logを実行するとgmon.logというファイルができる。
4.gmon.logをテキストエディタなどで開いてプロファイル結果を確認する。
58 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/19(水) 11:53:52.69 ID:r4sbPf4p
// スマートポインタshared_ptrの使い方:
#if (__cplusplus >= 201103L) // C++11
#include <memory>
using std::shared_ptr;
using std::static_pointer_cast;
using std::make_shared;
#else // Boost
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
using boost::shared_ptr;
using boost::static_pointer_cast;
using boost::make_shared;
#endif
後は、g++/clangの場合はコマンドラインに-std=c++11をつける。
古いコンパイラの場合は、Boostをインストールしてインクルードパスに
「C:\local\boost_1_55_0」みたいなパスを追加する。
59 :
デフォルトの名無しさん:2014/04/03(木) 00:13:37.19 ID:sk+nDb/g
一般に割り算は掛け算より遅い。可能ならば割り算を掛け算に直したりして割り算の回数を減らす方が速い。
x / 2 → x * 0.5
x / y / z → x / (y * z)
>>50みたいなのは、まずググってみて破壊的なコマンドじゃない事を確認してから実行する
62 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/05(土) 01:19:22.40 ID:kCbCwa1D
多くのコンパイル単位から参照されるinline関数の中にstatic変数があると、
変数の実体がいくつも作成されるので注意する。
>>64 それはXL C/C++ for Linuxやgcc以外のコンパイラの場合でしょう。
gcc/g++ではそうではないのだよ。
66 :
デフォルトの名無しさん:2014/04/07(月) 21:17:19.08 ID:cPHU7Y9F
【リポジトリをローカルにコピーする】
git clone
https://... 【ファイルかフォルダを次のコミット対象にする】
git add ファイルかフォルダ
【ファイルかフォルダを削除する】
git rm ファイルかフォルダ
【コミットする】
git commit -m "短いメッセージ"
【ファイルかフォルダを直前のコミット状態に戻す】
git checkout ファイルかフォルダ
【コミット状態をアップロードする】
git push origin master
67 :
デフォルトの名無しさん:2014/04/23(水) 02:20:25.73 ID:Be8/NqvO
【ソフトウェア開発7つ道具】
1.IDE/デバッガ
2.リファレンス
3.エディタ
4.Git/SVN
5.Wiki
6.diff/patch
7.仮想マシン
5.Wiki/データベース
2.リファレンス/マニュアル
70 :
デフォルトの名無しさん:2014/04/28(月) 22:04:58.58 ID:nYC6TNjH
企業の事業計画には数学とプログラミングの知識が不可欠である。
71 :
デフォルトの名無しさん:2014/05/01(木) 19:27:41.27 ID:O61PxCRM
「インターネット(Amazon)で本を買う方法」
0.自分のメルアドがなければ取得する(Gmailがオススメ)。
1.コンビニで端末を操作してAmazonギフト券を買う。分からないときは店員に訊く。
2.インターネットでAmazonを開き、ほしい本を検索してその本のページを見つける。
3.必要事項を入力して購入手続きを行う。
オペレーションリサーチって数学に含まれるのか?
73 :
デフォルトの名無しさん:2014/05/02(金) 00:47:14.57 ID:NtSo2uBW
ORと言えば鳩山由紀夫が
74 :
デフォルトの名無しさん:2014/05/12(月) 23:39:52.21 ID:hIlNhllH
【C/C++デバッグ&テストにassert文を使おう】
C言語では<assert.h>を、C++では<cassert>を#includeすればassert文が使えるようになる。
使い方:assert(条件式);
デバッグ版の場合、実行時に評価された条件式がゼロ(or false)ならば、assert失敗になり、
このときプログラム状態が異常と見なされて、位置情報を含むメッセージが出てプログラムが中断する。
この機能により、デバッグ版で実行するだけで多数のテストを一気に済ませることができる。
デバッガを使えば、assertが失敗したときに詳細なデバッギングを開始でき、原因を探ることができる。
75 :
デフォルトの名無しさん:2014/05/18(日) 18:40:20.49 ID:wTsBQBni
ブログ=blog≒Web log=Webの記録。
logは元々は丸太という意味で(ログハウスのログ)、航海記録に丸太を使ったのが起源とされる。
【誰でもできるサイトの作り方】
1.ドメインかサブドメインを取得(レンタルサーバーも可)。
2.HTMLや画像ファイルなどのデータファイルをFTPソフト(FFFTPなど)でアップロード。
3.Googleなどの検索エンジンに登録。
77 :
デフォルトの名無しさん:2014/09/07(日) 00:00:03.30 ID:dQrAI00B
【PC基本操作】
Alt+Tab ウィンドウ切り替え
Ctrl+C コピー
Ctrl+V 貼り付け
Ctrl+X 切り取り
Del 削除
Esc キャンセル
Enter OK
Ctrl+S 上書き保存
Alt+F4 ウィンドウを閉じる
Win スタート
Win+L ロック
Win+D ウィンドウをすべて最小化してデスクトップ表示
78 :
デフォルトの名無しさん:2014/09/28(日) 22:54:48.44 ID:uLb79luw
【ネタをニュースに載せて話題にする方法】
1.ニュース記事をホームページに書く(※新規性が大事)。
2.ニュース速報板にスレ立て依頼をする。または、記事をVIP板で話題にする。
3.スレが立ったらあらかじめ用意したシナリオと人海戦術でなるべく場を盛り上げる。
4.そのスレをまとめサイトに掲載したり、はてなブックマークに記録したりする。
間違いがあったら指摘して下さい
81 :
片山博文MZ ◆T6xkBnTXz7B0 :2014/12/10(水) 00:27:59.54 ID:X4ZXIzIa
【余りの計算を高速化する】
十進法において、偶数は下一桁が必ず偶数になる。
奇数は下一桁が必ず奇数になる。これは10 mod 2≡0という合同式の性質から導かれる。
10 mod 3≡1であるから、ある自然数Xを3で割ったときの余りは、
Xの各ケタを足しあわせたものを3で割ったときの余りに等しい。
このように余りの計算は合同式の性質により高速化が可能になることがある。
mod 1, mod 2, mod 3, mod 5, mod 9, mod 10, mod 11のときは明らかに高速化できるね。mod (10の倍数)も自明。
mod 4, mod 8はケタを2で掛ける計算が必要。
mod 6は、4で。mod 7は、3で。
×mod (10の倍数)も自明
>>82 7 * 11 * 13 = 1001
だから、1000 以下の場合は実際に割らなければならない点を許容できるのなら、mod 13 も早い
85 :
片山博文MZ ◆T6xkBnTXz7B0 :2014/12/27(土) 19:47:43.18 ID:Cc0RXd7d
【Makefileを書いてみよう】
makeコマンドは、Makefileというファイルに書かれたルールに従って、ファイル作成やビルドを支援する。詳しくは「man make」を参照。
ルールは次のように記述する。
変数1=値1
変数2=値2
...
# ルール1
ターゲットファイル: 作成に必要なファイル
<TAB>作成するためのコマンドライン1
<TAB>作成するためのコマンドライン2
<TAB>...
# ルール2
...
ここに、$(変数1)は「値1」に展開される。また、ある行においてシャープ(#)以降は一行コメントとなる。
ターゲットファイルを更新するかどうかは、必要なファイルの更新日時と比較して決定される。
Makefileは、IDEに頼らずにビルドを行う方法として覚えておきたい。
【C/C++のコンパイル時間短縮】
結合度の高いモジュールは、仕様を早いうちに決めてなるべく変更しない。
中規模以上では、モジュールの仕様が定まったら、ヘッダーとソースに分け、分割コンパイルする。
ソースファイルが三つ以上なら、プリコンパイル済みヘッダーを使う。
同じような処理は関数やクラスにまとめて再利用する。
モジュール強度の高いモジュールをまとめる。
pImplイディオムを使う。