2020年06月14日

GitHub と MySQL を組み合わせたサーバー DoltHub

2020年 6月 10日、Gigazine で GitHub と MySQL を組み合わせたようなサーバー DoltHub が紹介された。

GitHub は、プログラムのソースファイルなどをサーバーに保管し、バージョン管理を行うサーバー。 MySQL は、一般的に良く使われているデータベースだ。 DoltHub は、データベースの内容をサーバーに保管し、バージョン管理を行うサーバーだ。

使い始めるときは、Git とほぼ同じコマンドを使う。 自分のユーザー名とメールアドレスの登録、リポジトリの作成ができる。

リポジトリには、複数のテーブルを作ることができる。 テーブルを作るときは、MySQL とほぼ同じコマンドを使う。 テーブルを作り、データベースにデータを追加し、クエリ(検索)を行うことなどができる。

ここまでは、クラウド型のRDBとほぼ同じであるが、DoltHub はコミットができ、バージョン管理ができることだ。 Git と同様に、ローカルでの作業、ブランチ、ログ、差分表示、push、pull にも対応している。

RDBに保存するようなデータの多くは、バージョンがある。 たとえば、郵便番号は毎年更新されるし、顧客情報は日々更新されるが入会日や変更日を調べることがある。 ほとんどの人がやっていないだけで、実はバージョン管理が役に立つデータは多くありそうだ。 Git のバージョン管理が必要ないと思う人が減ってきたように、データのバージョン管理が必要ないと思う人は、DoltHub の登場で減っていくことが予想される。

バージョン管理をしない現在では、過去のデータを取り出すには、定期的にバックアップしたデータをリストアすることになるだろう。 しかし、いつのバックアップがどこにあるかという管理方法がバラバラなので、リストアするのは大変だ。 それに、全員が最新データを使うとは限らない。 顧客サポートにおいて過去の状況を調べるときは、そのサポートをする人に限り、過去のデータを参照することになるからだ。

データベースの内容を CSV や JSON にエクスポートして、それを Git でバージョン管理する(定期バックアップする)手もあるだろう。そのようにできなくもないが、あるデータベースがどの Git リポジトリに入れるかといった管理が必要になる。 そもそも定期バックアップしていないことがほとんどだから運用時に定期バックアップすることすら気づかない可能性もある。 DoltHub はそれらの管理が不要になりそうだ。

Dolt のブログによると、「私たちは、データの共有方法が壊れていると考えており、それを解決するのがDoltだと考えています。 CSV、JSON、XMLファイルへのリンクを見たときはいつでも、Doltのことを考えるべきです。」「MySQL の完全な代替品となることが目標」と書いている。

一般にデータベースは処理速度の要求が多いと言われており、クラウドの分散型データベースも性能をアピールしている。 そういう観点では Git を使うことが処理速度のネックになるのかもしれない。 しかし、最近は処理速度が十分速いケースが多くなっため Git + SQL というサーバーは増えていくと思われる。

ソース
https://gigazine.net/news/20200610-dolthub/
https://www.dolthub.com/blog/2020-04-15-how-dolt-types-work/

sage_p at 22:14|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 6/15

◇ Wikipediaは2019年にGoogle検索経由のアクセス数を30億件も失う。
https://gigazine.net/news/20200611-wikipedia-lost-3-billion-google-access/
… コンテンツのソースを書いているからって盗んでいいわけじゃない。グーグルはきちんと対価を払うべき。

◇ PS5のデザインが公開! デジタルエディションと2バージョンで発売。PS5向け28タイトルも発表。
https://www.famitsu.com/news/202006/12200120.html
… PS4発売からもうすぐ7年。

◇ 1秒で高画質映画1000本をダウンロード可能な光学チップが開発される、通信速度は毎秒44.2テラビットで世界新記録。
https://gigazine.net/news/20200525-micro-comb-optical-chip/
… コンテンツが一瞬で盗まれる時代へ。

◇ OpenAIが GPT-3 用いたAIモデルをAPIとして利用可能に、Wikipediaの内容を質問で検索するデモムービーも。
https://gigazine.net/news/20200612-openai-release-api/
… AI がエクセルの表を埋めたり、Wikipedia に書かれているソースを提示したりする時代へ。

◇ YouTubeで中国共産党を批判するコメントが自動削除されていたことが判明。
https://gigazine.net/news/20200527-youtube-auto-deletes-comments-chinese-government/
… グーグルの社員の中に共産党員がいるのか。

◇ Zoom、人権団体のアカウントを一時停止。天安門事件の会議開催で。
https://japan.cnet.com/article/35155203/
… 企業は中国共産党が作った法律に対抗できない。

◇ Windows 10 新プレビュー、WSL 2 用Linuxカーネルの提供方法を変更。
https://japan.cnet.com/article/35155185/
… エミュレーター型から、2つのOSが共存するようになっていく。

◇ 約5400億円の集団訴訟、Googleはプライバシーモードのブラウジングからも個人情報を収集していると原告は主張。
https://gigazine.net/news/20200603-google-privacy-mode-lawsuit/
… やはり個人的な情報を独占するための機能だった。

◇ クソッなどの悪態をつくだけで痛みへの耐性が上がることが判明。
https://gigazine.net/news/20200609-f-word-increase-pain-threshold/
… ラガーマンや柔道家のように「うらぁ」と声を張ることで十分耐性が上がるのだが。

◇ AmazonがGoogleに移籍した元従業員を提訴、18カ月にわたる職務差止めを求める。
https://gigazine.net/news/20200609-amazon-sues-brian-hall-google/
… 18カ月間の汚染期間は、カリフォルニア州では禁止されている。

◇ イメージナビ、AIが自動生成した架空の人物モデル画像を販売。
https://japan.cnet.com/article/35154973/
… 広告に漫画は浸透していたが、CGは浸透していなかった。

sage_p at 22:14|PermalinkComments(0) 注目ニュースリンク 

2020年05月25日

したくない作業でもするようになる 5分スイッチ テクニック (1)

タスクの生産効率を上げるために、タスクを25分実行したら 5分休むという「ポモドーロ テクニック」があります。 ただ、本家によるともう少しルールがあるようです。

1. 達成しようとするタスク(作業)を選ぶ(いくつポモドーロが必要かを計画する)
2. キッチンタイマーで25分を設定する
3. タイマーが鳴るまでタスクに集中する
4. 少し休憩する(5分程度)
5. ステップ2〜4を4回繰り返したら、少し長めに休憩する(15分〜30分)
6. もし、ポモドーロの途中で急用が入りタスクが中断された場合は、そのポモドーロは終了とみなし、
はじめから新しいポモドーロを開始する

私も試してみたのですが、あまり効果を実感できませんでした。 休憩することで健康的で気持ちよく作業ができるのかと思いましたが、あまり変わりませんでした。

ところで私には別の悩みがありました。 身の回りの片づけや家事、排水口の掃除、銀行の手続きや、不要な会員の整理、資格のための勉強など、しなくてはいけないと思いつつ、しなくても生活ができてしまうタスクが、ToDo リストからなかなか無くならないことです。

これらのタスクにポモドーロテクニックを使うと、片づけに25分かけることになります。 これは苦痛です。 長すぎます。 また、銀行の手続きなら10分で済みます。 ポモドーロテクニックを使っても使わなくても変わりません。

そこで、毎日23:00にアラームをならし、15分間を片づけをする時間に決めました。 片づけする習慣が身に付けば負担も軽くなるだろうと思ったからです。 しかし、身に付きませんでした。 次に、3分間に減らせばやる気も出るだろうと思いましたが、これも身に付きませんでした。 15分が3分に変わる程度の作業量の違いを想像しても、やる気につながらないのだと思います。 そして、作業を始めることというのは、それだけエネルギーがいることなのだと思います。 強烈な必要性があればいいのですが、しなくても生活ができてしまうタスクにはそれがありません。

勉強を始めようと思っているのに部屋の片づけが捗ってしまったという話をよく聞くと思います。 にもかかわらず、普段から片づけをしようとは思いません。 なぜなのか考えてみました。 おそらく、勉強より片づけのほうが楽で、片づけより何もしないほうが楽だと思います。 つまり、作業量の絶対的な大小ではなく比較して楽な方を選ぶのでしょう。

