(2016/01/01~)
2016/01/07

あけましておめでとうございます

少々遅くなりましたが、あけましておめでとうございます。本年もよろしくお願いいたします m(__)m

フレッツ光とWiMAX

当方の回線は WiMAX でした。何でって、個人事業主やるようになったばかりの時点では、作業場のある実家では ADSL 10M しかなく、値段もフレッツ光と大差なかったのです。やってられないので WiMAX を契約しましたが、この時点では WiMAX 2+ も来ておらず、ノーマルの WiMAX でした。

さて、それから WiMAX 2+ が使えるようになり、高速回線のきていない地域なので、"固定回線代替契約" という特殊な契約を結べるため、追加費用なしで LTE を 7GB 使う事も可能となりました。回線問題もやっと解決したかと思われたのですが、状況は一変します。

Windows 10 をインストールした頃から回線品質が悪くなり始めました。具体的には...

このような現象が起きました。やってられないです。

通信制限の原因は恐らく Windows 10 です。Windows 10 は過剰に通信を行うため、[設定 | ネットワークとインターネット | データ使用状況 | 使用状況の詳細] で確認してみたら、ここ一か月の通信量が 53.7GB になっていました。アプリの通信量じゃないですよ?システムの通信量です。慌てて ASCII.jp の記事にあったように "従量課金接続" に変更してみましたが、あまり効果はないようです。

僕の持っている WiMAX 端末は HWD15 で、コイツは WiMAX / WiMAX 2+ を切り替えられるのと、ガラホ SHF31 に WiFi テザリングがあるので、これらを駆使してどうにか凌いできました。

WiMAX だと何故かメール送信に失敗する事があるのがワケワカラン。

で、先月半ばにプチ出張から帰ってきたらセールスマンが居る訳ですよ、「フレッツ光の...」と聞こえた瞬間、説明を受ける前に「契約します!」と口走っていました。「これでやっとマトモな環境になるわぁ」と思いました...そんなこんなでやっとこさ光回線が引けたという訳です。

そうして手元には HWD15 の端末だけが残った (しかも二台) のだけど、MicroSD を突っ込んで Wi-Fi ストレージとして使えたり、モバイルバッテリーとして使えたりするので無駄にはならないかな。

個人事業主と経費

フリーランスでやっている場合、従業員 (青色専従者含む) がいなければ年末調整がないので、年末は忙しくないかと思われるかもしれませんが、税金の関係で年末は大忙しでした。

フリーランスの締めは年末なので、12月末までにやらなくてはならない事が多いのです。

これらをやっておく必要があるからです。

国民年金/国民健康保険は自動引き落としにするべきではありません。面倒でも振込用紙での振り込みにしておけば、滞納したり節税に使う事ができます。例えば可能な限り滞納しておいて、税金を取られそうな年にまとめて支払う事でその年に支払った額のすべてを控除対象とする事ができます。例えば、27年度であれば、28年 1,2,3 月の国民年金/国民健康保険を先払いすればその分控除できます。一時的にお金は減りますが、どうせ後で支払わなくてはならないいのでなんて事はないです。

中小企業小規模共済は 12 月加入&年払いにすべきです。こうしておけば、12月に最大で 84 万円分を控除対象にできますし、売り上げがなかったのなら掛け金を 1.2 万円に減額する事もできます...私はとりあえず最低の1.2万円にしておきましたが。

経費...これは重要です。足りないものがあったら年末にまとめて購入する必要があります。前の二つが控除であるのに対してこちらは経費ですから、所得金額を減らす事ができます。

会社にお勤めの方はピンとこないかもしれませんが、フリーランスには所得に応じて変化する税金が 4 つほどあります。

国民健康保険は税金ではありませんが、税金みたいなものです。これらを安く抑えるには先に書いた事を年末までにやっておく必要があったのです。ちなみにこれらを合計すると、所得の三割程度になります。ざっくり言えば、年間 300 万円自由に使えるお金が欲しければ、最低でも 430 万を売り上げる必要があります。事務所費用で月に 10 万経費が必要ならば、550 万を売り上げる必要があります。

