Development

zip ファイル解凍時の文字化けに関する情報

CubeICE の利用動機の一つとして Mac などで作成された zip ファイルを解凍する際に文字化けしない と言うものが挙げられます。この記事では、なぜ文字化けが発生するのかと言う基本的な情報から、Windows における主要な解凍ソフトの対応状況までを簡単に紹…

Visual Studio 2019 と新 csproj への移行

2019 年 4 月 2 日、Visual Studio 2019 が正式版としてリリース (GA: General Available) されました。この記事では、 Visual Studio 2019 に関連する内容として、C# の新しいプロジェクト形式 (csproj) への移行について記載します。新 csproj 自体は Visu…

Azure Pipelines で OpenCover/NUnit を実行し Codecov に送信

CubeSoft の各種プロジェクトでは、継続的インテグレーション (CI: Continuous Integration) 用サービスとして AppVeyor を利用していますが、諸々の事情を考慮して Azure Pipelines でも同等の CI を実行できるように環境の整備を進めています。この記事で…

Cube のプロジェクト構成およびビルド&テスト方法

現在、cube-soft@GitHub には CubePDF や CubeICE 等の実装コードを始めとして様々なリポジトリが存在します。この記事では、これらのリポジトリを修正する際の基本的な情報について記載します。 ディレクトリ構成 Git ブランチ構成 ビルド&テスト方法 ディ…

CubePDF に含まれる Ghostscript を手動で更新する方法

先日、Ghostscript が 9.26 にバージョンアップしました。リリースノートによると Ghostscript 9.26 では再び、セキュリティ問題に関する修正が実施されているようです。CubePDF も、近日中に Ghostscript のバージョンアップを含めた最新版をリリースする予…

Ghostscript を C# から利用するためのライブラリ

先日、7-Zip ライブラリとしての CubeICE と言う記事を公開しましたが、ライブラリ化の試みは CubePDF シリーズでも行っています。CubePDF シリーズは Cube.Pdf と言うリポジトリで管理しており、ライブラリ部分は Libraries に、最終的なアプリケーション部…

ユニットテストで振り返るプログラマとしての自分史

ここ 1, 2 年、主に キューブ・ソフト で配布している Windows ソフトウェアを中心に、ユニットテスト周りの整備を精力的に行ってきました。今回は、テストと言う視点で、自らのプログラミングの軌跡を振り返るような記事を執筆してみようかと思います。 テ…

7-Zip ライブラリとしての CubeICE

圧縮・解凍ソフト CubeICE をゼロから改修 に記載した通り、昨年、CubeICE に対して大幅な修正を実施しましたが、この際にライブラリとしても利用できるようにインターフェース(クラスやメソッド)を整理する事をテーマの一つに設定していました。そこで、…

CubePDF シリーズの大改修

先日 CubePDF Utility 0.5.0β のリリースが完了し、数ヶ月にわたる CubePDF シリーズの改修、さらに言えば、去年からスタートさせていた CubeICE を含むキューブ・ソフト初期のソフトウェア大改修プロジェクトがようやくひと段落しました。そこで、この記事…

CubeICE の Zip Slip 脆弱性に関する調査報告

先ほど「Zip Slip」と命名された圧縮・解凍処理に関する脆弱性の情報を目にしました。 Zip Slip Vulnerability アーカイブファイル関連の脆弱性「Zip Slip」、大手プロジェクト多数に影響 広く採用されている書庫展開処理に任意コード実行を許す脆弱性 この…

Windows アプリ開発で利用している Web サービス

近年は GitHub を始めとした Version Control Systems (VCS) のホスティングサービスと連携する形で、プログラミングやソフトウェア開発に関する様々な Web サービスが提供されています。私は専ら Windows のデスクトップ・アプリケーションを開発しています…

圧縮・解凍ソフト CubeICE をゼロから改修

気付けば数年ぶりの更新となってしまいました。私は、普段 キューブ・ソフト (CubeSoft) と言う会社で様々な Windows ソフトウェアを開発・公開していますが、その一つに CubeICE と言うファイルの圧縮・解凍(展開)を行うソフトウェアがあります。今回、こ…

技術書の読み方として勘違いしていた、たった一つの事

技術書を読むときにやってはいけない、たった1つの事 を見ながら、ふと、思い出した事。タイトルは、前述記事に倣ってみました。本題の個人的に勘違いしていた事なのですが、それは、「技術書も小説のように、最初から最後まで、順番に読み進めていくもの」…

Windows/Cygwin で gem install/update が失敗する

プログラミングの話題を書くのは久々な気がします。先ほど、何となく「Windows/Cygwin の方の gem もアップデートしておくかぁ」と思い立ちました。ここで無事にアップデート完了したまでは良かったのですが、それ以降 gem install/update と叩くと、パッケ…

Boost 逆引きリファレンスのサンプルコードをテスト化してみる

この記事は C++ Advent Calendar 2013 の 8 日目の記事になります(あれ、俺 8 日目なのか……)。このネタを思いついたのは、先月に boostjp の ML で見かけた以下の投稿からでした。 Boost 1.55.0 Beta 1 RCが公開されました。http://lists.boost.org/Archiv…