最近のゲームは、パズルの色を合わせたり、たぬきち(あつ森のキャラクター)に頼まれて土地を探したり、料理を作ったり、リフォームをしたりといった、作業をするゲームが多くあります。 なぜゲームなら作業しようとする気になるのか。 それが分かれば、いやな作業もするようになるのではないでしょうか。

終わったらご褒美を貰えるようにしたり、作業が終わったときの達成感を想像したりすることもよく行われるテクニックです。 ゲームでは自動的にご褒美が用意されますね。 しかしゲーム以外では、ご褒美を自分で用意しなければなりません。 ご褒美を自分で用意することは意外と面倒です。

ポモドーロテクニックが時間を区切っていることに注目して、ゲームの制限時間についても
考えてみました。 ほとんどのゲームの制限時間は、約5分です。 10分もありません。
10分もあるとだらけてしまうのでしょう。 つまり、5分という時間の長さが、ゲームする
モチベーションにつながる要因ではないかと考えました。

制限時間を過ぎたときのペナルティを考えてみましょう。 ペナルティは、ステージの最初やチェックポイントまで戻されることがほとんどです。 突然の死によって戻されることもあるでしょう。 ペナルティを受けることは残念に思うことですし、戻されて同じことを繰り返すことは非効率なのですが、モチベーション的にはもう1回やるぞという思いが残ります。 私はできる、負けたくないというプライドが許さないのかもしれません。 つまり、制限時間や突然の中断(割込み)を受けても、5分でクリアできるタスクをもう1回する程度のことであれば、やる気が無くなることはないということです。

テレビ番組では、続きが気になるように話を盛り上げてから CM に入ります。 ご存知の通りCMを見せるための仕掛けです。 少しイラっとするけどチャンネルを変えることなく CMを流し続け、続きを見ようとします。 チャンネルを変えることがあっても、CMが終わりそうなタイミングでチャンネルを戻すでしょう。 バラエティではある話の途中で他の話を挟み、マルチスレッドのようにまた元の話の続きを流すことがあります。 放送側としては、おそらくどれでもいいのでスレッドに引っかかってほしいのでしょう。 引っかかれば番組を見続けます。 これから分かることは、別のことが割り込まれても、続きがあるのであれば、その割込みが終わってから再開することにあまり負担がないということです。 もちろん、頻繁に割り込まれたら続きをしなくなるでしょうが。

これらの心理を踏まえて開発したのが、「5分スイッチ テクニック」です。

・繰り返しができる 5分タイマーを使う(腕時計型がよい)
・2つのタスクを交互に行う
・時間になったら続きをメモに書く

次回、その詳細を説明します。

ソース
https://www.lifehacker.jp/2014/07/140714pomodoro.html
https://francescocirillo.com/pages/pomodoro-technique

sage_p at 00:28|PermalinkComments(0) プログラミング 

注目ニュースリンク 5/25

◇ 新型コロナウイルスの影響でエンジニア需要に大きな変化、求められる職種・スキルとは?
https://gigazine.net/news/20200507-tech-jobs-covid-19/
… アメリカでは、セキュリティとインフラの需要が伸びている。

◇ テレワークで一般社員の4割強がチームの生産性が低下。Uniposが調査。
https://japan.cnet.com/article/35153314/
… 職種による差か個人による差か。

◇ 75%以上の人が新型コロナウイルス終息後も自宅勤務を続けたいと考えている実態が調査結果で判明。
https://gigazine.net/news/20200507-remote-work-after-coronavirus-pandemic/
https://japan.cnet.com/article/35153696/
… アメリカでは生産性も良好な人が多いのは仕事の分担がリモートに適しているのかも。

◇ 4月の自殺者数、前年比約20%減。
http://news.tbs.co.jp/newseye/tbs_newseye3977832.html
… 職場と学校には20%も自殺に追い込む何かがあるというツイッターの投稿も。

◇ オンライン会議でストレスがたまる5つの原因。
https://gigazine.net/news/20200507-online-meeting-exhaust-5-reasons/
… まだ始まったばかり。逆に相手の負の感情が伝わらないことはメリット。他の原因は解決可能。

◇ Amazonの重鎮が辞職、新型コロナウイルス対策改善を求めて抗議した従業員の解雇の失望が理由。
https://gigazine.net/news/20200507-amazon-vp-resigns-protesting/
https://japan.cnet.com/article/35153328/
… どおりでAWSの顧客に対する思想から感じる心地よさがあったわけだが、これからどうなるか。

◇ デジタル広告のサプライチェーンは、よく言って不透明、悪く言って詐欺。
https://gigazine.net/news/20200508-programmaticad-supply-chain-brands/
… 競争が行われていないのではないか。

◇ スマホの位置情報の売買、匿名化されたものからでも簡単に個人を特定することが可能。
https://gigazine.net/news/20200511-mobile-location-information-tracking/
… GPSの位置情報から住所や職場を絞り込めば、ほぼ特定可能。性善説に頼っている状態。

◇ NECとメガバンクら5行、本人確認プラットフォーム提供へ。他サービスの認証を簡略化。
https://japan.cnet.com/article/35153484/
… 転売ヤー対策に使えないか。

◇ その業務、クラウド上でできるはず。テレワーク時代のハンコ文化とDXの今。
https://japan.cnet.com/article/35153577/
… 民間の第3者認証機関に対する法整備が重要か。

◇ Google Chrome 83安定版リリース、Microsoftの協力でフォームの見た目&操作性が大幅アップデート。
https://gigazine.net/news/20200520-google-chrome-83/
… マイクロソフトがChromiumと協力関係を築きにいっている。

◇ MicrosoftがBuild 2020でWSL2のGUIアプリ動作やパッケージマネージャーwingetなどを発表。
https://gigazine.net/news/20200520-microsoft-build-2020-wsl/
… マイクロソフトがLinuxと協力関係を築きにいっている。

◇ グーグル、タッチ操作に反応するイヤホンコードを開発、E-textile。編み込みケーブル。
https://japan.cnet.com/article/35154171/
… ひねりを検出できるので活用範囲がかなり広そう。

sage_p at 00:28|PermalinkComments(0) 注目ニュースリンク 

2020年05月04日

Apple と Google が新型コロナウイルス感染者を追跡するシステムを発表

2020年 4月11日、Apple と Google は、新型コロナウイルス感染者を追跡するためのシステムの基本部分を OS に組み込むことを発表した。 4月28日には、オーストラリアでその機能を使った感染追跡アプリ「COVIDSafe」が公開され、今のところ受け入れられているようだ。

感染症の対策の1つは、発症した人を隔離して感染爆発を防ぐことである。 そのためには発症した人の過去の濃厚接触者を聞き出して感染経路を追跡していく必要があるのだが、現状では思い出して推測するという曖昧な方法になっている。

それでは感染症の封じ込めが確実ではなくなるので、スマホを活用する方法を Apple と Google は提案して実装した。 それは、スマホにある Bluetooth を使って「別のユーザーが1.5メートル以内に15分以上滞在した」と判断したときに、濃厚接触ありとして「日付・時刻・距離・接触時間・接触相手の匿名ID」を暗号化してクラウドに記録していくシステムだ。 その記録があれば、もし、発症したときに、過去の濃厚接触者をリストアップできるようになる。

記録には位置情報は記録されない。また、Apple と Google が提供するのは、濃厚接触の記録をすることと、特定の組織だけがクラウドにある濃厚接触の記録や個人情報(名前・携帯電話番号・郵便番号)を参照できるようにする API を提供するところまでだ。 記録を分析して感染経路を特定するのは、たとえば保健当局である。

課題はプライバシーだ。 特に濃厚接触者を特定するIDに関しては、ワンタイム パスワードのような一時的なIDで記録される。 ID は「マスターキー」、「1日ごとに生成される追跡キー」、「近接ID」があり、15分毎に変更することでプライバシーを保護しているらしい。 また、濃厚接触の記録も21日間で削除されるらしい。 また、Bluetooth を常にオンにする必要があるため、バッテリーの消費が早くなる。 おそらく1.5倍近く早く消費するだろう。 ユーザーには、もちろんオプトインしない(使わない)という選択もある。

ラドバウド大学のセキュリティ研究者であるJaap-Henk Hoepman氏は、このシステムの脆弱性を指摘している。 1つは、データ自体は暗号化されて分散されたデータであっても、特定の組織が感染者リストを作ることは可能であり、それは実質分散されていないという指摘だ。 また、特定の組織が警察と連携して、警察が感染者という偽のデータを設定し、警察と犯人が近くにいたことを証明するという本来の使い方と異なる使い方をすることで、オプトインした条件ではない使用がされてしまうという指摘だ。 Apple と Google は、これらの指摘に対してい適当な理由を付けて無視するだろう。

