MJHD

エモさ駆動開発

UNIRASTをC#で実装してみる

UNIRASTという画像形式がある。

AirPrintなどで使われている形式のようで、Appleが独自開発をしたもののようだ。公式なドキュメントは見当たらないが、リバースエンジニアリングしたものがGitHub上にたくさん転がっていたので、それをC#で書き直してみた。

 

目標は、BMP形式から、URF(UNIRAST)形式へ相互変換できること。

UNIRAST

UNIRASTは、以下のようなフォーマットになっている。

 

github.com

 

TIFFに結構近い模様。

ファイルは、

"UNIRAST\0" 12byte (\0は0x00)

Page Count    4byte   (ページ数)

から始まる。

この後、各ページが格納される。

各ページは以下のヘッダから始まる。

Bit Per Pixel   1byte   (深度)

Color Space   1byte   (なんだろ?)

Duplex Mode  1byte   (両面印刷)

Quality            1byte   (印刷クオリティ)

-                      4byte

-                      4byte 

Width              4byte  (横幅)

Height             4byte  (縦幅)

DPI                  4byte

-                      4byte

-                      4byte 

それぞれのページ毎に形式の違うデータを格納できるよう。

 

そしてその後各ページのピクセルデータが続く。

ピクセルデータは、以下のような書式になっている。

Line Repeat Count   1byte (一行のピクセルデータを、何回繰り返すか)

PackBit                     1byte (後述)

Pixel Data                 Bit Per Pixel分 (RGBが入る)

...

PackBit                     1byte

...(PackBitとPixelDataが、右端まで続く)

Line Repeat Count    1byte

...(Line Repeat Countが、下端まで続く)

Line Repeat Countは、一行のピクセルデータを何回繰り返すかを表しており、たとえば3だった場合は、次から始まる一行のデータを4行繰り返す。

 

PickBitは、TIFFで使われているアルゴリズムのようで、この値により後に現れるピクセルデータの扱いが変わる。

0x00-0x7Fの場合、後に現れるピクセルデータを、PackBit+1回だけ繰り返す。

0x80の場合、その時点から右端までデータは空白になる。真っ白。

0x81-0xFFの場合、後に現れるピクセルデータを、PackBit - 0x80個そのまま取り出す。

 

以上でUNIRAST形式のファイルを生成することができる。

## ソースコード

https://github.com/mj-hd/AirPrint.NET

法人を立ち上げる手順

実際に法人を立ち上げてみて、その手順のメモ。

ちなみに、私は大学生なので、近い境遇で起業を考えてる人などの参考になれば。

 

前提

  • 学生
  • 合同会社
  • 共同設立者あり
  • 報酬あり
  • 紙定款

 

準備

法人登記にあたって必要なものは以下。

  • 代表社員個人の印鑑登録証明書
  • 各役員の年金手帳
  • 法人の印鑑
  • 出資金
  • 出資金を入れる口座の通帳
  • CD-R
  • ある程度のお金(収入印紙代など)

まずやること

もし住民票の住所が現在のものと違うなら、変更しておこう。

また、印鑑登録なども済んでいなければ、市役所へ行き登録してこよう。

決めておくこと

  • 事業年度
  • 役員報酬額

事業年度は、会社設立日よりも前の日付を設定しよう。そうでないと、会社設立直後に年度末が来てしまう。

役員報酬額は、きちんと社会保険料なども考慮して、資本金と相談して決めよう。特に、最初の数ヶ月間はキャッシュが不足する。

法人の印鑑

法人の印鑑を購入すること。法人の印鑑は三点セットになっており、銀行印、社印、代表者印の役割がある。(4点セットの場合もある)

ネットで数千円ほどで購入できる。

おそらく、注文してから届くまでに1週間ほど必要なため、この間に定款の作成を始めよう。

定款

合同会社においては、定款認証なども要らず、あまり精査されない。よって、ある程度書いておけばまず問題はない。

ネット上で見つかる、合同会社用の定款のテンプレートをもとに、作成しよう。

inqup.com

