お知らせ

  • パソコン関連

Windows10のメモ帳のアップデートと文字コード

noimage

Windows10のメモ帳のアップデートと文字コード

Windows10の今後のアップデートで、メモ帳で保存時のデフォルトの符号化方式がUTF-8、BOMなしという形式になります。 UTF-8は国際的な文字コードの規格Unicodeの符号化方式の一つで、従来までのメモ帳でUTF-8を扱う際はBOMありという形式でした。 BOMはバイトオーダーマークの略称で、このテキストUTF-8であることと、エンディアンを認識するために追加される先頭数バイトに付加される情報です。 エンディアンは複数バイトのデータを受け取る時に、バイトの並び順の解釈の方法です。 これまでのメモ帳を利用してUTF-8で保存するときは必ずBOMが先頭に保存される仕様でした。 BOMが付加されるとUTF-8とANSI方式の互換性が失われてしまうという問題がありました。 ANSI形式はアルファベットと数字、標準的な記号で構成され1バイトで表現されます。UTF-8は1バイトで表現できるものは1バイトのままで記述てでき、漢字を含めた多言語を扱う場合は複数バイトを利用して符号化できるのようになっています。 UTF-8はそのANSI形式との互換性があるために多言語での開発に活かされ、Webベースの開発ではデフォルトの符号化方式になっています。英語圏の開発者でもUTF-8を意識して作成しておけば、そのまま多言語対応のソフトウェアにすることができます。 BOMがつくことになると、データを受け取る側がBOMを解釈するという処理を必要とすることになり、その処理を持たないシステムでは文字データとしてうまく扱うことができません。 そのためWeb系での開発ではWindows標準のメモ帳を使わないというルールが設けられることもあるようです。 もともとUTF-8がありふれた形式ではなく、互換性に慎重にならざるを得ない状況で付加されたメモ帳の機能ですが、昨今のUTF-8の利用状況を鑑みてBOMなしが新しいメモ帳の標準の保存形式となるようです。

  • パソコン関連

ブラウザーEdgeがChromiumベースへ移行

noimage

ブラウザーEdgeがChromiumベースへ移行

Windows 10の標準ブラウザーであるEdgeが独自開発のものからオープンソースChromiumをベースにしたものへ移行されることになりました。 ChromiumはGoogle Chromeに利用されているHTMLレンダリングエンジンです。実質的にEdgeとChromeはHTMLやCSS、javascriptなどが互換性を持つことになります。 これによりWEB開発者はEdgeでの検証を今後スキップすることができるようになります。 現在ブラウザシェアはGoogle Chromeが半数以上を占めています。それに対してEdgeは10%に満たないシェアしかありません。それについてMicrosoftが独自のHTMLレンダリングエンジンを開発し続けるコストに意味を見出さなくなったものかと思われます。 今後ChromiumベースのEdgeはWindows7や8.1、macOSなどにも提供されるということです。 Windows7以降でもEdgeが利用できるようになることで、Internet Explorerのシェアに対する影響は不明なところです。 古いブラウザーであるInternet Explorerの存在はWEB開発者にとっては互換性を取るために最も苦心するところですが、ActiveXが動作するなどの条件があり今だに脱却できないシステムなども多くあります。 今回のEdgeの方針転換がWEBブラウザシェアに対してどのような影響を及ぼすのかは今の所不明ですが、現状のChrome優位は動くことはなさそうです。  

  • らずぱいでIoT

らずぱいでIoT 第8回(16Bit幅の補数計算検証)

noimage

らずぱいでIoT 第8回(16Bit幅の補数計算検証)