また、このシステムは感染症の対策の1つにすぎない。感染症が終息するまでにはいくつかの課題がある。 ハーバード大学のEdmond J. Safra倫理センターが公開したロードマップでは、「検査」「追跡」「隔離のサポート」を確実に行い、都市封鎖の解除を職業別に徐々に増やしていくことで、次の感染爆発が起こらないようになると説明している。 非科学的な規制緩和をして経済状況を回復させ、感染が増えたら再び都市封鎖を行うという方法より良いと説明しているが、果たして確実にそうなるかは疑問だ。

感染症を終息させるには、治療法を確立すること、ワクチンもしくは集団免疫を獲得することが必要である。 もしそれができたとしても終息するまでには免疫を得た人とそうでない人との間で差別が生まれることを歴史が証明している。

ソース
https://gigazine.net/news/20200411-google-apple-coronavirus-tracing-system/
https://gigazine.net/news/20200413-apple-google-coronavirus-tracker/
https://gigazine.net/news/20200413-stop-apple-google-tracing-platform/
https://gigazine.net/news/20200428-covidsafe-app/
https://gigazine.net/news/20200415-coronavirus-wave-infections/
https://gigazine.net/news/20200420-coronavirus-immunity-privilege-yellow-fever/
https://gigazine.net/news/20200427-covid-19-roadmap-pandemic-resilience/

sage_p at 00:38|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 5/ 4

◇ 10万円給付のオンライン申請に必要な条件やデバイスは?
https://japan.cnet.com/article/35153029/
https://kyufukin.soumu.go.jp/
… マイナンバーカードを持っている人だけオンラインで申請可能。持っていない人は郵送待ち。

◇ Nintendo Switchの買い占めに転売屋はボットを使っている。
https://gigazine.net/news/20200423-checkout-bots-nintendo-switch-shortage/
… 株の自動売買ツールと同じ感覚のようだ。

◇ あつまれ どうぶつの森のマイデザインでアシュモレアン博物館の収蔵品を再現可能に。
https://gigazine.net/news/20200421-animal-crossing-ashmolean-museum/
… ここ以外の美術館も公開中。

◇ Zoom のセキュリティを懸念。米上院や独政府も使用制限との報道。
https://japan.cnet.com/article/35152254/
https://gigazine.net/news/20200417-google-add-gallery-view-meet/
https://japan.cnet.com/article/35152251/
… セキュリティに問題があるが根強い人気のある Zoom と流行に乗ろうとする Google と Microsoft。

◇ アマゾン、出品業者のデータを利用して自社商品を開発か。調査開始。
https://japan.cnet.com/article/35152911/
… 売上総額などの外から分からないデータを盗み見て、それより少し良くした自社ブランド製品を開発。

◇ Amazonの国外版を悪質な偽造品市場とアメリカ政府組織が認定。
https://gigazine.net/news/20200430-amazon-on-notorious-market-list/
… 客観的に指摘された問題点を無視するベゾス。

◇ Uber Eatsに投げ銭機能。飲食店に1注文100円の支援が可能に。
https://japan.cnet.com/article/35152561/
… Uber Eats に手数料が発生しないのは YouTube も見習ってほしい。

◇ Instagramの埋め込みは著作権侵害に当たらないという判決が下る。
https://gigazine.net/news/20200416-copyright-suit-over-instagram-embedding/
… SNSに投稿した写真は、誰でも同じSNS内で使えるという誰もがそう解釈していた通りの判決。

◇ 画像から簡単に精巧な3D写真が作成できる論文が公開される、実際に3D写真を生成することも可能。
https://gigazine.net/news/20200417-3d-photography-layered-depth-inpainting/
… おそらく元画像のうち隠れている部分は AI が生成している。

◇ 在宅勤務が可能な仕事は全体のうち34%に過ぎないとの調査結果。
https://gigazine.net/news/20200425-jobs-be-done-at-home/
… 安全な場所で仕事ができ、しかも賃金が高い。

sage_p at 00:38|PermalinkComments(0) 注目ニュースリンク 

2020年04月12日

手続き型プログラミング言語で宣言型プログラミングをする(2)

宣言型プログラミングを、手続き型のプログラミング言語で行ったとき、プロパティやメソッドにデータ定義を書くことで書く順序を自由にすることと、一度だけ呼び出す関数にすることで副作用を無くすことと循環参照を警告することが必要になることを紹介しました。 今回は、もう1つの問題の対策方法を紹介します。 言語は TypeScript で説明します。

  class DataClass {

   A = CallOnceFunction<any>(() => {
   return {
    Name: "A",
    B: this.B(),
   };
  })

  B = CallOnceFunction<any>(() => {
   return {
    Name: "B",
   };
  })

  C = CallOnceFunction<any>(() => {
   return {
    Name: "C",
    B: this.B(),
   };
  })
 }


上記のように(一度だけ呼び出す)メソッドを使ってデータ定義を書いたとします。 この場合、データは存在していません。 なぜなら、メソッドしか定義していないからです。 上記のコードを実行しても A は呼ばれないので、A の中で生成するデータ(オブジェクト)は存在しません。

宣言型プログラミング言語では、書いただけデータが存在します。 条件分岐やコメントなどによって存在しないデータが書かれていることはありますが、デフォルトとしては存在します。

一方で、手続き型プログラミング言語のメソッドでデータを定義した場合、デフォルトではデータが存在せず、存在させるには、データを生成する必要と、一覧(リスト)に登録する必要があります。

ちなみに、手続き型プログラミング言語でもメソッドではなく、グローバルなオブジェクトの中のデータで定義すれば存在します。 JSON のようなコードです。 その場合は以後の対策をする必要はありませんが、他のメソッドの返り値を参照すること(例:上記のthis.B())はできません。

すべてのデータの生成をする原始的な方法は、以下のようなコードになるでしょう。

 const data = new DataClass();
 data.A = data.A();
 data.B = data.B();
 data.C = data.C();


しかし、このコードは例外が発生します。 なぜなら、C() を呼び出したときは、B がメソッドではなくデータになっているので B() は関数ではないという例外が発生するからです。

 data.C = data.C(); // 例外: B() は関数ではない


その問題を回避するには、すべてのメソッドを呼び出してからデータを格納することです。

 const data = new DataClass();
 data.A();
 data.B();
 data.C();
 data.A = data.A();
 data.B = data.B();
 data.C = data.C();


もう1つ問題があります。 それは、メソッドが増えたときに、メソッドを呼び出すコード(コール)も増やす必要があることです。 たとえば、DataClass の中に D() メソッドを追加した場合、data.D(); と data.D = data.D(); を追加する必要があります。 これは地味ながら大問題です。

1つメソッドが増えたときに1つコールを増やすことは簡単です。 だから大した問題ではないと評価するのは大間違いです。 多くの人がコードを編集しているプロジェクトや、古いプロジェクトを編集しているときに、メソッドが増えたときにコールも増やさなければならないというルールを知らなかったり忘れたりした人は、メソッドだけ増やしてコールを増やさないで完了としてしまう可能性が高いのです。

つまり、2か所以上の整合を取る(同期をとる)必要があるコードというのは、不具合を簡単に生み出してしまう危険なコードなのです。

ただし、あるルールを採用すれば、同期をとるコードがあっても対応することができますが、それはまた別の機会に話すこととします。

コードの同期をとる必要がなく、すべてのデータを生成するには、Object.keys を使います。

 const data = new DataClass();
 for (const key of Object.keys( data ) as Array<keyof typeof data> ) {
  data[key](); // Calls all methods
 }
 for (const key of Object.keys( data ) as Array<keyof typeof data> ) {
  data[key] = data[key](); // Change to data properties
 }


データの内容は、以下のコードで表示できます。

 console.log(data); // または
 console.log(JSON.stringify( data, null, '\t' )); // データを一覧で表示


以上のコードは 2020年4月現在の Visual Studio Code で動作確認しています。 JSFiddle/TypeScript では => を function() {}.bind(this) に修正することと、as Array<keyof typeof data> をコメントアウトする修正することが必要になります。