代表社員を定める文言について、当初は「当会社の代表社員は,社員の互選によって定める。」と記載していたが、法務局の人によると「きちんと、ここで記載してしておいた方がいいよ」とのことだったため、「当会社の代表社員は,○○○○とする。」と明記しておいた。

 また、社員の氏名などは、苗字と名前の間にスペースを空けないなど、細かなルールがあるようだ。

作成が終わったら、印刷し、製本テープを使い製本した後に、以下の箇所に印鑑を押す。

  • 最後のページ、自分の名前の隣に各個人の印
  • 最後のページ、右下余白部分に各個人の印(捨印)
  • 定款表紙、製本テープと定款の境目に各個人の印(割印)
  • 定款裏表紙、製本テープと定款の境目に各個人の印

これで、定款は完成。

データは後々何度も使うことになるので、取っておこう。

また、定款提出後は定款の内容の変更がない限り、上書き保存はしないように気をつけよう。

法人登記申請書

本店所在地及び資本金決定書

払込証明書

この辺はみんなこれを参考に書けばOK。

inqup.com

ただし、一つの書類が複数枚に分かれる場合は、きちんと割印を押そう。

例えば、振り込みを証明するものは、複数枚に分かれることになると思うので、

簡単なものであれば、左側を二か所ホチキスで止め、各ページの境目(一枚めくった真ん中)に代表社員の印鑑を、

製本テープを用いるのであれば表紙と裏表紙のテープの境目に代表社員の印鑑を押そう。

また、参考URLのテンプレートはいろいろと適当なので、適宜修正をしよう。(そこまで細かく見ないということの表れなのかも)

就任承諾書

この辺も参考URLの通り。

CD-R

これも、参考URLの通りに作成するが、事業内容、公告の方法などは定款のものを一字一句違わずに記載しよう。

コピペがおすすめ。

代表社員の印鑑登録証明書

市役所などで取得したものを添付しよう。

法人の印鑑届出書

これも、参考URLを見て、記入しよう。

収入印紙

収入印紙を貼る用紙。法務局で購入できるので、登記申請当日でも大丈夫。

申請

ここまでで不安のある人は、予め法務局に登記相談の予約を入れ、書類の不備などを確認してもらうととてもスムーズに行く。

実際相談してみたところ、とても気さくなおじさんが対応してくれた。(「若いのに偉いねぇ〜、頑張って」と声をかけていただいた)

そして、上で準備した書類を持参し、住民票のある自治体の法務局へ行く。

申請自体は5分程で終わり、受付番号と1週間後ぐらいに登記が完了する旨を伝えられる。

登記完了後

登記が完了したら、社会保険の申し込みや、市区町村への届け出、都道府県への届け出などやることがたくさんある。

登記完了までは一週間ほどあるため、その間に準備しておこう。

また、基礎年金番号などが分からない人は、早めに調べよう。

定款の写し

各申し込みについて、定款の写しが必要になる。基本的に、登記時に提出したものと同じWordファイルを印刷したものでよいが、奥書というものが必要になる。

奥書は、定款の最後のページ余白に、

「本書は原本と相違ないことを証明する。

   平成28年○○月○○日

                合同会社○○ 代表社員 ○○○○ 印」

と記入し、法人印の代表印を押す。また、定款の作成時と同じように、製本し、法人印の代表印を割り印として、表表紙と裏表紙に押す。

なお、各役員の印などは無しで問題なかった。

全部で4部ほど刷った。

税務署

  • 法人設立届出書
  • 定款の写し
  • 登記事項証明書
  • 株主等の名簿
  • 貸借対照表
  • 青色申告の承認申請書
  • 給与所得税の特例の承認に関する申請書

これも、ネットを参考に書けば問題なかった。

受付の人が3分ほどで申請を受け付けてくれた。

要追記。

県税事務所

  • 法人設立届出書
  • 定款の写し
  • 登記事項証明書

これもネットを参考に書けば問題ない。

一瞬で申請がおわった。

要追記。

市役所

  • 法人設立届出書
  • 定款の写し
  • 登記事項証明書

これも一瞬。

要追記。

年金事務所

  • 新規適用届
  • 登記簿謄本
  • 保険料校様振替依頼書
  • 被保険者資格取得届