pythonのint型変数の扱いには少し注意が必要です。 python3のint型は最大のBit幅に制限なくShortやLongといった区別がなくなりました。 そのため前回の16Bit長のレジスタ値のマイナス表現でpythonが認識しているbit幅に拡張する場合どう描くべきかをC言語のプログラムを使い見てみます。 その前に補数について少し触れておくと 計算機内部では、マイナス値がどのように扱われているかという事を見てみると 1Byte=8bit長の2進数で表現可能で計算機内部では5という数字は 00000101 という2進数です。 この5をある数字から引きたい場合、計算機の中でどのようなことが起きるかというとビットを反転させる解くことが起きていますなので5は 11111010 という2進数になりこれを1の補数といいます。 1の補数表現の5にある数字を足すと例えば十進法の10を足すと十進法の10は2進法で 00001010 なので 11111010+00001010 = 100000100 となりますが8bit幅なので最上位の1が無くなり 00000100 = 十進法の4 となります。 上の2進数の式を10進法で見てみると 250 + 10 = 260 で8bitで表される最大数は255なのであふれた分を計算すると5という10-5の答えが得られます。 では1の補数で計算するとなぜ答えが4になるかというと計算機内部で最上位ビットを符号とした場合 2進数の10000000は-0というおかしな値が存在しているためで、この分符号反転した時点で1を足さないとつじつまが合わないということが起きます。このようにビット反転して1を足した補数を2の補数と呼びます。 2の補数で計算してみると 11111011+00001010 = 100000101 となり2進数でも正しい値が出てきます。 これを踏まえた上で、16Bit幅のマイナス値をpythonのint型に拡張する場合どうするかをpythonではBit幅が確定されていないのでC言語で試してみたいと思います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 以下プログラム #include <stdio.h> void main() { unsigned short n = 0xfff5; _______ short m; ____ printf("単純にマイナス %04x->%d(%08x)\n",n,-n,-n); ____ // 16Bit幅で2の補数表現に変換 ____ m=(-n ^ 0xffff)+1; ____ printf("2の補数表現に変換 %08x -> %d\n",m,m); ____ printf("-11のビット確認 %08x -> %d\n",(short)-11,(short)-11); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーここまで なお_はスペースを示します。 最初のpirntfではunsigned short(32bit)の変数に0xfff5(16bit)をいれて単純にマイナスに変換すると32Bit幅で2の補数値が計算され0xffff000bとなります。 そのため下位16ビット幅で2の補数を計算してみると 0xfffffff5という値に拡張されていることがわかります。(2番目のprintf) 念のため32Bit長の-11が32bitはばで0xfffffff5であることを確認してみます。(3番目のprintf) ということでpythonで拡張できるかを以下のプログラムで確認してみると ーーーーーーーーーーーーーーーーーーーーーーーーーーーー ここから python #!/usr/bin/python n=0xfff5 print("%x -> %d\n" % (n,(-n ^ 0xffff)+1)) ーーーーーーーーーーーーーーーーーーーーーーーーーーーー ここまで ということで16Bitのマイナス値をPythonの持つ不確定長の整数型に上記の式で拡張できることが検証できます。 今回使用したCのソースとPythonのソースはここからダウンロードできます。  

  • らずぱいでIoT

らずぱいでIoT 第7回(温度、気圧、湿度の計算準備)

noimage

らずぱいでIoT 第7回(温度、気圧、湿度の計算準備)

以前に、awkで計算した際に計算式で使用したdig_T1~dig_T3の算出を行いましたがBME280のチップ説明書によるとawkのプロラム内でdig_T2とdig_T3はsigned shortのためマイナスの0x8000の符号ビットが1の場合マイナスで扱う必要があるため正常な計算ができない可能性があります。 ただし、何度か読みだしたdig_T2,dig_T3はマイナスの値になることはなく常温程度ならマイナスにはならないのかもしれません。 awkではビット演算がサポートされてないためShift Rotateのような演算関数を作りそのうえでビット演算関数を作らない限り演算できないので実現は難しい(アセンブラにできて高級言語でできないことはあり得ないですが)のですが、pythonの場合は温度、気圧、湿度を計算するためのパラメータを求めるときにビット演算が可能なため肩を合わせることも可能になります。 上の表は各パラメータの算出を行うため、レジスタのどの位置を読むとどのパラメータになるかを示しています。前回のプログラムではcalib をDictにしたのはこのデータを読み出すためにはアドレスを指定して読みだしたほうがわかりやすいプログラムになるためです。 で今回追加した部分は以下のようになります。 ーーーーーーーーーーーーーーーーーーーーーーーー以下プログラム dig_T[1] = (calib[0x89] << 8 | calib[0x88]) dig_T[2] = (calib[0x8B] << 8 | calib[0x8A]) dig_T[3] = (calib[0x8D] << 8 | calib[0x8C]) dig_P[1] = (calib[0x8F] << 8 | calib[0x8E]) dig_P[2] = (calib[0x91] << 8 | calib[0x90]) dig_P[3] = (calib[0x93] << 8 | calib[0x92]) dig_P[4] = (calib[0x95] << 8 | calib[0x94]) dig_P[5] = (calib[0x97] << 8 | calib[0x96]) dig_P[6] = (calib[0x99] << 8 | calib[0x98]) dig_P[7] = (calib[0x9B] << 8 | calib[0x9A]) dig_P[8] = (calib[0x9D] << 8 | calib[0x9C]) dig_P[9] = (calib[0x9F] << 8 | calib[0x9E]) dig_H[1] = calib[0xA1] dig_H[2] = (calib[0xE2] << 8 | calib[0xE1]) dig_H[3] = (calib[0xE3]) dig_H[4] = (calib[0xE4] << 4 | calib[0xE5] & 0xf) dig_H[5] = (calib[0xE6] << 4 | calib[0xE5] >> 4) dig_H[6] = (calib[0xE7]) ーーーーーーーーーーーーーーーーーーーーーーーーここまで 前回は、dig_T,dig_P,dig_HはListで初期化していましたがプログラムを書く際これらもDictで初期化しておいたほうがわかりやすくかけるため初期化部分をDictにしている事に注意してください。 今回の全体ソースと日本語のチップ説明書をZIPにしてありますのでここからダウンロードしてください。    

  • パソコン関連