なお、これまでに説明した方法は、コードがデータのマスターになっているときの方法です。 もし、JSON などの宣言型プログラミング言語で定義するとき(手続き型プログラミング言語でデータのマスターを定義しないとき)は、これまでに説明した方法ではなく、JSON.stringfy に関連する toJSON メソッドで親子以外のオブジェクトの参照を削除し、JSON.parse した後でオブジェクトの参照を復帰させる方法になります。

sage_p at 23:35|PermalinkComments(0) プログラミング 

注目ニュースリンク 4/13

◇ 東京都、テレワーク導入を検討している中小企業にノートPCなどを1カ月無償貸与。
https://japan.cnet.com/article/35151730/
https://japan.cnet.com/article/35151933/
https://japan.cnet.com/article/35152146/
… PCや書斎を持っていない世帯は多いからリモートワークの導入もためらいがち。

◇ AppleとGoogleが新型コロナウイルス追跡システムをiOSとAndroidに組み込む。
https://gigazine.net/news/20200411-google-apple-coronavirus-tracing-system/
… 活動経路を追跡する技術。 プライバシーに配慮されていることも大事だが、虚偽申告への対策が最も難しそう。

◇ ビル・ゲイツが新型コロナについてアメリカでは夏を待たず改善と回答、ワクチンの完成時期についても言及。
https://gigazine.net/news/20200410-bill-gates-talks-covid-19/
https://gigazine.net/news/20200407-next-outbreak-bill-gates/
… アメリカは6月頃に一度ある程度普段通りに戻るらしい。ワクチンの流通は18カ月後らしい。

◇ あつまれ どうぶつの森が香港デモの参加者が感染を気にせず集まることができる新たな場に。
https://gigazine.net/news/20200410-animal-crossing-hong-kong-demo/
… 集会は善にも悪にもなるが、これだけネットが普及すると集会を禁止することはできなくなっていく。

◇ プロセッサの例外処理を用いてマイコンの保護領域を読み出す手順が公開中、ソースコードもあり。
https://gigazine.net/news/20200329-break-stm32f1-read-out-protection/
… STM32F1/ARMv7-Mマイコンの保護機能の脆弱性。90%も漏えい。

◇ AppleのSafariがサードパーティーCookieを完全にブロック、一般的なブラウザでは初。
https://gigazine.net/news/20200325-apple-safari-block-third-party-cookie/
https://gigazine.net/news/20170606-intelligent-tracking-prevention/
… 単純にクロスサイトをブロックしたらWebが使いにくくなるが、アップル独自の統計情報から判断。

◇ めちゃくちゃ精度が高いと話題の機械翻訳DeepL翻訳に日本語の翻訳機能が登場したので実際に使ってみた。
https://gigazine.net/news/20200323-deepl-translator-japanese/
… 商業的にも成功してほしい。

◇ マイクロソフト、Edge の Stable チャネルへのアップデートを一時停止。
https://japan.cnet.com/article/35151258/
https://japan.cnet.com/article/35151328/
… ユーザーにアップデートの作業よりコロナウイルス対策を。開発は続けると思われる。

◇ Slack、Microsoft Teams Calls アプリのベータ版をリリース。
https://japan.cnet.com/article/35151767/
… 連携を深めてメニューを選べることで存在感が増す。

◇ 新型コロナの研究にスパコン16台を開放。米国の産学官が連携。
https://japan.cnet.com/article/35151244/
… クラウドでは科学技術計算に適していない。

◇ ソニー、新型コロナの影響--中国工場は順次再開、エンタメ分野に波紋。
https://japan.cnet.com/article/35151491/
… エンタメの影響とスマホの部品への影響。

◇ アドビ、電子署名ツール Adobe Sign の無料期間を90日に延長。テレワーク支援で。
https://japan.cnet.com/article/35152217/
… 今の時期は、アウトソーシングなどの勉強期間とも。

sage_p at 23:35|PermalinkComments(0) 注目ニュースリンク 

2020年03月22日

新型コロナウィルスの影響でリモートワークの仮導入が進む

2020年3月、新型コロナウィルス COVID-19 の感染拡大を防ぐため、多くの企業が自宅で事務作業を行うリモートワークを一時的に導入し始めた。 休校が実施されたことなどにより家事の負担が増えているが、それを踏まえて仕事をする環境を整えた上で、リモートワークをどのようにすれば上手くできるかについてのノウハウを各社が公開した。

まずは、以前から全社員がリモートワークを行っている GitHub のガイドラインから。 リモートワークのメリット・デメリット・管理方法・個人の注意点・コミュニケーション方法を網羅的に紹介している。 一度に理解するのは難しいと思われるが徐々に導入していくといいだろう。詳細は下記のリンク先を参照。

次に、22年にわたってリモートワークを実践してきた Ars Technica 社がアドバイスを公開した。 働く場所を用意すること、Slackで雑談するなど非公式のコミュニケーションを増やすこと、結束を深めること、運動することが紹介されている。

次に、マイクロソフトの中国の従業員がまとめた資料を公開している。 今回のウィルス騒動で学んだことなので、多くの同じ状況の人にあてはまるだろう。 健康維持・予定はすべて実行・チームメンバーをサポート・コミュニケーションの手段を迅速に設けることなどが紹介されている。ウィルス騒動が終わってから、次に出社したとき、のように作業を後回しにしなくても、オンラインでできてしまうことが多い点は注目に値する。

メンタルヘルスを維持するためには SNS から離れることがよく言われているが、コミュニケーション不足でメンタルを壊す人も多い。しかし、Discord はオンラインゲームを楽しむためのコミュニケーション ツールとしてよく使われている。 道具のせいにしてはいけない。使う人次第だ。

ソース
https://gigazine.net/news/20200313-gitlab-remote-guide/
https://gigazine.net/news/20200317-ars-technica-working-home-advice/
https://news.microsoft.com/ja-jp/2020/03/03/200303-working-remotely-during-challenging-times/

sage_p at 21:31|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 3/23

◇ Microsoftがパッケージ管理システム npm を買収、GitHubとの統合にかけるnpm創設者の思いとは?
https://gigazine.net/news/20200317-microsoft-acquire-npm/
https://japan.cnet.com/article/35150905/
… Microsoftブランド向上のために、GitHubと供にオープン性は維持されそう。

◇ ドコモ、5G を3月25日に開始。データ無制限、半年間は月額4480円から。
https://japan.cnet.com/article/35151008/
https://japan.cnet.com/article/35150325/
… 5Gに関わるプラットフォームとしてのクラウドも整備。

◇ PlayStation 5とXbox Series XとNintendo Switchのスペックを比較してみるとこんな感じ。
https://gigazine.net/news/20200319-playstation-5-xbox-series-x-nintendo-switch/
… GPU性能はXboxがやや上、SSDストレージのリード性能はPS5が倍速い。

◇ もはや iPhoneのOSはアドウェアと化してしまったのではないか?との意見がネットで激論に。
https://gigazine.net/news/20200308-ios-adware/
… アップルのアプリを使おうとすると、アップルのサービスへの入会を勧められる。

◇ Appleがデュアルカメラ搭載でAR機能も強化した新型iPad Proを発表、トラックパッド付き新型Magic Keyboardも。
https://gigazine.net/news/20200319-ipad-pro-ipados-13-4/
… iPad を Mac Book に寄せてきた。

◇ Googleが量子データに対応した機械学習ライブラリ TensorFlow Quantum を公開。
https://gigazine.net/news/20200310-google-tensorflow-quantum/
… 量子コンピューターのフレームワーク Cirq を、機械学習の TensorFlow に統合。

◇ Intel製CPUに新たな脆弱性 LVI が判明、個人情報や企業の機密情報が流出する可能性も。
https://gigazine.net/news/20200311-lvi-vulnerability/
… 投機的実行やアウトオブオーダー実行に関する新しい脆弱性で、任意のコードが実行される可能性。

◇ Amazonの独自ARMプロセッサ Gravition 2 を採用したAWSインスタンス M6g のスペック比較表が公開される。
https://gigazine.net/news/20200313-ams-m6g-instance/
… クロック数は x86 とほぼ同じ。メモリ帯域が最も高い。

◇ 仕事中にどのような音楽を聞くとパフォーマンスが向上するのか?。
https://gigazine.net/news/20200311-listen-music-when-work/
… あまり頭を使わない作業はノリのいい曲がよく、かなり頭を使う作業は集中出来たら音楽がないほうがいい。

