サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
gup.monster
C++でオブジェクトを返す関数を書いてもいいのか問題→OKです。 遅かったらプロファイル取りましょうで終わりです。 かなり過去にC++でstd::stringをどう返すべきかという記事を書いたこともあり結局いま、例えば、関数内でvectorを加工してその結果を呼び出し側で使いたいニーズがある場合のコードはどう書くのが正解なの? ということを思い至り備忘録として残しておきます。 ※話が複雑になるので、例えばsortするときのようにあらかじめあるvectorを加工する場合ではないことを明記しておきます 主にC++11が出る前のように void foo(std::vector<int>& v) { ...(vector書き換え) } std::vector<int> vec = { 1, 2, 3 }; foo(vec); とやるのがいいのか、 std::vector<int> foo() {
以前このブログで紹介したMaven + Eclipseでマルチモジュールプロジェクトを作成するのなかでサンプルコードで示したものの特にマルチデータソースのやり方についての解説です。 この記事に書いてある通り、PostgreSQLとMongoDBを組み合わせる場合を例として書いてあります。 完成版のソースコードはこちらです。 ミドルウェア バージョン Spring Boot 2 Java 1.8 Apache Maven 3 細かいバージョンはGitHubを参照してください。 Spring-Data-JPAとSpring-Data-MongoDBを利用した場合のやり方を解説します。 構成の概要 プロジェクト/モジュール/パッケージは次のようになっています。 2モジュールありmulti-module-batchはサンプルを動かす利用側コード multi-module-commonはデータアクセ
ふとニュースなどをみていて、新型コロナウィルスの感染状況のグラフのサイトを見つけて、お、綺麗だしシンプルでいいなと思ったのがここ。 よくある質問の部分も、一見、グラフを眺めていて、ん???と思う疑問点が書かれてあって良い。 「具体的な基準はMITライセンスに準拠します」とさらりと書いてあるだけなのがクール。もちろんGitHubへのリンクもあります。 これ厳密に従うとちょっと面倒なんですよね。とはいえ、数あるライセンスの中でも緩い縛りのMITライセンス。 単なるリンクまたはiframeであれば著作権表示はいらないのですが、せっかくなのでスクリーンショットを拝借しました。 ということで厳密に対応してみました。ただ、ライセンスファイルはブログの関係上置けないので、貼り付けました。 https://github.com/kaz-ogiwara/covid19/ MIT License Copyri
2024-06-09 Spring Bootでは例外処理はthrowしてしまえばわりとよしなにやってくれるが… それでも考えるべきことはある。 場合によっては例外処理をあまり使わず、オブジェクトの戻り値による処理をすることもある。 例外処理のパターン@Controller編 ErrorControllerを使う 例外処理のパターン@RestController編 ExceptionHandlerを使う その他リンク 例外処理のパターン@Controller編 基本的には @Controllerに個別で@ExceptionHandler @ControllerAdviceで@ExceptionHandler おすすめ Spring BootのError Controller 3番目は知らなかった 1番目と2番目はよく使うと思う 今回はError Controllerを紹介します @Slf4j
2018/08/12更新 最近開発でAngular(2+) + TypeScript + Spring Bootを使っています。 それぞれのバージョンの詳細はこんな感じです。 Angular 6 TypeScript 2.7.2 Spring Boot 1.5 Java 8 Maven 3 Node.js 8.11.3 Angular-CLI 6.0.8 実際の構成例 GitHubに置きました。 AngularのチュートリアルとSpring Bootのチュートリアルを混ぜたものです。 ArpitSuthar (Arpit Suthar) · GitHub のをforkしました。 大まかな構成 TypeScriptをどう、SpringのTomcatと連携させるか考えていました。 あんまり複雑な構成にしたくなく、AngularJS(1系)の時のようにお手軽に使えるようにしたかったのです。 それ
Linuxって使うのにいろいろハードルがあるのですが、 その一つの大きな障壁がコマンドライン上でのテキスト編集作業ではないでしょうか? デフォルトで用意されていてかつメジャーなのが viというこれまた変な操作体系のエディタで 最初使ったらなんじゃこりゃ。入力できないし、編集できないし……。 終了の仕方がわからず、そっとターミナルを閉じた……。 なんて人は多いんじゃないでしょうか?僕です。 第一、viなんてよっぽどのモノ好きでないと使いこなせるようになりません。 というか必要に迫られないと覚えられないようなものです。 Linuxが使いたいだけなのに変な操作体系を覚えさせられる…。 おれはLinuxをやりたいんだ。 でもなぜかviの学習をしている……。ってなんだかおかしいですよね。 GUIが整っている環境なら、geditというエディタを使って編集という手もありますが、 なかなかそうもいかず、タ
2020-08-05 C++版はこちら C++で2次元配列(文字列)の動的確保 - Gobble up pudding どんな行列でもいけちゃう方法 とりあえず連続領域で確保する方法 多分一番使える方法 補足 文字列(char型)を扱っているときに、2次元配列で動的確保したい時があります。 int型など文字でないものは1次元配列で代用できるのですが、 例えば、住所など複数レコード格納したいといった場合、利用します。 下記のようなデータの行数・1行あたりの文字数を調べてから確保したいなんていった時に使うテクニックが2次元配列の動的確保です(今回のサンプルでは行数と1行あたりの文字数を調べるところは書きません)。 北海道でっかいどう1-2-3 東京都ほげほげ1-2-3 神奈川県あふあふ2-3-4 …… 沖縄県ちんすこう9-9-9といったようなのを可変長レコードで管理したいといったときに2次元配
追記 (2018年7月3日) この記事はすさまじく古いです。 現在Windows環境でならAnaconda(+Jupyter notebook)を使うかPythonの標準パッケージマネージャーのpipを使うほうが賢明です。 PytnonでnumpyとmatplotlibをWindows上で使う場合のメモです。 いや、全部書いちゃっているからむしろ Windows上でPythonを使うメモのほうが適切かもしれません。 Visual Studioを利用してPythonを使っている方など参考にしていただければ。 Windows 64bitの場合でもPython 32bit版を使ったほうが良いと思います。 このあたりは好みの問題ですが……。 このあたりのインストール方法は下記記事が詳細に書かれていてわかりやすいです。 このあたりの手順はむしろLinuxやMacのほうが楽ですねきっと。 ええ、私はマ
ほとんど独り言のような記事です。 なんとなく理解して、なんとなく覚えるMVCとか3層アーキテクチャ この2つ全く別物なんですが、ごっちゃにして覚えてる人多いですよね。 日本人だけかと思ったら、海外の人もそうみたい……。 正確ではないけどstackoverflowに書いてあった回答でわかりやすい回答がありました。 そもそもMVCと3層アーキテクチャはカテゴリーからして違うそうですよ。 MVCと3層アーキテクチャの違い ハイパーざっくりかくと違いはこうです。いや、 MVCが明らかに違うじゃないか!!!って意見はあると思います。 3層アーキテクチャ Client <-> Middle <-> Data MVC Middle ^ | | v Client <- Dataこれですね。3層アーキテクチャはわりと一言で表せて、 Middleの層を必ず介してClientとDataがやり取りされる。 正確に
まだ多重継承でダイヤモンドの錬成をしていない僕ですが、 ついに近代汎用術式に手を出すことにしました。 現時点で最新版のBoost C++ 1.57.0をVisual Studio 2013で使うためのメモです。 汎用術式でありながら暗黒術式ではあるのですが、導入と使うのは割と簡単です。 いままで意識的に避けていたのがもったいない気がしてきました。 Getting Started on Windowsでかいつまんで説明します。 http://www.boost.org/doc/libs/1_57_0/more/getting_started/windows.html 一部説明を変更しています。 BoostをGet http://www.boost.org/users/history/version_1_57_0.html からダウンロードしてね! Boostを配置 好みだけどCドライブ直下に
C言語では言語仕様上、グローバル変数は良く使うと思います。 できるだけ避けるのは言うまでもありませんが。 そこでよく混乱するのがexternではないでしょうか? ヘッダなんかをインクルードすると あれ?そういえばexternって……どうなんだっけ…ってことになります。 私なんかはなんかの参考書でプログラミングを学び始めたときに、 externつけてもつけなくても一緒というような怪しげな解説を見た記憶があり、 それによって、余計に混乱してしまいました。 ただし、関数に関しては一緒です。 ここより正確な記載のあるサイトを見つけましたのでURLを記載します。 C言語のexternキーワードについて(関数編) – cloudtofu いまだに検索流入が多い(2019年8月時点)のでちょっとびっくりします。それだけC言語が息の長い言語であり、 年々使用者が減少しているのでしょうね。私自身もCはもう5
Visual Studioの出力ウィンドウまたはイミディエイトウィンドウに なにか文字列を出力したい時は コンソールアプリケーション、Windowsアプリケーションに 関わらず、OutputDebugString()を使うとそれが実現できます。 使い方はputs()と同様です。改行はつけなきゃダメですが。 printf()と同じ使い勝手のものも作りました。 いつ使うんだよvsprintf()。今でしょ。 https://msdn.microsoft.com/ja-jp/library/cc428973.aspx イメージはこんな感じです。 やりたいことのイメージ はい、これでできましたね。めでたしめでたし…… で終わるのはアレなので、 もし、C++のcout/wcoutで使いたいときはどうすればよいかというと、 出力を乗っ取ればよいのです。 wcout版だとこうなります。 wcoutの出力
グローバルフック(またはシステムフック)を使ってWindows APIで遊んでみました。 フックというのは 引用元: wikipedia 主に元のプログラムに対する機能追加・拡張やカスタマイズの手段として使われるほか、デバッグのための情報収集にも有効である。このような有用な使い方の反面、既存のプログラムの動作を変更できることから、悪意を持ったプログラムによって利用される場合もある。例えばOSのキー入力処理のフックを使えばキーロガーを実装できることになる。 というものです。 メッセージを横取りして処理してしまうってやつです。 本格的なキーロガーだとおそらく横取りした後に気付かれないように ちゃんとまたメッセージを送りなおすんでしょうけど… ということで、キーボード入力をOS全体でフックしてみました。 これを行うにはDLL化しなくてはなりません(しなくてもいい方法はあるにはある)。 ちなみにこ
関数ポインタって変な文法ですよねってお話です。 もちろんポインタの文法もいろいろツッコミどころはあるのですが (このせいでポインタよくわからんな人が続出)。 例えば次の宣言はぱっと見すぐにわかる人はC言語マスターです。 void (*func(const char *str)) (); これはvoidを返すのではなく、 void (*)()という関数ポインタを返す、 funcという名前のconst char *strを引数にとる関数です(;'∀') (void (*)()) func(const char *str); のような書き方が許されていれば誰も混乱しないのに…… コードを書いてみます。 gccでコンパイルしてみました(VC++だともっとincludeしないとダメかも) #include <stdio.h> void ps1() { puts("banana"); } void p
Parallels Desktop for Macの紹介 MacにはBootCampというのがあってWindowsを別パーティションにいれて、 起動を切り替えて使うことができますが、 いろいろ問題があります。まず、切り替えるのに再起動が必要なこと。 これだけでも結構不便なのに、さらに問題はツールでも入れない限り、 Windowsでスクロールの挙動が逆になったり、キーボードがとても使いづらくなったり…… というのがあります。 この状況を一挙に解決してくれるソフトがParallels Desktop for Macです。 これはVMware Playerと一緒で仮想環境でWindowsを動かします。 仮想環境といっても通常の使い方をする範囲では遅さを全く感じません。 なにより同時に扱えるところが良いです。 また、デフォルトでCoherenceモードといって、 ほぼMacとWindowsをシーム
いまさらながらStrutsの開発環境を構築しよう!っていうお話です。 さて、どうしよう……。Javaといえばeclipseですね。そうですね。 別にメモ帳で書いてもいいんだけどさ。いや、やだ。 以下、とりあえず動かすのに最低限の記述を。とっかかりって大事ですよね。 とりあえず、理解していなくてもまずは動かしてみる。 そして少しずつ変えていく……パクリは大事。 一応2014/03/05時点に構築できる環境です。 1. 必要なもの ツール バージョン 備考 Eclipse 4.3 Pleiades All In One Java Kepler JRE 1.6 (Eclipse付属のを使う※) JDK 1.6 (Eclipse付属のを使う※) Tomcat 6.0 (Eclipse付属のを使う※) Struts 1.3.10 (下記Apacheのサイトからダウンロードする) MySQL 5 (今
2020-05-18 2020/05/18 追記 いまだにアクセスがあるのでコメントを書きます。 これは古い記事ですが、今でも通用する内容かと思われます。 かなり怪しい記憶ですが、当時のバージョンは Java 6 Struts 1.2 Spring 1 MySQL 5.5 iBatis(バージョン不明だが、すくなくともMyBatisではない)だったかと思います。なんでもそうですが、下位レイヤーから疑えというのは何についても大事でいつの時代も変わらないと思います。 よく言われていたSSHパターンの変則系(Hibernateの代わりにiBatis)の構成でした。 開発環境でSpring Batchを動かすと今まで動いていたはずのところでエラーが出てしまいました。 Spring Batchを動かすとエラーが…… java.io.EOFException: Can not read respons
C/C++で配列の長さの求め方です。 超基本中の基本なのですが、しばらくC/C++の配列を使っていないと アレレってことになってしまいます。 今日はそれでハマりました。 sizeofを使って配列の長さ(要素数)を求めたはずが、 なんでか落ちる…バッファオーバーランっぽい。 こんなコードです。 int hoge[20]; for (int i = 0; i < sizeof(hoge); i++) { hoge[i] = 0; // バッファオーバーランしちゃうよーぎえー(´・ω・`) } memset()使えよとかそういう問題ではありません。 ちなみに、次のパターンなら通常の環境の場合バッファオーバーランにはなりません char hoge[20]; for (int i = 0; i < sizeof(hoge); i++) { hoge[i] = 0; // おっけー!一応ね… } そう
はてなブログのサイドバーに設置できるカテゴリーのパーツいいのですが、 縦1列に並んで、非常に長くなっていやだ(´・ω・`)というのがあります。 カテゴリーが多くなると余計に長くなっていやだ。 ということで、ちょっとだけデザインを加えてカスタマイズしました。 適用前 なにこのカテゴリー長すぎ(´・ω・`)…… 改造方針 inline-blockを使って、li要素を横に並ぶようにします。 あとはhoverを使ってマウスオーバーしたときにちょっと光るようにします。 コピペでデザインCSSに追加しましょう 下記のコードをデザインCSSに貼り付けます。 /** * サイドバーのカテゴリーモジュール */ div.hatena-module-category div.hatena-module-body ul li a { color : #ffffff; /* 文字色 */ } div.hatena
Part1はこれ ものすごくありがたい情報をいただきました。 RVOについて(NRVOというのもある) これを無効化するオプションがありますよとのこと。 id:yohhoyさんのアドバイスが gccであれば-fno-elide-constructorsオプションを指定すると、 RVOが無効化されて結果が変わるかと思います。 ということでやってみました。 コードは前回のをちょっと端折ってこれで検証 ソースコード Part1で書いたものの一部抜粋バージョンです。 フツーにコンパイル $ g++ -o rvotest.exe rvotest.cpp 実行結果 テスト3_a function test3 called!! mystring constructor mystring(const char *str) called! [test] テスト4_a function test4 calle
C++では関数からstd::stringを皆はどうやって返してんだろうっていう疑問がわきました。 フツーに考えてstd::stringをそのまま値で返す一択なのですが、 そこで問題になるのがコピーコスト…… っていうかそもそもコピーしてるの?とかいろいろ疑問が沸くわけです。 動作確認環境はg++ 4.8.3です。 実験用のコード 普通はこんなのなしだけどstringを継承したデバッグ用のクラス #include <iostream> class mystring : public std::string { public: // コンストラクタ mystring() : std::string() { std::cout << "mystring constructor" << " mystring() called!" << std::endl; } mystring(const cha
最初にざっくり説明すると、C++の名前空間はC#にある名前空間と同じ概念です。Javaでいうとpackageに近い概念です。 前方宣言(forward declaration)はC++特有のものだとおもわれます。 前方宣言について あるクラスで包含(コンポジション: Composition)をしたときに、つまりとある別のクラスを利用したいときに、そのクラスのメンバーとして持つときに使うものです。言葉で説明するとちょっとわかりにくいですが、こんな感じです。よく皆さんやってるかと思います。 あんまりいい例が思い浮かばなかったんで2DのRPGの地図上のキャラクターのクラスを例とします。 Character.h #pragma once #include "Image.h" class Character { public: int getHp() const; void setHp(int hp
DXライブラリとC++によるソースコードを公開しています。 ソースコード ソースの中身の詳細については Github上のReadMe.mdを参照してください。 タイトルに一部ちょっと嘘があります。作ったという部分です。 自分で全部作ったのではなく、下記に掲載しているソースを参考にさせていただいて Cで書かれていたものをC++で書き直しました。 自分で作るにもRPGってどうやって作ればいいんだろ…ってとこがありましたので 一部処理を微妙に変更したり削ったりして勉強しました。 写経ってのの+αの行為ですね。これがまた面白かったです。 dixqさんから許可を頂き載せています。 参考にさせていただいた(パクった)ソースはこちら http://dixq.net/sakuhin.html にあるDXライブラリによるRPGのサンプルです。 10年程前に書かれたもののようです。 また、このようなメッセージ
起こっていた問題 特にブラウザのアドレスバー上でGoogle検索をしようと日本語入力をしようとしたときに まともに日本語が打てなくなる事象がたまに発生します。 ブラウザ以外のテキストエディタ上では特に問題になりません。 環境情報 ちなみに私の環境は以下です。※Mac macOS Ventura13.0のほうでもESETを使っていますがそちらはこの問題が起きてないです。 種別 ソフト バージョン OS Windows 11 Pro 22H2 ブラウザ Google Chrome 119.0.6045.125 ウィルス対策ソフト ESET Internet Security 16.2.15.0 原因と思われるもの 何だろうと思い探るとESETで問題があると報告がありました。 文字の入力がおかしいです - Google Chrome コミュニティ ただここで指摘されているバージョンと少し違います
Windows8(Windows7も含む)DirectXを使おうとしてちょっとあれれってなったので記事を書きます。 DirectXで開発するためにはDirectX SDKが別途必要です。当然ランタイムだけではダメです。 しかし、Windows7以降はWindows SDKと統合されているので、Visual Studio 2012以降をインストールさえしていればDirectX SDKは必要ありません。 ただし、それはDirectX 10以降のバージョンを使う場合です。 ネットにあふれている情報はXPでも使えるDirectX 9までの情報が多いです。 DirectX 9を使うには別途DirectX SDKが必要です。 http://www.microsoft.com/en-us/download/details.aspx?id=6812 いままでDirect2Dの機能は何度か使っていましたが、
このところHOTな話題のbashの脆弱性で小手先の対策で 1. 全ユーザのデフォルトのシェルをtcshに 2. /bin/bashの実行権をなくすという方法を暫定的に採用しようことで 検証していたらCentOSが起動しなくなって泣きそうになった記録をダラダラと書きます。 断片的なLinuxの知識しか持ち合わせていないと簡単なことでも苦しみますね。 bashの脆弱性についてはここが詳細に書かれています。 bashの脆弱性(CVE-2014-6271) #ShellShock の関連リンクをまとめてみた - piyolog ちなみにCygwinはどうなのかなーと思ったらやっぱりだめでした。 $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test $ bash -ver
2016年02月07日更新 https://msdn.microsoft.com/library/81h27t8c(v=vs.110).aspx によるとメンバーに対してdllexportはだめらしいので追記。 また、main側サンプルコードが中途半端だったので、C++03以前で書きました。古い環境で開発せざるを得ないこともあるので 今回はVisual C++でのDLLの一般的な作成方法についての記事です。 DLLの作成方法や使い方にはいくつか方法がありますがもっとも一般的なのを紹介します。 Windowsでgcc以外でダイナミックリンクライブラリを作ろうとするとわりと面倒です。 今回は暗黙のリンクと呼ばれる方法と実装を説明します。 ※ただしこの方法は個人だけで開発する場合だったり規模が小さい場合だったりの場合で、明示的リンクのほうが適している状況もあります(後述)。 暗黙的リンクの概要
たまたまここを見てしまった人。興味ないよという人! これをやればあなたの好きなMacのOSX的なOS(Pear OS ナシOS)も 気軽にインストールできますよ! ただし今回はRHELクローンのCentOSですが。 超細かく解説していきますので、これであなたもLinuxユーザに。 勉強を兼ねて改めてVMware Playerをインストール & CentOS設定まで書こうと思います。 ところで、VMware Playerってなによってやつですが、 妄想でヴァーチャルな世界に嫁を作ってしまう。仮想の嫁。 仮想のマシンをPCの中に作ってしまうってものです。 マシンが1個だけども複数マシンがあるかのように扱えちゃうんです。 もちろん仮想のマシン内からリアルなインターネットに接続することも可能です。 脳内の中なら彼女作り放題だぜ!っていうあれです。 そうそう、なので、マシンのスペックが許す限りほかの
2020-07-30 C++でのファイルの読み込み方法のまとめです。 よく使われるCでもできる方法以外の 標準C++ライブラリを使ったファイル読込み方法です。 Visual C++ 2013とg++で確認しました 4パターン用意しました。 1. char *型に一行ずつ読込む 2. string型に一行ずつ読込む 3. char *型に全部読込む 4. string型に全部読込む テスト用ファイル(test.txt) 123456 89※このファイルは1行目は改行ありで、2行目は改行なしです (ただし、Vimなどのエディタでは改行なしの最終行を作ることはできないことに注意)。 1. char*型に一行ずつ読込む ソースコード #include <fstream> #include <iostream> #include <string> int main() { std::ifstream
次のページ
このページを最初にブックマークしてみませんか?
『Gobble up pudding』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く