Amazon Lambdaが対応言語を拡張

noimage

Amazon Lambdaが対応言語を拡張

2018年11月29日に行われたAmazonのイベントre:Invent 2018でAmazon Lambdaが対応するプログラミング言語が拡張される旨が発表されました。 Amazon LambdaはAmazonの提供するサーバーレスのクラウドアプリケーション実行プラットフォームです。 コードを書けばサーバーレスでそれを実行することができ、アプリケーション作成者は実行環境を整える必要がないというものです。 ストレージサービスAmazon S3にファイルが追加されることや、NoSQLデータベースエンジンAmazon DynamoDB上のデータに変更が加えられた時など複数のトリガーでアプリケーションが実行されます。 開発者としてはサーバー環境を整えなくても良いというのは効率よく開発を始めることができ、Amazon Lambdaの仕様さえ分かっていれば書いたコードをアップロードすれば良いだけということになります。 現状ではNode.js、Java、Go、C#、Pythonを利用でき、今後これにC++、Rust、Elixir、Erlang、PHP、COBOLが新たに加えられることになります。 これにより既存のコードや、これらを利用できる開発者がLambdaのサービスを受けることができるようになり、Amazonのクラウドはより広い範囲のアプリケーションをサポートすることになります。 Amazonクラウドがカバーする範囲がどんどん拡大され、オンプレミスからクラウドへの移行もさらに進んでいくことになりそうです。

  • パソコン関連

iPad Pro2018を使っていて課題になる部分

noimage

iPad Pro2018を使っていて課題になる部分

iPad Pro2018を使っていて課題になる部分はいくつか挙げられます。 使う以前のお話ではありますが、高価であるということがあります。Smart Keyboard FolioとApple Pencilを合わせて購入すると、合計金額でMacBook Airが新品購入できる価格になります。 それだけの価値を見出すことは誰にでもできるというわけでは現状ないのかなと思うところです。それらは使っていての課題になってきます。 パソコンと同じだけの費用がかかりますが、パソコンの代わりになるものではありません。パソコンと比べようとする考え方自体がiPadのあり方とマッチしていないと感じます。 パソコンと比べるのであればWindowsの2in1タブレットPCを購入することが最適の答えであるように感じます。 iPad向けアプリについてはかなりの充実があり、パソコンとは全く別の価値観を与えてくれます。iPad向けのアプリを使いたいかどうかがiPadを選択するかどうかの分かれ目ではないかと思います、 ただ現状は新しいiPad Proに最適になっていないアプリも多いです。これは時間が解決することでしょうが、ユーザーとしては最ももどかしい部分です。 ファイルアプリでデータのやり取りができることは、よく母艦と呼ばれる親機的なパソコンとのやり取りの必要性が薄れ単体のコンピュータとして使いやすいとは思います。 クラウドの使い方についてはある程度研究が必要で、iCloudやDropboxに対する最低限の知識がないとファイルアプリを存分に活かしきれないのではないかとも思います。逆に言えばそれだけファイルアプリによってクラウド連携できるアプリは増えています。 iPad Pro2018に最適化されたアプリが増えるにつれて、今回獲得した拡張性を存分に活かせるポテンシャルはあります。 タブレット自体の需要が伸びない中で高付加価値という路線で来たiPad Proですが、まだまだ使う人を選ぶという部分は否めません。 現状開発されているiPad向けフルサイズのPhotoshopなどがリリースされることで価値が花開くのではないかという期待はありますが、いまのところ全ての力を発揮しているとは言い難く、現状でコストパフォーマンスに期待してはいけないと思うところです。

  • らずぱいでIoT