◇ 電通、2019年 日本の広告費を発表。ネット広告費がテレビを抜き2兆円突破。
https://japan.cnet.com/article/35150646/
… テレビ広告が減ったというよりネットに広告を出す会社が増えた感じ。

sage_p at 21:30|PermalinkComments(0) 注目ニュースリンク 

2020年03月01日

手続き型プログラミング言語で宣言型プログラミングをする

宣言型プログラミングを、手続き型のプログラミング言語で行ったとき、書く順番に影響してしまうという問題の解決方法として、プロパティやメソッドにデータ定義を書く方法を前回(通巻803号)に紹介しました。 今回は、他にも発生する問題について紹介しその対策方法も紹介します。

前回のおさらいを軽くします。 言語は TypeScript です。

  var taro = { name: "Taro", age: 21 }
  var jiro = { name: "Jiro", age: 20 }
  var family = [ taro, jiro ]


プロパティやメソッドにデータ定義しないとこのようになるのですが、これでは taro の定義を family の定義の下に書くことはできません。

  class DataClass {
    Family() { return [ this.Taro(), this.Jiro() ] }
    Taro() { return { name: "Taro", age: 21 } }
    Jiro() { return { name: "Jiro", age: 20 } }
  }


このようにプロパティやメソッドにデータ定義を書くことで、書く順番が自由になりました。

しかし、処理を実行するプロパティやメソッド(以後、関数と呼ぶ)は、副作用がある可能性がります。 関数の副作用とは、状態 (値) が変化してしまうことです。 副作用が必要な場合もありますので一概に関数の副作用が悪いわけではないですが、データ定義において副作用は有害です。 なぜなら、関数を呼び出すタイミングによってデータの内容が変わってしまうからです。 たとえば、StartTime というデータを処理を行っている現在の日時と定義したとしましょう。

  StartTime() { return new Date(); }


この StartTime は参照する(呼び出す)だびに値が変わります(精度は1ミリ秒)。 もし、StartTime から現在の日時までの経過時間 Elapsed を定義すると、

  Elapsed() { return (new Date()).getTime() - this.StartTime().getTime(); }


となりますが、これでは期待通りの値が返りません。 なぜなら、new Date が連続して2回呼ばれるために、長い時間の処理が行われても 0〜1ミリ秒しか返さないからです。

他にも副作用がある関数の例を挙げます。 オブジェクトの生成です。

  MyObject() { return new MyClass(); }


これでは、if ( MyObject() == MyObject() ) が常に false になってしまいます。

このような副作用の問題を解決するには、関数で行われる処理を一度だけ実行し、その返り値を2回目以降の呼び出しでも返すようにすることです。 一度だけ呼び出す関数とも呼ばれます。 一度だけ呼び出す関数は、次のように定義します。

  StartTime = CallOnceFunction<Date>(() => {
    return new Date();
  });


CallOnceFunction の定義は、クロージャーを使う場合は、次のようになります。

  function CallOnceFunction<ReturnType>( calleeFunction: () => ReturnType ) {
    let called = false;
    let result: ReturnType = {} as ReturnType;
    return function() {
      if ( ! called ) {
        result = calleeFunction();
        called = true;
      }
      return result;
    }; 
  };


ただし、この定義では問題があります。 それは、循環参照すると無限ループしてしまうことです。 循環参照とは、たとえば、A の定義に B の入力があり、B の定義に A の入力があることです。 にわとりが先かたまごが先かという状態です。

  A() { return B() + 1; }
  B() { return A() - 1; }


または、

  class MyClass {
    ID: number = 0;
  }

  A = CallOnceFunction<MyClass>(() => {
    let object = new MyClass();
    object.ID = this.B().ID + 1; // 循環参照
    return object;
  });

  B = CallOnceFunction<MyClass>(() => {
    let object = new MyClass();
    object.ID = this.A().ID - 1; // 循環参照
    return object;
  });


循環参照の原因は、設計ミスの場合と、定義と異なる設計によって回避が必要な場合がありますが、どちらにしてもデータの定義ができない状態です。 最終的には定義できる状態に修正して動かすわけですが、循環参照という問題があることをユーザーが知ることができるようにしなければ、修正が遅れてしまいます。 Maximum call stack size exceeded エラーになりますが循環参照エラーになっているとは熟練者しか気づかないでしょう。 次のように定義すれば、循環参照の問題があることをユーザーがすぐに知ることができます。

function CallOnceFunction<ReturnType>( calleeFunction: () => ReturnType ) {
  let called = false;
  let calling = false;
  let result: ReturnType = {} as ReturnType;
  return function() {
    if ( ! called ) {
      if ( calling ) {
        throw new Error( "circular reference" );
      }
      calling = true;
      result = calleeFunction();
      calling = false;
      called = true;
    }
    return result;
  }; 
};


循環参照のコードの書き方によっては、次のコンパイルエラーになることがあります。

  '__Symbol__' implicitly has type 'any' because it does not have a type annotation and
  is referenced directly or indirectly in its own initializer.ts(7022)


もう1つ問題がありますが、それは次回説明します。

sage_p at 23:33|PermalinkComments(0) プログラミング 

注目ニュースリンク 3/ 2

◇ macOSを標的にしたマルウェアの検出数がWindowsを標的にしたマルウェア検出数を初めて上回る。
https://gigazine.net/news/20200213-malware-threats-macs-outpace-windows/
… なんとついに mac のほうがマルウェアが多くなってしまった。

◇ 楽天の送料無料化、3月18日開始に変更なし。公取委緊急停止命令受けてもなお。
https://japan.cnet.com/article/35150051/
https://japan.cnet.com/article/35150037/
… これはアマゾンよりひどい。

◇ Windows 10のライブタイル機能が廃止へ。
https://gigazine.net/news/20200226-windows-10-live-tile/
… すべてのプログラムとライブタイルの2つの系列を1つに。

◇ ストレスを減らして燃え尽き症候群を防ぐために心理学者が示す5つのヒント。
https://gigazine.net/news/20200210-reduce-stress-at-work/
… 燃え尽き症候群の直し方。いくつかあるうち、まずは寝たほうがいいと思う。

◇ 交渉はかえって裏目に回るとの指摘、それではやむをえず交渉をする場合は一体どうすればいいのか。
https://gigazine.net/news/20200211-better-negotiation-hard-soft-approach/
… 交渉して勝つより交渉しないで負けた気になっても後々良いこともある。

◇ 週休2日制はどのようにして始まって広まったのか?
https://gigazine.net/news/20200211-history-two-day-weekend/
… いろいろあるが欠勤が減ったことが大きいかったようだ。

◇ 週4日労働制の導入はどのように世界中の企業で実施されているのか?
https://gigazine.net/news/20200226-four-day-workweek-global/
… 週4日制になると子育てにおける男女平等が実現できそう。

◇ ゲーム雑誌、電撃PlayStation が定期刊行を停止へ。25年続いたプレステ専門誌。
https://japan.cnet.com/article/35149906/
… 雑誌形態のみ停止。

◇ 全てのメロディの著作権を取得するという試みがなぜ未来の音楽を守ることになるのか?
https://gigazine.net/news/20200212-copyrighted-melody/
… 総当たり攻撃のように全てのメロディの権利を取ってしまう。でもこれはただの変換。

◇ 顔をプリントしたマスク、着けたまま顔認識でロック解除も。デザイナー考案。
https://japan.cnet.com/article/35149601/
… スマホぐらいのセキュリティ対象ならこれで成功してもいいのでは。

◇ 消滅したウェブサイトをインターネットアーカイブから直接表示できる機能がウェブブラウザBraveに搭載される。
https://gigazine.net/news/20200226-brave-show-404-web-page/
… 消されたページも自動的にアーカイブされたサーバーから閲覧できる。

◇ AmazonやFacebookが新型コロナウイルス感染症の予防や完治をうたう商品や広告を削除へ。
https://gigazine.net/news/20200227-amazon-facebook-reject-coronavirus-cure/
… これは正しい対応。

◇ アマゾンのベゾスCEO、気候変動対策に1兆円超の基金 Bezos Earth Fund 設立。
https://japan.cnet.com/article/35149534/
https://japan.cnet.com/article/35149649/
… 地球温暖化阻止に本気になるかどうか。税金対策なのでは。