一番時間がかかったかもしれない。

特に問題もなく申請できた。

要追記。

法人口座

今後追記する。

地方銀行の方が審査が緩い印象。

というかもはや審査なしで解説できた。

MacのJIS配列キーボードをUS配列で使いたい人用カスタムキーボードレイアウト

追記

現在はもっといい方法を使っています。 mjhd.hatenablog.com

MacのJIS配列キーボードをUS配列で使いたい人用、カスタムキーボードレイアウトを作成した。
El Capitan以前の人は、Karabinerというソフトを使った方が色々捗る。
macOS Sierra以降の人は、Karabinerがサポートされなくなった為、このキーボードレイアウトを入れる必要がある。

一応、通常のUS配列を選択するだけでも、US配列にはなるのだが、入力できない文字が出て来てしまう。そのため、こう言った工夫が必要
なお、作成にはUkeleleというソフトを使用した

ダウンロード

US_Custom.dmg - Google ドライブ

使い方

まず、ダウンロードしたdmgファイルを開きます。
f:id:wait0000:20161027184250p:plain

keyboardlayoutファイルを左のKeyboard Layoutsフォルダのリンクへドロップします。

あとは設定画面から、入力ソースの追加を選択し、US_Customを探して追加すればOKf:id:wait0000:20161027184336p:plain

Xamarin Androidで、AutoResizeするTextViewとButtonを作成する

Androidには便利な機能があり、LinearLayout使用時にそれぞれのウィジェットにWeight(重み)をつけることで、割合をベースにしたレイアウトを作成することができる。
これを使うことで、デバイスのサイズにとらわれずにレイアウトを作成することができる。iOSでいうAutoLayoutみたいな感じ。

問題点

ただ、TextViewやButtonなどのテキスト系は、フォントサイズが自動でリサイズされないため、画面の小さなデバイスなどでは見切れてしまうなどといった問題が起こる。
stackoverflowに、Javaで作成する場合のサンプルコードは載っているのだが、今回使用するのはXamarin。C#で書き直さなければならない。
android - Auto Scale TextView Text to Fit within Bounds - Stack Overflow

実は、Xamarin ForumnにC#移植版のコードが載っているのだが、一部ミスがあるため、常に最小値で表示されてしまう。
AutoResizeTextView — Xamarin Forums
備忘録として、修正したコードをまとめる。

AutoResizeTextView

gistbf77480062f5db26e1fab85a9f78ca17

AutoResizeButton

AndroidのButtonは、TextViewを継承しているため、同様の変更を加えることでAutoResizeに対応できた。

gist350d67001087124d0d85edf6e37851f4

完全食を自作してみた3

完全食を自作してみた2 - Devlion Memoより、最終報告。
8月一杯、完全食を食べ続け、比較のために9月一杯は普通の食生活を続けてみた。

完全食は良い…だけど

完全食は、時間の節約になった。
寝る前に翌日分の完全食を10分ほどで作り、朝・晩飲む。かなりの時間節約になった。

食費が安くなった。
一食200円しないため(多分、100円前半ぐらい)、かなりの節約になった。
その上栄養価もいいので、文句のつけようがなかった。

味も、正直慣れだった。
三食全て完全食の場合は、かなり飽きがくるため、一食だけカロリーに気をつけた通常の食事を食べるのも良いと思った。(PFJの開発者もそのような生活を送ってるらしい)

よって、完全食は経済的にも、栄養価的にも、時間的にもとてもメリットが大きいと感じた。
一人暮らしの学生などは、特に重宝するんじゃないだろうか。
ただ1つだけきになる点があった。

完全食を食べた直後から、動悸がする。
8月中、完全食を食べている最中に動悸、さらに食べた後1時間ほど、横になった際に動悸がすることに気づいた。
次第に動悸も酷くなり、思わず「ウッ・・・」と声が出るほどになったため、原因を特定する意味でも、9月に入ってからは通常の食事に戻してみた。
10月になってみて気づくのは、動悸が気にならなくなったこと。
試しに、10月に入ってからも完全食を食べてみたのだが、やはり動悸が再発した。
完全食が動悸の原因の可能性が高そうだ。

