コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Excel/スプレッドシートでセルを結合せずに結合した表現をする

資料作りテクニック的なやつ。

白塗り / グリッド線の削除とは

Excelの場合は背景色を白く塗りつぶす、スプレッドシートの場合はグリッド線を消す。

やることによるメリット

これを行うと何が嬉しいかというと「セルを結合していなくても結合しているように見せることができる」

  • 罫線で結合したセルっぽいみためになるので、項目などのコピペ、調整が楽
  • 結合しているセルにありがちなコピペができませんエラーが回避できる
  • 結合してないのでセルが横一線、縦一線でも一色に染まることがないので融通の効くキレイな表現ができる。

やることによるデメリット

範囲が任意で決められるが、罫線に関しては気を使いながら引く必要があるのである程度使い分けながらやらないといけない。

参考リンク

httpbinというモックライブラリがあり、それのデモページを使うと自分がアクセスしている内容がわかる

自分自身が外からどういうIPで見えているか?というのをサクッと検証するために便利なサイト。

実際のライブラリについて

検証用途のモックとかに使うことができ、自分のリクエストがどうであったかをレスポンスで返してくれる。ソースはGitHubで公開されている。

postmanlabs/httpbin: HTTP Request & Response Service, written in Python + Flask.

デモサイト

httpbin.org

デモサイトの活用方法

アクセス情報確認として使う

ユースケースとしては「あれ、自分ってどういうIPでアクセスしてるんだろ…」など確かめるときに使える。

以下のようにcurlすればいい

$ curl -v https://httpbin.org/ip

とすると以下のように返事が返ってくる(下記は999.99.999.99というありえないアドレスを入れているが、その部分に自分自身のIPが返ってくる)