◇ 無料の衛星データプラットフォーム Tellus がVer2.0に。アプリが買えるストア機能も。
https://japan.cnet.com/article/35149978/
… グーグルマップだけじゃない。

◇ ついにFirefoxがDNSとの通信を暗号化する DNS over HTTPS をデフォルトで有効にすると発表。
https://gigazine.net/news/20200226-firefox-dns-over-https-default-us/
… グーグルには筒抜け。

sage_p at 23:25|PermalinkComments(0) 注目ニュースリンク 

2020年02月09日

飲食店や病院などの予約システムをクラウドで簡単に作れる SELECTTYPE

2020年1月22日、Gigazine に、飲食店や病院などの予約システムをクラウドで簡単に作れる SELECTTYPE を紹介する記事が掲載された。

病院に行くときは通常予約をしてから行くだろう。 何時から受診するかを病院に電話で連絡して予約をとることだが、ある程度予約がいっぱいだったときは、いつが空いているなどやり取りが発生してしまい、予約受付業務だけである程度の時間がとられてしまう。

病院のホームページに行って、カレンダー形式で予約状況を表示されれば、いつ予約が取れるかが一目瞭然で分かりやすいし、予約もホームページ上でするので、予約受付業務に時間を取られることがほとんどなくなるというメリットがある。

このようなカレンダー形式の予約システムが、SELECTTYPE というサイトで簡単に作れる。 広告ありの簡単な予約システムであれば無料で作れるが、使い込んでいくと必要になる機能については有料だ。

SELECTTYPE は豊富なテンプレートが用意されており、雰囲気の良い信頼される店や病院である印象を与えることができそうだ。

日時の情報の他に、ご利用人数やコースの種類などの情報も追加することも可能だ。

もちろん、予約者にメールを自動的に送ったり、店側にとって見やすい形で予約状況を一覧することもできる。

サービスがこういったクラウドの形に変わっていく流れは、これからも進んでいくだろう。

ソース
https://gigazine.net/news/20200122-select-type/

sage_p at 23:28|PermalinkComments(0) IT ニュース&コラム 

注目ニュースリンク 2/10

◇ グーグル Chrome、HTTPSページでの安全ではないダウンロードを段階的にブロックへ。
https://japan.cnet.com/article/35149093/
… ホームページは https なのにダウンロードだけ http のサイトをブロック。

◇ Boston Dynamicsのロボット犬 Spot のSDK一般公開。
https://japan.cnet.com/article/35148522/
… Python で本物の犬のような滑らかな動きをするロボットを制御できるがコミッターは一人。

◇ Amazonが手のひらをクレジットカードにする技術を開発中。
https://gigazine.net/news/20200121-amazon-hand-into-credit-card/
… 認証ではなく識別に使うにはクラウドのパワーが必要。

◇ ゲーマーの脳波から大量のロボットを動かす司令AIを開発するという試み。
https://gigazine.net/amp/20200207-gamer-brain-robot-ai
… 優秀なゲーマーの動きを AI に学習させる。

◇ Googleが検索結果と広告を一目で判別できないように仕様変更、各所から非難の声。
https://gigazine.net/news/20200124-google-search-results/
… だんだんグーグルに飼い慣らされている感じ。

◇ スタートアップのアイデアに見切りをつける判断基準とは?
https://gigazine.net/news/20200124-kill-startup-idea/
… 正確な判定になるだろうが、日本の検察のように希望が少なくなりそう。

◇ グーグルやアマゾンに価値観まで変えさせてはならない。
https://japan.cnet.com/article/35148531/
… Amazonでしか買えないような錯覚を見せられている。

◇ グーグルのピチャイCEO、AIには規制が必要と主張。疑問の余地はない。
https://japan.cnet.com/article/35148248/
… グーグルは規制との戦いに慣れていそう。

◇ Macユーザーの10人に1人が雑で時代遅れなマルウェアに攻撃され続けており被害は拡大していることが明らかに。
https://gigazine.net/news/20200124-macos-unsophisticated-malware-shlayer/
… マックユーザーは狙い目と宣伝しているようなニュース。

◇ アップル、iCloud 上のユーザーデータ暗号化計画を断念。FBIからの圧力で。
https://japan.cnet.com/article/35148291/
… 2要素認証で安全なバックドアが仕掛けられないか。

◇ 通信キャリアによる位置情報の販売は違法、米FCCが見解。
https://japan.cnet.com/article/35148825/
… 安易にプライバシーを商売に使わないでほしい。

sage_p at 23:28|PermalinkComments(0) 注目ニュースリンク 

2020年01月19日

コメントを書かずに概要を説明する方法 - リーダブル コード(61)

プログラムのソースコードにコメントを書かないのが最近の傾向としてあるようです。 たとえば、1行のコードをそのまま日本語訳したようなコメント(ライン コメント)。

// docx ファイルを保存する
docx.SaveAs( path_of_word_file )


これは明らかに不要ですね。 英語をそのまま日本語訳しただけですから。 英語が分からなければ翻訳サイトを見れば中学生でも分かります。 また、翻訳サイトがライバル会社ではないので漏えいしても問題ありません。

一方で理由をコメントに書くことは、ほとんどの人が必要と言っているようです。 コードを読むとき、関数のインターフェース仕様などを踏まえて推測しながら理解すると思いますが、仕様から推測できないコードが書いてあると、理解に時間がかかりますし、コード自体も疑わしくなるからでしょう。それで時間をかけたのに結局コードは変えなかったとしたら効率が悪いです。

しかし、すべてのコードに理由のコメントを書く必要はありません。 仕様などから推測できるコードであれば、理由のコメントを書く必要はありません。 普通の会話と同じで、すべての会話に理由を言っている訳ではありません。 いちいち理由を言うと、相手にはバカにされていると思われるでしょうし。

理由のコメントは、コードと同じ行の右、もしくは次の行でインデントして書きます。 コメントはコードの常に前の行に書くべきだというルールを言う人もいますが、主従関係を考えると先にコードがあって、後で理由を書くべきです。 メールで結論から書くのと同じ理由です。

file.DeleteForce() // 普通の Delete では削除できないことがあるため


file.DeleteForce()
    // 普通の Delete では削除できないことがあるため


逆に、関数全体やプロパティに対するコメントが必須になってきている傾向があるようです。 コストを低くかつ検索やリンクができて便利なドキュメントを提供するために、ソースコードのコメントからドキュメントに変換するツール、javadoc, NatrualDocs, doxgen などを使うことが普通になってきたからでしょう。

さて、ここからが本題です。関数定義の中の 2〜20行程度のコードの概要を説明するコメント(ブロック コメント)をコードの前の行に書くことが、よくあると思います。 数行のコードの概要を表現するためのコメントです。

(前のブロック)

// parameter で示したシート(エクセル ファイルのシート)を削除する
dot_position = parameter.indexOf( "." )
sheet_name = parameter.substring( 0, dot_position )
cell_position = parameter.substring( dot_position + 2 )
excel = GetExcelFile( excel_file_path )
excel.Sheets( sheet_name ).Delete()

xlsx.SaveAs( excel_file_path )


このようにコメントで概要を表現することはできたのですが、ブロックがいくつかある中で1行しかないブロックもあり、バランスが悪いですね。 そのブロックにもライン コメントを書けばバランスは良くなりますが、ライン コメントは否定されつつあります。 概要を書くことをルールにすればうまくいくわけではないのです。

そこで、概要のコメントを書きたくないとき、コメントを書かなくても理解できるコードに変える(リファクタリングする)方法を紹介します。

上記のコードを改良したコードを示します。

(前のブロック)

excel = GetExcelFile( excel_file_path )
deleting_target = parameter
dot_position = deleting_target.indexOf( "." )
sheet_name = deleting_target.substring( 0, dot_position )
cell_position = parameter.substring( dot_position + 2 )

excel.Sheets( sheet_name ).Delete()

xlsx.SaveAs( excel_file_path )


このようにコードを変えるには、いくつかテクニックを使っています。 それは、
リーダブル コード(56) で説明した「空行はブロックの前ではなく読ませたい文の前に入れる」と、
リーダブル コード(58) で説明した「変数名 = ... のシンプルコメント」の応用、
第801号で説明した「Linuxによくある謎の記号による処理を説明変数で読みやすくする方法」です。

コードの移動

コードを変えるときに重要な指針は、概要に相当するコードを読ませることと、必要なら概要に相当するコードに変えることです。 まず、