ソースを忘れてしまったのだが、どこかに、飲んでいた完全食に何かしらの栄養が足りなかったため、飲んだ直後から動悸がするという話があった。
今回も、もしかしたらレシピ上、材料上なにか不足・過剰があったのかもしれない。

今後は

今後は安いパスタに2食分89円のミートソースかけてサプリメント食べる生活に戻ろうと思います。

macOS Sierraにアップグレードして起こった問題

macOS Sierraにアップグレードした。いろんな問題が起こった。

Siriが使えない

Siriボタンが追加されたのはいいが、押しても何も反応がない。
おそらくバグ。

Escキーが死ぬ

作業していると、突然Escキーがシステムワイドに効かなくなり、vimのINSERTモードから抜けられなくなった。
どうやら、Siriを起動しようとすると、SiriがEscキーをぶんどり、そのまま固まってしまうらしい。(要検証)
F1キーなどを押すとNORMALモードに戻れるので、その辺を駆使して頑張ろう。

SiriのプロセスをKillすることで対応可能。

正常に起動しなかった場合、Siriは無効にするべし。

Karabinerが使えない

Karabinerが効かない。JIS配列で頑張る羽目に。

Bartenderが非対応

Bartender2として800円ほどでアップグレードする必要がある。

SD共有サーバでFuelPHPを動かす

お名前サーバなどの一部の共用レンタルサーバでは.htaccess内におけるmod_rewrite機能に制限が加えられている.

拡張子を書き換えるなどの処理はできないらしいのだが,ちょっといじると実はmod_rewrite機能は大体使えたりする.

一体何に制限がかかってて何に制限がかかってないのか….

FuelPHPを動かすには

  1. まずは通常通り,FuelPHPのプロジェクトをFTPでサーバ上にアップロードする.
  2. 次に,.htaccessのOptionsをコメントアウトする
  3. 最後に,RewriteBaseを明示する

以上で割といくらでもmod_rewrite使えたりする.

# Multiple Environment config, set this to development, staging or production
# SetEnv FUEL_ENV production

<IfModule mod_rewrite.c>

    RewriteEngine on

    # NOTICE: If you get a 404 play with combinations of the following commented out lines
    #AllowOverride All
        # 明示!
    RewriteBase /

    # Make sure directory listing is disabled
    # Options +FollowSymLinks -Indexes # コメントアウト!

    # Restrict your site to only one domain
    # !important USE ONLY ONE OPTION

    # Option 1: To rewrite "www.domain.com -> domain.com" uncomment the following lines.
    #RewriteCond %{HTTPS} !=on
    #RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    #RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    # Option 2: To rewrite "domain.com -> www.domain.com" uncomment the following lines.
    #RewriteCond %{HTTPS} !=on
    #RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
    #RewriteCond %{HTTP_HOST} (.+)$ [NC]
    #RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

    # Remove index.php from URL
    RewriteCond %{HTTP:X-Requested-With}    !^XMLHttpRequest$
    RewriteCond %{THE_REQUEST}              ^[^/]*/index\.php [NC]
    RewriteRule ^index\.php(.*)$            $1 [R=301,NS,L]

    # make HTTP Basic Authentication work on php-fcgi installs
    <IfModule mod_fcgid.c>
        RewriteCond %{HTTP:Authorization} .
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    </IfModule>

    # Send request via index.php if not a real file or directory
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # deal with php-fcgi first
    <IfModule mod_fcgid.c>
        RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
    </IfModule>

    # no php-fcgi, check for sapi and fpm
    <IfModule !mod_fcgid.c>

        # for PHP5 sapi installations
        <IfModule mod_php5.c>
            RewriteRule ^(.*)$ index.php/$1 [L]
        </IfModule>

        <IfModule !mod_php5.c>

            # for PHP7 sapi installations
            <IfModule mod_php7.c>
                RewriteRule ^(.*)$ index.php/$1 [L]
            </IfModule>

            # for fpm installations
            <IfModule !mod_php7.c>
                RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
            </IfModule>

        </IfModule>

    </IfModule>

</IfModule>