らずぱいでIoT 第6回(Pythonで初書き)

noimage

らずぱいでIoT 第6回(Pythonで初書き)

今回は、温度、気圧、湿度を読み出すためのパラメータを書込んで補正データとRawデータを読取る部分をpythonで書いてみました。 書込みパラメータは第4回のシェルスクリプトでRawデータを読むを参考にしてください。 ーーーーーーーーーーーーーーーーーーーー 以下プログラム #!/usr/bin/python import smbus import time SMBUS_NUMBER = 1 SMBUS_ADDR = 0x77 SMBUS_REG_CONF = 0xF5 SMBUS_REG_CTRL_MEAS = 0xF4 SMBUS_REG_CTRL_HUM = 0xF2 dig_T = [] dig_P = [] dig_H = [] calib = {} n = 0x88 while n <= 0xA1: ____ calib[n] = 0 ____ n = n + 1 n = 0xE1 while n <= 0xF0: ____ calib[n] = 0 ____ n = n + 1 n = 0xF7 while n <= 0xFE: ____ calib[n] = 0 ____ n = n + 1 bus = smbus.SMBus(SMBUS_NUMBER) bus.write_byte_data(SMBUS_ADDR,SMBUS_REG_CONF,0xA0) bus.write_byte_data(SMBUS_ADDR,SMBUS_REG_CTRL_HUM,0x01) bus.write_byte_data(SMBUS_ADDR,SMBUS_REG_CTRL_MEAS,0x25) time.sleep(0.1) for k in calib.keys(): ____ calib[k] = bus.read_byte_data(SMBUS_ADDR, k) for k,v in calib.items(): ____ print "0x%02X -> 0x%02X" % (k,v) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ここまで このプログラムを書くにあたり、工夫した点はDictを使いレジスタアドレスとデータの関係性を作り上げている点にあります。 レジスタのアドレス等はデータシートに出ています。 こうすることによりレジスタの読取り部分をすっきりと書くことができたのではないかと思います。 ここではソース中のスペースを _ で表している事にご注意ください。 今回のソースはここからダウンロードできます。 何分Pythonは初書きのためつたないところがあるかもしれませんがご容赦ください。

  • らずぱいでIoT

らずぱいでIoT 番外編1(Windows10でsshが標準に!)

noimage

らずぱいでIoT 番外編1(Windows10でsshが標準に!)

なんと驚きました。 Winodws10のコマンドプロンプトからsshが標準で使えるようになってました。 ネタ元 http://www.atmarkit.co.jp/ait/articles/1811/22/news018.html sshだけではなく cURL や tar も使えるようになっているようです。 sshクライアント環境はほぼフルでそろっているようでsftpやssh-keygenも入っているようです。 これは、sshの公開鍵接続も可能になっているという事だと思われSSHを介してLinuxサーバー上にある様々な情報を得ることができます。 ちなみに、下記の画像はコマンドプロンプトからローカルサーバーに接続した例です。 これでCygwinのない環境でもsshがWindowsから使えるようになりました。 これを使うとラズパイにもすぐつながりますね!!

  • らずぱいでIoT

らずぱいでIoT 第5回(awkで計算してみる)

noimage

らずぱいでIoT 第5回(awkで計算してみる)