excel = GetExcelFile( excel_file_path )


を先頭行に移動しました。 こうすることで、処理対象が excel_file_path 変数で示したエクセル ファイルであることをコードを読む人は最初に知ります。 ちなみに、元のコードでは、変数を定義するコードを参照するコードを近い位置にするという方針に従っていますが、それが最優先にしたところで読みやすくはなりません。 もし、移動するコードが概要のコードでなければ、その方針に従うのがよいですが、今回はそうではありません。

単純な代入文の追加

deleting_target = parameter


を追加し、parameter 変数を参照しているコードを deleting_target に変えました。 処理的には何の計算や呼び出しもしていない単なる代入なので不要に思うかもしれませんが、代入する変数名に概要を含めることができるのです。 こう書くことで、読む人は、削除対象が parameter であることを知ります。 ちなみに、このような単純な代入文は、変数を定義するコードと参照するコードを近い位置にすることにも使えます。

次に代入するコードが続きますが、ブロックの概要を理解した気になった人の多くは、次のブロックを読み始めるものなので、あまりブロックの中盤以降のコードにこだわる必要はありません。 また、概要を理解しなくても長いブロックになれば読みたくなくなるものです。 そういう場所に、概要に該当しないコードを書きます。

空行の追加

excel.Sheets( sheet_name ).Delete()


の前に空行を追加しました。このコードは概要のコメントに書いたそのものに対応するコードなので、読む人に読んでもらいたい。 だから空行を追加しました。

以上で、すべてのコードを読む前に、概要「parameter で示したシート(エクセル ファイルのシート)を削除する」を知ることができるコードになりました。 読む人にとっては、概要が書いていないのに不思議と理解できるコードという感覚になると思います。

システムの設計書がプログラムのソースコードになりつつあるので、今後は、コードを読みやすくする技術は、読みやすく文章を書く技術と並んで重要になっていくでしょう。 いや、すでに現場ではそうなっています。

参考
・コードコメントの書き方で書き手のレベルが分かる!コメントにはWhyを残せ!
https://www.ishikawa-nandemo.com/code-comment-why/
・良い?悪い?コードコメントの書き方
https://www.slideshare.net/ssagawa/ss-14579535
・リーダブルコード - より良いコードを書くためのシンプルで実践的なテクニック
8.1章 説明変数、8.2章 要約変数

sage_p at 21:56|PermalinkComments(0) プログラミング 

注目ニュースリンク 1/20

◇ Googleの元国際関係責任者が退職、Googleは邪悪になってしまったと退職の理由やGoogleの内情を暴露。
https://gigazine.net/news/20200107-why-ex-google-policy-chief-left/
… 社内チームがこっそり中国共産党に加担しているグーグル。

◇ Googleが天才的スパイアプリ疑惑のToTokをPlayストアに復活させる。
https://gigazine.net/news/20200107-google-back-play-store-totok/
… グーグルという会社がおかしい。

◇ 自ら電気を生み出す バッテリーレス IoT にぴったりなマイコンチップ ONiO.zero が登場。
https://gigazine.net/news/20200112-onio-zero/
… 携帯電話の電波をエネルギー源として発電してチップを動かす。

◇ まだ半数以上の企業がサポート終了したWindows 7を使い続けている。
https://gigazine.net/news/20200115-windows-7-not-dead-yet/
… 公共部門でより多く使われているらしい。

◇ トヨタが構築予定の自動運転・ロボット・AIが組み込まれた実験都市 Woven City の全貌とは?
https://gigazine.net/news/20200107-toyota-future-woven-city/
… 公道でできない自動車の実験ができる施設にAIの実験も。

◇ 画面キャプチャで数式をLaTeX形式に自動で変換してくれる Mathpix Snip を使ってみた。
https://gigazine.net/news/20200106-mathpix-snip/
… まだLaTeXを使っている人は便利かも。

◇ GoogleはChromeでユーザーエージェント文字列を段階的に廃止する方針。
https://gigazine.net/news/20200115-chrome-phase-out-user-agent-strings/
… ユーザーエージェントに変わる特定方法を見つけたのかもしれない。

◇ Microsoftの無料コマンドラインアプリ Windows Terminall がブラウン管ライクな見た目に変身可能に。
https://gigazine.net/news/20200111-microsoft-windows-terminal-retro-style-crt/
… タブ付きターミナル。

◇ Googleがスマートスピーカーに関する特許を侵害したとオーディオ企業がGoogleを提訴。
https://gigazine.net/news/20200108-sonos-sue-google/
… グーグルの最強弁護士は特許さえ無効化する論理を持っていそう。

◇ 人気YouTuberがApple Watchにより命の危機から救われる。
https://gigazine.net/news/20200115-apple-watch-save-youtuber/
… 科学的に判定しているので信頼できそう。

◇ Chromium版 Microsoft Edge が正式公開、実際に使ってみるとこんな感じ。
https://gigazine.net/news/20200116-chromium-microsoft-edge/
… YouTube の反応が遅い嫌がらせを受けていたが、早くなった。

sage_p at 21:55|PermalinkComments(0) 注目ニュースリンク 

2019年12月29日

書くスペースを半自動的に作ってメモをしやすくする SpaceInk

2019年10月、パリ=サクレ大学、INRIA、CNRS、Microsoft Research は、文書にメモ書きをするときに、メモを書くスペースを半自動的に作って、そこにメモを書くことができるシステム SpaceInk を発表した。

マイクロソフトはペンでメモを書くことに力を入れている。たとえば、オフィス製品はペンでメモを追加することができるし、Microdoft Edge ブラウザーはペンでメモを追加することができる。 あまり使われている機能ではなさそうではあるが、ペンに対するこだわりはマイクロソフトからかなり感じることができる。 イラストに関するペンはアップルがかなり力を入れているが。

紙で配られる資料にメモを書くときは、ページの上下左右にマージンの領域があるため、そこにある程度の量のメモを書くことができる。 しかし、電子的な文書、特にホームページではメモを書くスペースがほとんどない。ブラウザーを広げればマージンが現れるページもあるが、広げなければメモがあることを見失ってしまう。

SpaceInk は、メモを書くスペースを文書中に入れるシステムだ。 SpaceInk のモードにしておき、指でスワイプやピンチアウトの操作をすると、そこにスペースが作られ、そこにあった文字はスペースの外に追い出される。 ちょうど、広告スペースができるようなイメージだ。 スペースができたら、そこにメモを書くことができる。

メモを書いているうちにスペースが足らなくなったときは、もう一度スワイプやピンチアウトしなくてもよい。 書き続けていくだけで自動的にスペースが広がるのだ。 これは思考を妨げないとてもよい機能だ。
文書はほとんど電子化され、手書きすることはほとんどなくなったが、キーボードでメモを入力していくときでも SpaceInk の機能は便利だろう。スペースを作ることで、入力しやすくなるし、手書き風のフォントでメモが入力されれば、元の文書と見分けがつきやすいからだ。

デモの動画を見てみたがとても面白かった。 近いうちに MSオフィスで使えるようになるのではないだろうか。

ソース
https://www.itmedia.co.jp/news/articles/1912/26/news104.html
https://www.microsoft.com/en-us/research/publication/spaceink-making-space-for-in-context-annotations/

sage_p at 23:43|PermalinkComments(0) 注目ニュースリンク 

注目ニュースリンク 12/30

◇ 中国のハッカー集団、2要素認証をかいくぐり政府機関などを攻撃。研究者が発表。
https://japan.cnet.com/article/35147287/
… 2要素認証で守られたシステムに入った痕跡があった。侵入方法は推測でしか分かっていない。

◇ PCは10年前に死んだはずだったが、実際はこうなった。
https://japan.cnet.com/article/35146895/
… iOS 用では機能を厳選してしまったことと、MSがクラウド型のオフィスへの対応に成功したことが要因か。

◇ AWS、Azure、GCPの性能比較。2020 Cloud Report。
https://japan.techrepublic.com/article/35147351.htm
… 3社3様。aws 一強でもなくなってきた。

◇ 中国OPPO、2020年に5Gスマホを日本に投入へ。
https://japan.cnet.com/article/35147134/
… 5Gへの切り替えをチャンスと見て中国各社が参入へ。