加えて言えば退職金も失業保険もないし、年金支給額も安いのですヨ?フリーランスなんて安易にやるもんじゃないです。ブラック企業とか社畜とか言いますけどね、会社勤めの方が絶対にいいですから!フリーランスに労働基準法は適用されませんしね (w

年末に Amazon で買ったもの

「税金で取られるくらいなら経費として使ってしまえ」というのもアリっちゃアリです。経費として使った額の三割の税金が安くなるような感じですから。つー事で、年末に Amazon で購入したものを晒します (w

年末に買ったものは他にもあるのですが、経費で落とせるものかつ Amazon で購入したものは上記の通りです。チキンなのであまり高額なものは買えませんでした。

...フルで一年自営業をやるのは初めてなので、税金をいくら払わなければならないかの計算ができないのです。"やよいの青色申告" を使ってはいるのですが、現時点でも確定申告モジュールの提供はされておらず、ちゃんとした計算ができないのです...概算でいくらになるのかは判るのですけれど、経費の使い過ぎで税金払えないとかシャレにならないですからね。矛盾しているようですけれど、現在の制度ではお金があった方が節税をやりやすいんですよね...お金がないから節税したいのに。

「飲食店を経営していれば食材を経費として落とせるから、お金なくてもそれなりに生活はできるのかな?」と思ったり思わなかったり...僕の業種だと食べられないものしか経費にできないからなぁ (^^;A

確定申告が終わったら...

支払わなくてはならない税金が確定したら、今度は 3 月末までに経費を使わなくてはなりません。何故なら...

今度の 4 月からは 10万円を超えるものが買いにくくなるんですよ...orz いや、そんな事はなかったぜ!

Nifty のメールアドレス

事後報告になりますが、昨年末で @nifty の契約を解除しましたので、ht_deko@nifty.com へのメールは届かなくなります...スパム以外はほぼ届かなくなったので廃止する事にしたのです。

ガルパンはいいぞ

ガルパンはいいのだが、黒森峰や西住流のお膝元だというのに熊本の上映劇場がたった一つしかないので、観に行くのに苦労する。よりにもよってシネプレックス熊本 (地元民には水道町の旧ダイエーのトコと言った方が通りがいいか) だもんなぁ。車で行きにくいんだよなぁ...混雑するし。

なお、リアル西住殿の銅像は実家から車で五分の "西住公園" に佇んでいる。

追記: 1/30 から TOHOシネマズ 光の森 で上映開始の模様。光の森は行きやすくていいな!

Delphi IDE のウェルカムページに出るバナーを消す

私のやってる設定を公開。


2016/01/16

FireMonkey のグローバル変数 (備忘録)

FireMonkey には描画方法をコントロールするためのグローバル変数があります。

変数 説明
GlobalDisableFocusEffect コントロールのフォーカス効果が有効か無効かを指定します
GlobalUseGPUCanvas グラフィックとテキストのレンダリングに GPU (ハードウェア) を利用するかどうかを指定します
※OS X では未サポートです
GlobalUseDX DirectX (ハードウェア) を使用するかどうかを指定します (Windows プラットフォーム)
GlobalUseDXSoftware DirectX (ソフトウェア) を使用するかどうかを指定します (Windows プラットフォーム)
GlobalUseDXInDX9Mode DirectX を DirectX 9 互換で使用するかどうかを指定します (Windows プラットフォーム)
GlobalUseDirect2D Direct2D を使用するかどうかを指定します (Windows プラットフォーム)
※False の場合には GDI+ が使われます
GlobalUseGDIPlusClearType GDI+ 使用時のテキストレンダリングに ClearType を使うかどうかを指定します (Windows プラットフォーム)
※False の場合にはグレースケールアンチエイリアス処理となります

非推奨のグローバル変数もあります。

変数 説明
GlobalUseHWEffects ハードウェアアクセラレーションが有効な場合に使用するかどうかを指定します
GlobalUseDX10 DirectX を DirectX 10 (ハードウェア) で使用するかどうかを指定します (Windows プラットフォーム)
※GlobalUseDX を使ってください
GlobalUseDX10Software DirectX を DirectX 10 (ソフトウェア) で使用するかどうかを指定します (Windows プラットフォーム)
※GlobalUseDXSoftware を使ってください

これらのグローバル変数は FMX.Types で定義されています。

Intel GMA と Direct2D

Direct 2D を Intel GMA で使うとエラーになる事があります。具体的には 2K オーバーの画像を描画しようとした時にエラーになる事があります。これは Direct2D が画像をテクスチャとして扱う事に起因しているようです。

例えば FireMonkey の TImageViewer 等で大きなピクセルサイズ (ファイルサイズではない) の画像を LoadFromFile() すると D2D1 のエラーになる事があります。同様に VCL でも Direct2D Canvas に対して大きなピクセルサイズの画像を描画すると、やはり D2D1 のエラーになる事があります。

この問題が厄介なのは、Direct2D のキャンバスをオープンする事はできるという点です。つまり Direct2D そのものには対応しているのですが、いざ画像を描画するとエラーになるため、エラーをトラップする場所がないのです (手段がないとまでは言いませんが)。

この問題が発生する Intel GMA は (最低でも) 以下のようなものがあります。

名前が似ていますが、Intel HD Graphics 3000 等は正常に動作します。Intel GMA X3000 等を挙げていませんが、同様の現象が起きる可能性はあります。回避方法は Direct2D を使うかどうかの UI (環境設定) をアプリケーションに持たせることです。「Windows 7 以降だからと言って Direct2D が無条件で使える訳ではない」事に注意が必要です。心の片隅にでも小さくメモしておいてください。

See Also:


2016/01/19

液晶ディスプレイが壊れた

壊れたのはマルチモニタのサブディスプレイ。冷陰極菅バックライトな 1280x1024 のディスプレイ (メインのフル HD ディスプレイと一緒に縦画面で使用) でした...何年使ったのだろう?

サブディスプレイとしてはこの大きさでも充分重宝していたのですが...それにしたって夜間に壊れなくてもいいんじゃなイカ?画面真っ白で OSD が出なかったので、電源周りかヒューズが飛んだかのいずれかでしょう、多分。でも、これを修理して使う気にはなれませんでした。

新しく購入したのは iiyama ProLite E2280HS-B1。21.5インチ (Full HD) でスピーカー内蔵 (Amazon での評価を下げている要因ですが) かつ比較的安価。今回は Amazon を使わず熊本市内の実店舗で購入しました。初期不良や故障時に便利ですので。

それはそうと何で液晶ディスプレイって入力ソースのダイレクト切替ボタンが付いてるのが少ないんでしょうね?OSD でやると面倒だし、ボタン (タクトスイッチ) が壊れやすいんですけど。自動入力切替があっても、入力ソースの機器が複数起動していればやっぱり OSD で切り替えなくてはならない訳で...Arduino で切替スイッチを作りたくなる衝動に駆られます。

iPod Touch 6

購入。本当は先月の内に買いたかった。

iPod Touch 6 は iOS 9.2 が動作するし、iPhone 6 より安価です...Beacon も動作しますしね。ちなみに Apple Store で購入するよりも Amazon で購入した方が安いです。Apple Store の価格は税抜金額ですからね。

なお、iPod Touch 6 には Lightning ケーブルは付属しますが、充電器 (USB 充電アダプタ) は付属しません。

他に購入したのは上記の通り。

Delphi で Apple Developer Program に登録しないで、実機 (iPod Touch) にアプリをインストールする

山本隆さんのブログ記事の補足 (?) 記事です。他人のふんどしで相撲を取る記事とも言います (^^;A

この記事と同じ事を iPod Touch 6 でやってみようという趣旨となっています。Mac の環境はこちら。

iOS の環境はこちら。

Windows の環境はこちら。

XCode や PAServer の導入は済んでいるものとして話を進めます。

「Xcode 7 から、Apple Developer Program に登録しなくても、自作アプリを実機 (iPhone / iPad) にインストールして実行できるようになりました」という事なのでこれを検証 (?) してみます。要点は、

このたった二つです。まずは XCode でアプリケーション用の証明書を作ります。

  1. XCode を起動します
  2. [File | New | Project]
  3. iOS >> Application で Single View Application を選択し、[Next] ボタンを押します。
  4. [Product Name] に Delphi で作るプロジェクト名、[Organization Identifier] には (慣例的に) ドメインをひっくり返したものを指定します。[Bundle Identifier] に表示されているのが、アプリケーション (バンドル) の識別子となります。[Language] は何でもいいのですが Swift にしておきました。[Next] ボタンを押します。
  5. プロジェクトの保存先はどこでも構いません。[Create] ボタンを押します。
  6. 上部の、画像では [iPhone 6s Plus] となっている箇所をドロップダウンして Mac に接続されている iOS デバイス (実機) を指定します。そして [Fix Issue] ボタンを押します。

これで証明書が作られました。このプロジェクトをコンパイルしたり実行する必要はありません (多分)。画面はこのままにしておきましょう。上記作業の途中で "Enable Develooper Mode on this Mac?" と出たら [Enable] ボタンを押しておきましょう。

Delphi のプロジェクト側でやる事は以下の通りです。

  1. [プロジェクト | プロジェクトのオプション] を開きます
  2. アプリケーション >> バージョン情報 で CFBundleIdentifier に、ドメインをひっくり返したもの + $(ModuleName) を指定します。私の例だと "com.ht-deko.$(ModuleName)" ですね。
  3. ターゲットプラットフォームで [iOS デバイス - 32bit] を選択してビルドします

このようにしておけば、例えばプロジェクト名が test の場合には "com.ht-deko.test" という識別子を持った証明書が使われます。

ControlsDemo という名前のプロジェクトであれば、Bundle Identifier の最後の部分を書き換えて [Fix Issue] ボタンを押します。今回の件に直接は関係ありませんが、[Deployment Target] は 7.1 にしておくとよいでしょう。

iPod Touch 6 の方では、[設定 | 一般 | デバイス管理] で証明書を受け入れるようにするだけです。

[デバイス管理] は最初は表示されていませんが、アプリを転送しようとした時に表示されるようになります。どうしても [デバイス管理] が表示されない場合には、XCode で作成したアプリを ▶ ボタンを押して実行してみましょう。一度 [デバイス管理] が出てしまえば次回以降、この作業は不要です。

一度証明書を受け入れてしまえば、次回以降 (同じプロジェクト名である限り) はこの作業を行う必要はなく、デバッグ実行もできるようになります。

FireUI を使っていないのでレイアウトが崩れますが、デモプロジェクトの ControlsDemo を実行してみました。

iPod Touch 6 と iPhone 4 での実行結果です。Apple Developer Program に登録せずに自作アプリを実機にインストールするには XCode 7 以降を使えばいいだけであり、iOS のバージョンが 9 である必要はありません (もちろん最新の端末である必要もありません)。iOS 7.1 な iPhone 4 でもちゃんと実機で動かせます。

See Also:

そういえば

XE8 付属の PAServer では OS X El Capitan (10.11) のデバッグ実行ができないのですね (XE7 ではデバッグ実行できます)。XE8 の PAServer も Hotfix 出していいんじゃないかなぁ...?

See Also:

そういえば (2)

Appmethod が終了しています。http://www.appmethod.com/jp/ には既につながらなくなっています。

あまり価値のないプロダクトで、

というひどい制約はあったにせよ、無償版があったというのは重要だったと思います。無償版に Object Pascal (Delphi) がなかったのと、画面サイズ制約があったのは本当にファ○キンだったと思いますが。

...という事で、当サイトの Appmethod コーナーももう更新される事はないと思います。


2016/01/21

アレン・バウワーが見た夢

Delphi のチーフサイエンティストが見た夢の話です。

dcclinuxarm...Rasberry Pi 2...いい夢ですね (w

プロジェクトをソートするプラグイン

毎度おなじみ、らいなタンさんの IDE 拡張プラグインです。

CODE2015

2015 年に使った言語を #code2015 というハッシュタグを付けてツイートすると、グラフにしてくれるというもので、毎年行われています。

Delphi ユーザーの悪ノリが素敵です (^^;A

10 Seattle (Firemonkey) で OnTap イベントをオブジェクトインスペクタから生成すると [Ref] が付加され、手動で除去しないとコンパイルエラーになる

恐らくSubscription Update 1 をあてれば解決します。

平成27年度確定申告モジュール (やよいの青色申告)

確定申告モジュールが提供開始されました。

これで所得税額がハッキリするので、3月末までに購入できるものは購入しておかないとね。


2016/01/23

ManifestEx ver 2.20

リリースしました。

ダウンロードはこちらから。

DPI Aware とは?

ManifestEx では TNativeDPIAwareManifest と TNativeAdminDPIAwareManifest が追加されており、10 Seattle のマニフェストと同じ動作にできるようになりました。

この [高 DPI の有効化]DPI Aware です。ManifestEx との対応表は以下の通りです。

管理者権限の有効化
OFF ON
高 DPI の有効化 OFF TNativeManifest TNativeDPIAwareManifest
ON TNativeDPIAwareManifest TNativeAdminDPIAwareManifest

10 Seattle で [高 DPI の有効化] にチェックを入れるとアプリケーションマニフェストに以下のような記述が追加されます。

<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
   <asmv3:windowsSettings
        xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
     <dpiAware>True/PM</dpiAware>
   </asmv3:windowsSettings>
</asmv3:application>

赤字の部分には以下のような値を設定できます。

意味
False 高 DPI に非対応。Vista 以降の OS で高 DPI 環境の場合、DPI 仮想化が行われる。
True システム DPI Aware に対応 (Vista 以降)。
Per-Monitor モニタ毎 DPI Aware に対応 (8.1 以降)。Vista, 7, 8 では False 扱いになる。
True/PM モニタ毎 DPI Aware に対応 (8.1 以降)。Vista, 7, 8 ではシステム DPI Aware に対応。

10 Seattle で [高 DPI の有効化] にチェックを入れた時の値は True/PM です。

スケーリングの変遷を簡単に述べると...

また、Windows 8.1 以降かつモニタ毎 DPI Aware の場合、ディスプレイ間を移動して DPI が変更になったり、スケーリング変更のスライダー ([設定 | システム | ディスプレイ] にある [テキスト、アプリ、その他の項目のサイズを変更する:]) を操作して DPI が変更されると WM_DPICHANGED メッセージが飛んできます。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure WMDPIChanged(var msg: TMessage); message WM_DPICHANGED;
    procedure FormShow(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var
  DPI_X, DPI_Y: WORD;
begin
  OnShow := nil;
  DPI_X := GetDeviceCaps(GetDC(0), LOGPIXELSX);
  DPI_Y := GetDeviceCaps(GetDC(0), LOGPIXELSY);
  Memo1.Lines.Add(DPI_X.ToString);
end;

procedure TForm1.WMDPIChanged(var msg: TMessage);
var
  DPI_X, DPI_Y: WORD;
begin
  DPI_X := LOWORD(msg.WParam);
  DPI_Y := HIWORD(msg.WParam);
  Memo1.Lines.Add(DPI_X.ToString);
end;

end.

DPI Aware の場合、実解像度...つまりドットバイドットで描画されるため、高解像度ディスプレイでも描画がボケボケになったりはしませんが、高解像度対応は自前で行わなくてはなりません。高 DPI 対応は FireMonkey の方が簡単です (以前デブキャンでも申しましたが)。

Delphi が標準で吐くアプリケーションマニフェストはネイティブ対応の記述がないんですよねぇ...なぜ高 DPI 用のチェックボックスまで付けておきながらネイティブ対応の記述がないのだろう?

See Also:


2016/01/26

寒波!

いやー、ここ数日寒かった。39年振りの真冬日もあり、観測史上最低気温をあちこちで記録したのだとか。

もう結構雪は溶けたのですが、一時期は給湯器が凍ったり (凍結防止パイプカバーは巻いてある)、国道・県道・町道がすべてチェーン規制になったりで大変でした。一番寒かったのが日曜日だったのは幸いでした。


この雑談に対するご意見ご感想等ありましたら Delphi Forum までどうぞ。

 BACK   古いのを読む   新しいのを読む