前回は、i2c-toolsのコマンドを使い気圧、温度、湿度のRawデータを読取ってみました。 今回は、Rawデータと補正値を読取ってそれをファイルに取り古くからあるフィルタープログラムのawkで連想配列を駆使して温度計算をしてみようと思います。 --------------------- 以下 ReadTemp シェルスクリプト側 #!/bin/bash i2cset -y 1 0x77 0xF5 0xA0 b i2cset -y 1 0x77 0xF2 0x01 b i2cset -y 1 0x77 0xF4 0x25 b sleep 0.1 i2cdump -y -r 0x88-0xA1 1 0x77 b >RT.dat i2cdump -y -r 0xE1-0xFE 1 0x77 b >>RT.dat awk -f CalcT.awk RT.dat ------------------------ ここまで 最後に awk -f でawkスクリプトを読んでいます。 ------------------------ 以下 awk スクリプト BEGIN { for(i=0; i<=15; i++) { hex[sprintf("%X",i)]=i; if (i>9) hex[sprintf("%x",i)]=i; } } /^[89aef]0:/ { split($0,dat,":"); line[dat[1]]=dat[2]; } END { dig_T1=shiftL(getByte(toHex("8"),toHex("9")),8) dig_T1+=getByte(toHex("8"),toHex("8")); dig_T2=shiftL(getByte(toHex("8"),toHex("B")),8) dig_T2+=getByte(toHex("8"),toHex("A")); dig_T3=shiftL(getByte(toHex("8"),toHex("D")),8) dig_T3+=getByte(toHex("8"),toHex("C")); temp_r = shiftL(getByte(toHex("F"),toHex("A")),12); temp_r += shiftL(getByte(toHex("F"),toHex("B")),4); var1 = shiftR(temp_r, 3) - shiftL(dig_T1,1); var1 *= shiftR(dig_T2,11); var2 = shiftR(temp_r, 4) - dig_T1; var2 *= shiftR(shiftR(temp_r,4)-dig_T1,12); var2 *= shiftR(dig_T3,14); printf("Temperature = %2.2f\n",shiftR((var1+var2)*5+128,8)/100); } function getByte(hiA,lwA) { r=0; Ads=sprintf("%x0",hiA); r = toHex(substr(line[Ads],3*(lwA+1)-1,1))*16+toHex(substr(line[Ads],3*(lwA+1),1)); return r; } function shiftR(v,r) { return int(v/(2^r)); } function shiftL(v,r) { return int(v*(2^r)); } function toHex(c) { if (length(c)==1 && (c ~ /[0123456789ABCDEFabcdef]/)) return hex[c]; else return -1; } ------------------------ ここまで でそれらしい値が表示されています。 なので今回使っている温度・湿度・気圧センサーは、シェルスクリプトからでも制御可能なデバイスです。 以上のスクリプトとサンプルデータはこちらからダウンロードできます。

  • ブログ

和歌山Pythonの会 発足秘話

和歌山Pythonの会 発足秘話

和歌山Pythonの会 こんばんは、落合です。   僕は、現在駆け出しのエンジニアなんですが、 和歌山県に住んでいてずっと感じていたことがあります。 「和歌山でITの勉強会って無いよなぁ」 というのも、世の中こんなに AI だ IoT だと叫ばれ、挙句に 学校でプログラミング教育実施 とまで言われているのに、なぜここ和歌山では、プログラミングが学べる・議論できる・共有できる場が無い(正確にはあまり無い)のかと。 エンジニア不足が問題となっている現代で、もっと仲間を増やそうと考える人がいてもいいんじゃないのかと。 エンジニアとして活動する中で困っていることや悩んでいることを共有・解決してあげたいと思う人がいてもいいんじゃないのかと。 ・・・ よし!無いなら作っちゃえ!! という軽いノリと勢いで「和歌山Pythonの会」が発足されました。(今日現在参加者14名) 正直に言いますと、僕自身Pythonマスターではありませんので、他人の困っていることはすぐには解決できないでしょう。 でも、場を作ることによって、仲間がいる安心感や やらなきゃいけないという責任感は芽生えましたので、とりあえずは成功です。 また、昨今のAIブームに押されてか、これから「Python」を学ぼうという方も予想以上にいたことは喜ばしいことです。 和歌山Pythonもくもく会 少ししかありませんが、実績報告を。 第1回和歌山Pythonもくもく会 日時:10月20日(土)14:00〜17:00 場所:TーLABO   参加者:6名 成果物(僕の):Djangoフレームワークで書籍管理アプリを作成しました。 https://wakayama-python.connpass.com/event/103168/   第2回和歌山Pythonもくもく会 日時:11月17日(土)13:00〜17:00 場所:システムキューブ  参加者:12名 成果物(僕の):初学者の方と文法事項(文字列・データ構造)を学びました。 大学生が2名参加してくれました!レベル高い!将来有望! https://wakayama-python.connpass.com/event/105745/ 【告知】第3回和歌山Pythonもくもく会(開催予定) 日時:12月15日(土)13:00〜17:00 場所:システムキューブ https://wakayama-python.connpass.com/event/110246/   昨日公開したにも関わらず、既に4名の方が申し込んでくださっています。 今回からは初心者コースも設けました。(こちらは「もくもく」というより「わいわい」です) 環境構築から、’Hello,World’、データ型、テータ構造、正規表現あたりができればと思います。 皆様、ふるってご参加ください。 新年、第4回あたりは「ラズパイ部隊」も本格的になっているのではないかと期待しております。 今回はここまで。 ありがとうございました。

1 11 12 13 14 15 72