未来への魔導書 〜 プログラミングの魔導書 Vol.3

プログラミングの魔導書 〜Programmers' Grimoire〜 Vol.3 “Parallel, Concurrent, and Distributed Programming” 並行世界の魔物に人類はどう立ち向かうのか。 序文(熊崎 宏樹) Lock-free 入門(熊崎 宏樹) OpenACC(藤田 典久) Erlang と Scala におけ…

Advent Calendar 2013 まとめのまとめ

今年もそろそろ Advent Calendar が始まる季節になりました。 一般的なAdvent Calendarは,12月25日のクリスマスを楽しみに待つために,12月1日から24日までのカレンダーの日付の部分(扉だったりする)を開けるようになっており,1日ずつその日の日付の部分…

Google+1 と Pocket のソーシャルカウントを取得する

Google+1 のソーシャルカウントについては SharedCount 経由で取得していたのですが、先ほど SharedCount からの反応がまったくなくなっていました。すぐに復帰したようなので一時的なものだったようですが、この際なので自力で取得する形に変更しました。つ…

プログラミング言語ごとの 64bit 整数対応状況

Twitterの「ユーザーID」が32ビットを超える、アプリ開発者などは確認を -INTERNET Watch Watch と言う記事を読みながら「そう言えば C とか C++ 以外のプログラミング言語は long が 64bit と言う保証はあるのだろうか」と言う事が気になったので、64bit 整…

Boost.Test (boost/test/included/unit_test.hpp) の使い方

リンク無しでテスト用のソースファイルが複数ある状況でビルドしようとしたら嵌ったお話。先日、ユニットテストについての講義をする際に「取りあえず Boost.Test を使ってみましょう」と言うことで、リンク(≒ Boost をビルド)しなくても良い boost/test/i…

アジャイル開発と反復型開発は違うのか?

所用で Code Complete を読んでいると「反復型開発 (Iterative and Incremental Development)」と言うキーワードが出てきました*1。「反復」と言う単語を聞いてまず思い浮かんだのは昨今よく話題になっている「アジャイル開発」なのですが、「アジャイル開発…

iText の PdfReader クラスで RandomAccessFileOrArray オブジェクトを引数に取るコンストラクタは廃止予定 (Deprecated)

iText (iTextSharp) でファイルサイズの大きな PDF を扱う場合、メモリや速度の問題を解決するために RandamAccessFileOrArray クラスを利用すると言う方法が存在します。 対策方法はないかと調べたところ、PdfReader クラスのコンストラクター public PdfRe…

Visual C++ で .NET Framework を使用する際の注意点

Microsoft .NET Framework を使用したプログラミングを行う場合、特に制限がなければ C# なり VB.NET なり(最近は F# も?)を使用した方が良いと思うのですが、時には過去の資産(C++ のクラスライブラリ等)を利用する等の理由で C++/CLI を使用する事も…

Google Chrome のリッチ通知機能

Google Chrome 28 から「リッチ通知」機能と言うものが追加されたそうです。Google Chrome には以前から通知機能があったそうなのですが*1、この機能の強化版的な位置づけでしょうか。実際にどんな感じになるのかについて、github にサンプル があったので使…

git rebase に関するメモ

間が空きましたが、git の運用指針 - Life like a clown のフォロー記事、第 2 弾。 公開リポジトリに push した commit を rebase してはいけない rebase に関しては、まだ使いどころが今一つ掴めないでいるのですが、明快な指針が一つ示されていました。 …

Microsoft Ribbon のグラデーション効果を削除する

現在、Microsoft Ribbon for WPF を使用したアプリケーションを作成しているのですが、デザインを詰める段階になって、なかなかしんどい事態に遭遇しました(参考:残念なMS Ribbonについて - DICOM Viewer 開発記)。例えば、Ribbon の背景色をデフォルト色…

ページ番号とインデックス

細かい話なんですが、どうインターフェースを定義しようか頭を悩ませてきたので、書きながら整理。何らかのファイルの「複数のページ情報を管理」するためのクラスを書いています。内部では何らかのコレクションクラスで管理する事になるのですが、管理して…

git merge に関するメモ

前回、git の運用指針 - Life like a clown と言う記事を書きましたが、git の事をよく理解しない状態のまま取り急ぎ作成したために、やはりいろいろとまずい所があったようです*1。指摘された点としては、「merge や rebase の理解がまずい」、「git-flow …

git の運用指針

ソフトウェア開発に関しては、これまでほぼ一人で完結していた*1ので git の運用方法もかなり適当だったのですが(ただのコミットマシーン状態)、今回、同一プロジェクトに対して複数人でコミットしていく形になっているので、その状態だとやはりまずいなと…

Windows の標準的な UI ボタン用アイコン素材 59 種類

アプリケーションを開発する際、最終的なアイコン等の UI 素材はデザイナの方に作ってもらうのですが、開発途中等で方向性が決まっていない段階では取りあえず適当なアイコンを適用して開発を進める事がしばしば存在します。この際に「取りあえずの適当なア…