◇ 政治的なハッシュタグがついたSNS投稿は人々からの関心を得られず信頼性を疑われやすいことが判明。
https://gigazine.net/news/20191228-political-hashtags-negative-reactions/
… 政治だけでなく MeToo のような思想や運動でさえ、偏った信頼性が低い情報を見られてしまう。

◇ 他者の感情を理解したり自分の感情をコントロールしたりする能力が高い生徒ほどいい成績を収める。
https://gigazine.net/news/20191225-emotionally-intelligent-students-better-grades/
… いい人間関係になる人が成績が良く、いい人間関係を築こうとすればよくなるわけではないと思う。

◇ 人気チャットアプリが実は政府の監視ツールだったことが判明、スパイツールとしては天才的と専門家。
https://gigazine.net/news/20191224-chat-app-totok-spy-tool/
… TikTok ではなく ToTok。

sage_p at 23:42|PermalinkComments(0) 注目ニュースリンク 

2019年12月15日

手続き型プログラミングと宣言型プログラミングを使い分ける

ソフトウェアを作る方法といえば、プログラミング言語で〜をしてから〜するという処理(手続き)を書くことだと思いますが、手続きを書くだけではソフトウェアはできません。 その処理の対象データやオブジェクトの静的な構造やシステムの構造など、データ構造を書く必要があります。 単純なデータ構造の場合は、データ構造と呼べないでしょうが、変数と値というデータは存在します。 そのため、ソフトウェアが大きくなるとデータをデータ構造として扱わなければならなくなってきます。

プログラミング言語でもデータ構造を書くことはできるのですが、たとえば C言語の構造体の初期化子で Key Value 構造(名前と値からなる構造)を書くとすると、Key と Value が離れてしまいデータがかなり読みづらくなってしまいます。 下記の場合 Key は name など、Value は Taro などです。

struct {
  char* name;
  int  age;
} data[2] = {
  {
    "Taro",
    21
  },{
    "Jiro",
    20
  },
}


データ構造を書くためのデータ形式として、CSV, XML, YAML, JSON などがあります。 YAML で上記と同じデータを書くと次のようになります。

- name: Taro
 age: 21
- name: Jiro
 age: 20


位置関係が整理されたことでデータ構造が理解しやすくなりましたね。 たとえば name の値が Taro の構造体の age の値は 21 です。 name が冗長だと問題にしてしまうと、読みにくくなります。 冗長は禁止という単純明快なルールに副作用があったということは、JSON の普及によって状況証拠ですが証明されつつあります。

ちなみに、YAML の場合、行頭のハイフンがオブジェクトの区切り(配列の要素)になっています。 コンマがオブジェクトの区切りに慣れている人にとっては、こんな小さな - に注意しなければならないのか!今まで通りで問題のないコンマでいいだろ、とお怒りになるかもしれませんが、それは古いプログラミング特有の知識かもしれません。 文書では以前からリスト(並べたもの)の行頭にある小さな点が項目を分ける重要な役割を持っているのです。 多くの人が読む文書の書き方に合わせてきたといういい方向の仕様の進化だと思います。

データ形式でも処理を書くことはできます。 文字列形式の値の部分にプログラミング言語のコードを書けばいいのです。 プログラミング言語の種類は別の値に書けばいいです。 もちろん、そのデータを処理するコードを、データを入力するコードに書かなければ処理は動きませんが。

language: bash
code: ls dist > list.txt


ここからが本題です。プログラミング言語 TypeScript(JavaScript) でデータ構造を次のように書いたとします。

var taro = { name: "Taro", age: 21 }
var jiro = { name: "Jiro", age: 20 }
var family = [ taro, jiro ]


family が最も下に書かれていますが、taro を family の下に書くことはできません。 なぜなら変数 taro に値が入っていないからです。 TypeScript なら family = [ undefined, jiro ] になるでしょう。(その前にコンパイルでエラーになると思います)

このように、プログラミング言語でふつうにデータを記述すると、書く内容の順番に制限が発生してしまうのです。

しかし、taro を family の下に書く方法はあります。 それは、プロパティやメソッドにデータ定義を書くことです。

class DataClass {
  Family() { return [ this.Taro(), this.Jiro() ] }
  Taro() { return { name: "Taro", age: 21 } }
  Jiro() { return { name: "Jiro", age: 20 } }
}


ただし、プロパティやメソッドにデータ定義を書く場合、上記のままでは2つの問題があります。 その問題の内容と解決方法について、次回説明します。

上記 YAML のサンプルで書いたように、データを書く位置が適切であることは、データを理解する上で重要なことです。 読んでいる文章が概要から入らずにどこか重箱の隅の話から始まると、何の話だか分からなくなりますよね。

このように書く順番によって影響を受けない形式でソフトウェアを(その一部でも)書くことを、宣言型プログラミングと呼びます。 宣言型プログラミングの定義はいろいろありますが、手続き型と宣言型という分け方をした場合、最も特徴的なのは、書く順番によるかよらないかです。 書く位置によって内容が変わってしまうのは、一般的な文章ではありえません。 一般的な文章では順番による内容については、番号付きリストを書くか、接続詞を書くことで、順番に意味があることが明示されています。 暗黙的に順序に意味があるのは、プログラミング言語のしかも関数の定義内容のように処理の部分に固有のことです。

手続き型のプログラミング言語には「変数を定義する前に変数の値を参照できない」という単純明快なルールがあり、それが制限になっているのですが、じっくり読んでいけば分かる、だけでは開発効率が悪くなります。

プログラミング以外でも、単純明快なルールの副作用によって問題が発生して効率が落ち、貴重な開発者の士気を下がると、ライバルとの競争に負けます。 たとえば、「専門用語の定義を、専門用語を使う前に書かなければならない」という単純明快ルールは、内包による理解しかできなくなってしまいます。 外延やサンプルによる強力な理解方法が取れなくなってしまいます。 多少読みにくくなるけどルールを守るように変えるのは簡単だから合わせてよ、と言えるのは、普段のパワポの資料を MS Word97 で書いてよ、と言われているような無茶なことです。

参考
宣言型プログラミング - Wikipedia
YAML
定義に関する2つのアプローチ─「外延」と「内包」


sage_p at 23:34|PermalinkComments(0) プログラミング 

注目ニュースリンク 12/16

◇ BluetoothとUSB Type-Cのハイブリッド版も。PFU、高性能キーボードHHKBを一新。
https://japan.cnet.com/article/35146639/
… 無線とUSBのどちらでもが普通になりそう。ペアリングの方法も変わりそう。

◇ 中国が Huaweiと5G契約しないと貿易協定を締結しないと外国の首脳を脅迫していたと判明。
https://gigazine.net/news/20191211-faroe-islands-threatened-china-huawei-5g/
… アメリカの真似をしているだけともとれる。

◇ 物理の法則に反して電気は通すが熱は通さない物質を物理学者が特定。
https://gigazine.net/news/20191202-electronic-thermal-conductivity-metallic-vanadium-dioxide/
… 法則より10分の1しか熱を通さない。プロセッサーの発熱量を抑える可能性は不明。

◇ カバンに入れたまま決済できるスマホのタッチレス対応。ドコモとソニーが実証実験。
https://japan.cnet.com/article/35146447/
… カードやスマホをかざすことから、アプリの操作に変わるメリットは。

◇ モバイル版 Office がデザイン言語 Fluent で刷新。
https://japan.cnet.com/article/35146467/
… 見た目でグーグルとの違いはほとんどない。マイクロタスクという概念は有効だが。

◇ イランのネット利用制限、大統領が強化を示唆。
https://japan.cnet.com/article/35146615/
… ネットによる民主主義が外国からの侵略と見えてしまうのだろう。

◇ AWSが量子コンピューティングサービス Amazon Braket 発表。研究センターやラボも。
https://japan.cnet.com/article/35146275/
… 研究機関に隣接する場所に設置。メンテナンスが必要か。

◇ 7nmプロセスで独自設計の次世代ARMプロセッサ Graviton 2 をAmazon Web Servicesが発表。
https://gigazine.net/news/20191204-aws-graviton-2/
… クラウド固有の状況に合わせたサーバーのプロセッサー。

◇ Alphabetの新CEO、サンダー・ピチャイ氏ってどんな人?
https://japan.cnet.com/article/35146542/
… 以前から実質のCEO。引っ張るタイプというより火消しに優れた人のようだ。


sage_p at 23:30|PermalinkComments(0) 注目ニュースリンク