196の日記

完全に開発メモと雑談、その他忘れそうな計算式などを書き溜める場所になっています!

【応用情報】Unicode -> UTF-8 -> 16進数表現の問題

問題

Unicode文字列をUTF-8エンコードすると、各文字の先頭バイトは2進数表示が0又は11で始まり、それ以降のバイトは10で始まる。16進数表示された次のデータは何文字のUnicode文字列をエンコードしたものか。

E3 83 9F E3 82 B9 E3 83 81 E3 83 AB 32 35 74 68


解き方

変換ツールを使えば一発ですが、それはダメです。まず、文字コードの仕様から見ます。

  • Unicode 世界各国の文字を統一して扱うための16bitコード。後に21bitに拡張された。
  • UTF-8 Unicode8bit単位で符号化するための文字符号化形式。ASCII文字と互換性をもち、ASCIIは0から始まる1byte文字で、それ以外の多バイト文字は、先頭バイト→11から始まる1byte、先頭以外のバイト→10から始まる1byteで符号化する。


ここで重要なのは、UTF-88bit文字ではないこと!!!僕は知りませんでした。笑 つまり1byteごとに区切ってちょうどいい大きさにするやつって感じですか。
ASCIIは7bit文字なので、必然的に1byte内に収まるんですね。一方Unicodeは2byte以上必要になるので、先頭バイトとそれ以外のバイトの始まりが分けられているんですかね?(多分)




文字だとわかりにくいので、図を用意。

f:id:thinline196:20180118172606j:plain:w300
Unicode->UTF8->16進数




改めて問題を確認。

問題文の最初の部分はエンコード後の先頭バイトについて。わざわざ書いてくれていました。優しい!
次に問題の文字列を確認。16進数が並んでいますね。これは、UTF-8を2進数→16進数に直した結果でしょうか。直し方の手順としては、

  • UTF-8から1byte分持ってくる(これで一文字とは限らない) 11100011
  • 4bitごとに分ける  1110 0011
  • 16進数に変換する  E3

こんな感じです。



手順がわかったところで、次は文字の切れ目の目安である、先頭byteが0又は11の探し方です。
2桁で表されている16進数の左側に先頭byteの情報が反映されるため、ここを確認すれば見つけ出すことができます。

  • 先頭が0から始まる4bitは 0000~0111 これを16進数に直すと0~7
  • 先頭が11から始まる4bitは 1100~1111  これを16進数に直すとC~F


つまり、2桁の左側が上の数字から始まっていれば、そこは先頭byteであり、文字の始まりであると言えそうです。
(余談ですが、先頭バイト以外は10で始まると言いましたが、これは16進数でいう8~Bにあたり、見事被らないですね)



あとは、問題から上の条件で始まる16進数を見つけ、数えればそれが答えです。



(E3 83 9F) (E3 82 B9) (E3 83 81) (E3 83 AB) (32) (35) (74) (68)

A.8文字







ところでなんて書いてあるのでしょうね。
以上。

【意外と簡単】フリップフロップ 理解の仕方

最初に断っておきますが、今回はこちらのブログさんからほぼ引用しております。
d.hatena.ne.jp




フリップフロップにすごいひっかかって悩んだ思い出であります。。しかも、結局今まで分からずに放置しておりました。

f:id:thinline196:20180118002911p:plain

他の論理回路って結構頑張って考えたら多少複雑でも理解できるじゃないですか、、?けど、フリップフロップ回路は全然分からなかったんです。


理解できなかった部分

どこで理解できなかったのかなーって考えたら、出力が帰ってきている部分と、2入力あるところかなと思いました。
と、ここで一番上のサイトさんから突破口を戴き、まずこの回路の役割と動きから理解して行くことに。

フリップフロップ回路は物事を記憶する

まぁ、これはフリップフロップを勉強するときに一緒に得る知識ですが、笑 
回路で記憶するとなると、ずっと同じ値がそこに流れていれば、それが記憶されていることになると思うのですが、サイトさんはこれを輪っかで例えました。円状の回路に値が流れれば同じ値がずっとぐるぐるしますよね。この状態を作るのが目的だそうです。