$ curl -v http://httpbin.org/ip
*   Trying 3.225.168.125...
* TCP_NODELAY set
* Connected to httpbin.org (3.225.168.125) port 80 (#0)
> GET /ip HTTP/1.1
> Host: httpbin.org
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Origin: *
< Content-Type: application/json
< Date: Sun, 6 Oct 2019 09:59:09 GMT
< Referrer-Policy: no-referrer-when-downgrade
< Server: nginx
< X-Content-Type-Options: nosniff
< X-Frame-Options: DENY
< X-XSS-Protection: 1; mode=block
< Content-Length: 47
< Connection: keep-alive
<
{
  "origin": "999.99.999.99, 999.99.999.99"
}
* Connection #0 to host httpbin.org left intact

外から見える自分のIPを調べるのに便利

参考リンク

Fluentdは何故しばしばtd-agentと言われるのかざっくり調べてみた

トリビア的な内容。

Fluentdの歴史

Fluentdとは何ですか? | Fluentd

元々FluentdはTreasure Dataに所属している古橋貞之さんが作られたソフトウェアであり、それがOpen Source化されたものである。

td-agentの名前の由来

td-agentはそのデータ送信のプロセスを担うエージェントソフトで、そこの技術としてfluentdが使われており、td-agentとして単体で利用できるのでしばしばFluentdの話としては登場する。

参考:Overview of Server-Side Agent (td-agent). – Arm Treasure Data

参考リンク

WebDAVとは何なのかざっくりまとめる

422はWebDAVの拡張レスポンスコード…だがWebDAVとは何のか

出典

RFCに仕様がある

WebDAVとは

正式名称と意味

正式名称の「Web-based Distributed Authoring and Versioning」とあるとおり「Webを基本とした分散オーサリングとバージョニング(バージョン管理)」のための仕様となる。

作られた経緯

従来Webの単体の機能は読み込みだけであり、実態のファイル配置や更新はFTPなどの別のプロトコルを使うことで実現できていたので、Webの従来の仕組みだけで実現させよう、というのがこの仕様が作られた経緯となる

WebDAVとその後の仕様

このWebDAVで拡張された仕様では色々あるが、「PUT」と「DELETE」のメソッドはこの仕様策定の時期にできたもので、いまのRESTでの利用の下地になっている…ように見えるが同時期に色々な仕様の提案がされているのでWebDAVが始祖かというと難しい(その点の歴史は参考リンク参照のこと)

参考リンク

ビデオチャットの音声遅延による一体感の喪失とその対策

Zoomとかで起きる現象を文字に起こしてみたら、コラム的な感じになったが出してみる。

現場中継の違和感

よくニュース番組などでスタジオから現場への中継をすることがある。その際にスタジオのレポーターが「そちらの様子はどうですか?」と話かけると、一呼吸ならぬ二呼吸ぐらいおいたあとに現場のアナウンサーが「こちらは最高のお天気です」のように返事をする。また、現場が和気あいあいとインタビューなどしているときに合いの手としてスタジオのリポーターが返事をすると数秒たったあとにピタリと会話が止まってその合いの手に反応する。

そんな場面をよく見かけるのではないのだろうか。事象としては距離と伝送速度の兼ね合いによる遅延ということはわかる。こういう話はテレビだけの話だけではなくビデオチャットでも起きる。

ビデオチャットで起こること

会議室などに集音マイクを置いて、複数の個人とビデオチャットで会話する。テレワークなどを導入している企業などだとあり得る光景だと思う。そこでも先程のような「現場中継の違和感」は起きる。

会議室のメンバーが一人面白いことを言ってドッと笑うと、ちょっと遅れて画面の先の遠隔地の人たちが笑う、そうすると会議室メンバーは笑い終わっているのに笑い声だけが遅延するという事が起きる。

議論に置いてもリアルで話していることに対して、何か一言物申そうとしてもワンテンポ遅れてしまうので、議論がちょっとぎこちない感じになってしまうことがある

うまくやるためには

方法論としてはいろいろある

  • 現場(人がたくさんいて、集音マイクがある側)がリモート側とずれないように同期をとってしゃべる
  • 全員イヤホンマイクでビデオチャットに参加する

後者の全員ビデオチャットでやるのは一番楽なソリューションで、なにか面白いことをいってもその発話が届くのは全員均等なので笑い声を出してもタイムラグが等しくなるので全員現場にいることと変わらなくなる。これで話のぎこちなさはかなり減る。

関連リンク

ZoomでiPhoneやiPadをワイヤレスWebカメラ代わりに使えるアプリ「EpocCam」

Zoomでカメラつけたいけど有線だと写せる範囲が微妙だな…という人向け

使うアプリ

「EpocCam - Webカメラ for Mac & PC」をApp Storeで

使い方

  1. iPhone/iPad側にアプリを入れて起動する
  2. ドライバを入れたPCでZoomを立ち上げる
  3. アプリが撮影している映像がビデオ代わりになる

補足事項

  • ドライバを入れる必要がある
  • 同じネットワークにつながる必要があるのでWiFi環境が必要
  • 無料版だと画質はそこまでよくないのでもっと画質欲しい場合はProのアプリをつかう選択肢もある

参考リンク

動的型付けと型推論の違いをざっくりまとめる

ざっと眺めるとミスリードしがちなのでわかりやすい違いを述べるだけの話。

動的型付けとは

文字通り「動的に」「型をつける」というプログラミング言語の機構。

言語として実行するときに型が決定するので、ソースコード上では型を特段指定しなくても値の内容から判断して型を決定づける。

例えばJavaScriptの場合は

// ただ足し込むだけの関数を作る
function plusing(x,y){ return x+y; }

// 文字列同士を設定するとtypeは文字列になる
typeof(plusing("a","b"))
// => "string"

// 数値を設定するとtypeは数値になる
typeof(plusing(1,2))
// => "number"

(相対する考えの)静的型付けとは

対象となる静的型付けの言語は、変数を宣言するときに必ず型を指定しないといけない。厳格に型をしていすることで意図違いのものが混入することを防ぐことができるが、動的型付けほど自由度の高い使いかたはできない。

型推論とは

静的型付けの場合は変数宣言した型を決めなければいけないが、代入される値から推察して値を確定させるのが型推論

一番わかりやすい例は初期値に使う場合の例。

Go言語で例を出す。

varのあとに int として型を宣言している

package main

import (
    "fmt"
)

func main() {
    var suji int
    suji = 10
    suji = suji + 20
    fmt.Println(suji)
}

ただ型推論を使うと初期値から型が自明になるので、宣言しなくても解釈される。

package main

import (
    "fmt"
)

func main() {
    var suji = 10
    suji = suji + 20
    fmt.Println(suji)
}

そのため、以下の場合は推論材料がないのでエラーになる。

package main

import (
    "fmt"
)

func main() {
    var suji
    suji = 20
    fmt.Println(suji)
}

違いはなにか

大雑把に動きを見ると親しい動きをするので同じものと思えてしまうが、型推論は文字通り「型が推論できる材料が揃わないとコンパイルエラーになる」なので、入る値が推定できないような書き方は許容されないのでその点がわかりやすい違いとなる。

参考リンク