ここから、輪っかに手を加えます。

1. OR回路を追加する。 ーーこれに1を流せば輪っかの中は必ず1になります。(ONの状態になる)
2. AND回路を追加する。 ーーこれに0を流せば輪っかの中は必ず0になる。(OFFの状態になる)


これで、フリップは完成しています。図で表すと下のようになります。これなら輪っかの中でONかOFFを記憶できますね。

そして残りは、
3. 上の二つをNAND回路で書き換える。ーー回路はNANDで構築されている。


これで最初の乗せた普通のフリップフロップ回路になるわけです。NANDだから見難かったのかもしれません。

f:id:thinline196:20180118005940j:plain
フリップフロップ簡易版





一番上の図で説明しますが、
(S, R)を入力として用い(SはSet, RはResetの意味),Qは記憶させていたい値と思ってください。一般に

(1, 0) Qに1を保持させる。
(0, 1) Qに0を保持させる。(1を忘れさせる)
(0, 0) 今のQの状態を保つ。
(1, 1) 禁止。不安定になるのでだめ。

のような入力で使用します。



覚え方

ここからは勝手なこじつけかもしれないので、間違っていたらスルーで。

1.まず、初めの入力時は0が流れていると考える。
こうすることで、最初に出力結果が出ていないのにNANDとか無理じゃん!ってならない。

2. SとR平行に考えず、ゆっくりSから考える。
Sの先のNANDを突破したら自ずとRの方のNANDに結果が反映されるので、この方がわかりやすい!


最後に

覚え方の部分は割と自分流なので、あまりあてにしないように!けど、理解の掴みには良いかもしれない。
フリップフロップを自分で発見したかった。。



以上。

Unity VR (Oculus Rift 他) HMDと連動しないカメラ

UnityでOculus側とディスプレイ側に別々の視点の映像を表示する - Qiita


ここ(上)を参考に

f:id:thinline196:20171201201516p:plain

一番下のTargetEyeをNoneにすることで、HMDと連動しないカメラとなります。この項目は、VR(XR)Supportをオンにしないと現れない項目なので注意。




余談

ちなみに、HMDミラーリングも消すことができるそうで

UnityEngine.VR.VRSettings.showDeviceView = false;
||

ローカルエリアにサーバを公開したかった(Mac) (原因:McAfree)

少し前に似たようなことやったのに、また忘れてました。
thinline196.hatenablog.com


今回は自分のMacでの出来事。Railsで作ったプロジェクトをローカルエリア内で、apiサーバとして動かしたいと思っていました。

が、、



localhostで叩いたら繋がりますが、プライベートアドレスで叩くと繋がらない。ちなみに、自分のPC内でip叩いてつながればローカル内でもつなぐことができるようになっています。


で、、
Mac本体の設定からファイアウォールの設定を試みるも、うまくいかず。なんかアプリケーションごとにしかできないのかな?で、思い切ってファイアウォールを一旦切って見ましたが、それでも繋がらない。





はい。原因McAfeeでした。

f:id:thinline196:20171025170414p:plain
f:id:thinline196:20171025170530p:plain

上の手順のあと出てくるウィンドウのファイアウォールから+ボタンで設定を追加しましょう。Railsは3000ポートを使用するので、そこだけ許可してやると、非常に良きです。

Unity UNET 特定のアドレス,ポートに接続できない(Windows)

別にUnityに限った話ではないですが、unetで固定ipとポートを指定してそのアドレスに立てたサーバにアクセスできない時の対処法。ネットワーク周りに疎い僕のようなUnityユーザはわんさかいるのではないでしょうか笑


今回はWindows Firewallが原因でした。(McAfee使ってますがここは特に関係なし)

[コントロールパネル] > [システムとセキュリティ] > [windows ファイアウォールによるアプリケーションの許可] > [別のアプリの許可]


ここからProgram FileフォルダにあるUnity.exeを登録してやってください。外からアクセスする場合があるのならパブリックに設定。