2021/01,江端さんの技術メモ

  1. 参考文献
    https://r9y9.github.io/blog/2014/03/22/cgo-tips/
    https://hawksnowlog.blogspot.com/2018/12/getting-started-with-cgo.html
  2. 取り敢えず、Goのプログラムの中からCの関数を使う方法
    // go run main.go
    
    package main
    
    /*
    #include <stdio.h>
    #include <stdlib.h>
    
    void myprint(char* s) {
    	printf("%s\n", s);
    }
    */
    import "C"
    
    import "unsafe"
    
    func main() {
    	cs := C.CString("Hello from stdio\n")
    	C.myprint(cs)
    	C.free(unsafe.Pointer(cs))
    }
    
    // output
    // Hello from stdio

    とか

    package main
    
    /*
    #include <math.h>
    double MyPow(double x, double y) {
      double ret = pow(x, y);
      return ret;
    }
    */
    import "C"
    import "fmt"
    
    func main() {
    	ret := C.MyPow(10, 2)
    	fmt.Println(ret)
    }
  3. 結構面倒くさい決まりごと
    (1)import "C" の前には空行を入れない

    // #include <stdio.h>
    // #include <errno.h>
    import "C"

    (2)C / C++ のコンパイラに渡すオプション(flag)を記述する

    // #cgo CFLAGS: -I/usr/local/lib
    import C

 

2021/01,江端さんの忘備録

私は、「モノを大切にする」ことには興味がありませんが、「モノを自分なりの方法で補修する」というのが好きです。

I am not interested in "taking care of things", but I like to "repair things in my own way".

ただ ―― エレガントではありません。

However, it's not elegant.

ポリシーは「手を抜いて、ラクに補修をする」です。

My policy is to "cut corners and make repairs with ease.

例えば、結合部が欠けている時計は、時計のバンドの端を裂いて、そこに瞬間接着剤を流し込んで使っています。

For example, for watches with missing joins, I tear off the end of the watch band and pour instant glue into it for use.

擦れて穴が空いたGパンは、そのままにしておけば穴が広がるだけです。

My G-panels that are worn out and have holes in them will only spread if you leave them as they are.

ですので、穴が空いたところに、木工用ボンドを流し込み、

So, I poured wood glue into the hole, and

さらに、油性の黒色のマジックで上塗りをする、という補修をやってみました。

In addition, I tried to repair it by painting over it with an oil-based black magic marker.

リュックのポケットの底が、そのまま抜けてしまった時も同じように、木工用ボンドを塗りたくって(×接着して)、そのまま固化するのを待ち、

When the bottom of my backpack pocket fell out, in the same way, I applied wood glue to the bottom of the pocket and waited for it to harden.

その塊の上に、油性の黒色のマジックで上塗りをしました。

I used an oil-based black magic marker to paint over the hardened object.

-----

まあ、この補修の目的は、「使い続ける」ということを目的とした「補修」です。

Well, the purpose of this repair is to "repair" for the purpose of continued use.

ただし、「美しく」はありません。

However, there is nothing "beautiful" about it.

時計は、Amazonで10年前に3800円くらいで購入したものですし、Gパンもリュックも格安のものです。

The watch was something I bought on Amazon for about 3,800 yen 10 years ago, and the G pants and backpack were cheap.

私は、時計、Gパン、リュックを購入できない程、収入がないという訳でもありません。

I'm not so poor that I can't afford a watch, g-pants, and a backpack.

「それって、もったいない精神 ?」 と問われると、それも違う気がします。

If you ask me, "Is that a wasteful mentality? I don't think so either.

もっともピッタリとくる答えは、「新しいものに慣れるまでの時間が面倒」になると思います。

The answer that fits me best is "I feel bother with the time it takes to get used to new things.

それと「木工用ボンド」ですね。

And "wood glue".

-----

下町の木工会社の社長の息子であった私は、「木工用ボンド」に対する深い愛情があります。

As the son of the president of a downtown woodworking company, I have a deep affection for "woodworking bond.

強力な接着効果、乾燥後の美しい仕上がり(透明になる)、取り扱いが簡単な上、水溶性でもあります。

Strong adhesive effect, beautiful finish after drying (becomes transparent), easy to handle, and water soluble.

凝固する前であれば、水とブラシで簡単に除去できます。加えて、人体に対する安全性も高いです。

Wood glue can be easily removed with water and brush before it solidifies. In addition, it is safe for the human body.

-----

先日、急須(きゅうす)の蓋を割ってしまったのですが、瞬間接着剤を使ってしまいました。

The other day, I broke the lid of a teapot (kyusu) and used instant glue.

どうも、これは、良くなかったようです。

Apparently, this was not a good idea.

安全性について、完全にセーフとは言えない物質が混入しており、特に嫁さんが使用を嫌がっています。

Regarding safety, there are some substances mixed in that are not completely safe, and my wife especially does not like to use them.

ですが、

However, I read

「安全・簡単格安DIY 現代的"金継ぎ"食器修理のやり方」

"Safe, Easy and Cheap DIY Modern "Kinatsugi" Tableware Repair Methods"

を読んでみると、「安全性が担保されている木工用ボンド」があるようです。

There seems to be a "safety bond for wood glue.

―― 木工用ボンド、スゲーな

"wood glue", awesome

-----

という訳で、先日

So, the other day

―― これから陶器が割れても修復します(私の食器だけでいい)ので、直ぐに廃棄しないようにお願いします

"From now on, if a piece of pottery breaks, I will repair it (just my dishes), so please don't discard it right away!"

というメッセージを、LINEで家族に送付しておきました。

I have sent this message to my family by LINE.

2021/01,江端さんの忘備録

先程、YouTubeで、

On YouTube, I watched,

「エリザベス女王の人質とは? 女王が語るブレグジットは?」

"What is Queen Elizabeth's hostage? What does the Queen say about Brexit?"

を見ました。

一言で言えば、

It was, in short,

―― 王家と議会の敵対関係

"Hostility between the Royal Family and Parliament"

の、何百年間もの歴史を経た「様式美」あるいは「テンプレート化」というものでした。

the "stylized beauty" or "templating" that had been going on for hundreds of years.

とても、面白かったです。

It was very, very interesting.

-----

私、最近、家族や他の人々の忠告『皇室のことには触れるな』と言われているにも関わらず、結構、天皇陛下や天皇制について書いています。

Recently, I have been writing quite a bit about His Majesty the Emperor and the Emperor System, despite the fact that my family and other people have told me not to mention the Imperial Family.

それは、「天皇陛下の激務を、数値によって定量化して見せる」とか、「天皇制をシステム論から評価する」という内容です。

They are about "quantifying and showing the Emperor's strenuous work through numbers" or "evaluating the emperor system from a systems perspective.

特に、こっちのコラムについて、私は、

In particular, about this column, I had prepared a title

「天皇制とは、ブロックチェーンである」

"The emperor system is a blockchain"

という題目を提案していたくらいです。

でまあ、これらのコラムの下書き(ドラフト)を読んだ、家族や他の人々の意見や所感を一言で纏めると、

So, in a nutshell, here are the opinions and impressions of my family and others who have read the drafts of these columns

―― 敬意がない

"Lack of respect"

ということになるようです。

-----

しかし、私、この「数値化」や「システム評価」という観点から、

However, from the perspective of this "quantification" and "system evaluation".

―― 人生でこれ以上もないくらい、皇室や天皇制について大量に勉強し、その意義を深く理解することができた

"For the first time in my life, I was able to study a large amount about the imperial family and the emperor system and deeply understand its significance"

と、思っています。

そして、本日、

And today, I have been listening to

「天皇陛下 新年ビデオメッセージ」

"The Emperor's New Year Video Message"

を拝聴しております。

-----

実のところ、私は、家族や他の人々の言っていることを、理解できていると思っています。

As a matter of fact, I believe I understand what my family and other people are saying.

これは、

This is a criticism to me,

『江端、お前は、"愛"を計算しシステムとして評価しなければ、"愛"の存在を確認できないのか?』

"Ebata, can't you confirm the existence of love without calculating it and evaluating it as a system?"

という批判だと思います。

(我が国の皇室の場合は、"愛"というようりは、"敬愛"になると思います)

(In the case of the Imperial Family in Japan, I think the word is "respect" rather than "love".)

この批判、実に理に叶っていると思いますし、私は、その批判を受け入れることができます。

I think this criticism makes a lot of sense, and I can accept it.

-----

ただ、私のティーンエイジャから大学在学中、大半の人にとっては、あまり経験できない日々、

However, my days as a teenager and in college were not very relevant to most people.

こんなのや、

like this one,

こんなの、

or this one.

を経てきました。

このこと自体は、幸運なことだったと思っています。

I think that this in itself was a blessing for me.

ただ、日本人の多くが、呼吸をするように自然に獲得してきた"敬愛"を、私が、"後発的"に受け入れるようになることは、とても難しいことだったのです。

However, it was very difficult for me to come to accept the "respect" that most Japanese people have naturally acquired like their breathing.

-----

『計算とシステム評価から、敬愛に至る』

"From Computation and System Evaluation to Respect.

こんな人間は、少数派 ―― というか、「私以外には誰もいないんじゃないかな」と思っていました。

I thought that people like this were in the minority -- or rather, I thought, "There is no one else but me.

しかし、冒頭の「エリザベス女王の人質とは? 女王が語るブレグジットは?」を視聴しているうちに、『案外、そうでもないかもしれない』と思い始めています。

However, watching the "What is Queen Elizabeth's hostage? What does the Queen say about Brexit?" at the beginning, I'm beginning to think, "Maybe not so much.

-----

私の想いは、"多くの人"には届かないかもしれないけど、私と同じ思考形態をしている人には届くのかもしれません。

My thoughts may not reach "many people," but they may reach those who think the same way I do.

私自身は、「その中の一人が、私である」ということで良い、と思っています。

I myself think it is safe to say that I am one of them.

むしろ「その中の一人」を自覚して、今年もコラムを書きまくろうと思っています。

Rather, I am aware that I am "one of them," and I am going to write a lot of columns this year too.

今年もよろしくお願い致します。

Happy New Year to you all.

2020/12,江端さんの忘備録

新型コロナ禍で、行動変容を強いられた一年でした。

I have been forced my behavior change for this year.

私のことだけを取り上げても、

About my private life in this year, there are the following issues.

(1)会社に出社させて貰えなくなり、

(1) They wouldn't let me come to work.

(2)出張しなくても、リモート会議で、そこそこ打ち合わせが成立することが分かってしまい、

(2) I've found that I can have a meeting remotely without business trips.

(3)家族で夕食を食べるようになり、

(3) The whole family started to eat dinner together.

(4)自宅のリビングのテーブルに、60cm x 60cm の アクリル版 2枚が常設され、

(4) Two 60cm x 60cm acrylic plates have been permanently installed on the table in my living room.

(5)テレビで、昨年の裸踊り祭や、帰省ラッシュの映像を見て驚愕し(『マジかよ・・』と呟き)、

(5) When I saw the images of last year's naked dance festival and the rush to return home on TV, I was astonished (and muttered, "Really?)

などもあります。

-----

ITエンジニアとして、また、民主主義に価値があると信じている一人として、

As an IT engineer and a believer in democracy,

(6)国家による個人情報取得が、国民の側から支持/歓迎され(接触感染アプリ等)

(6) The acquisition of personal information by the state is supported/welcomed by the public (e.g., contact infection applications).

(7)民主主義国よりも、社会主義国の方が、ウイルス感染の制御能力が高い

(7) Socialist countries are more capable of suppressing viral infections than democratic countries.

は、衝撃的なできごとでした。

These were shocking incidents.

-----

このように、私の回りに限っても、これだけの想像もしなかった世界が出現しました。

In this way, even in my immediate surroundings, a world that I had never imagined has emerged.

加えて、ここ数日の間では、

In addition, in the last few days,I was also surprised by the fact that

今年3月にリリースしたコラムが、今、再びランクインしている、

A column I released in March of this year is now back in the ranks.

といことにも驚いています。

-----

この一年、コロナ禍によって、世界は強制的に書き換えられました。

In this year, the world has been forcibly rewritten by the Corona disaster.

コロマ禍前の世界に戻ることはできないと思います。

I don't think it's possible to return to the world before the corona disaster.

コロナ禍中、またはコロナ禍後の世界をどうやって生きるか ―― 来年は、これまで以上に、それを問われる一年になると思います。

How to live in the world during and after the corona disaster? I believe that next year will be a year in which we will be asked this question more than ever before.

2020/12,江端さんの技術メモ

Tile38

Slack Channel Docker Ready

Tile38 is an open source (MIT licensed), in-memory geolocation data store, spatial index, and realtime geofence. It supports a variety of object types including lat/lon points, bounding boxes, XYZ tiles, Geohashes, and GeoJSON.

Tile38は、オープンソース(MITライセンス)で、インメモリのジオロケーションデータストア、空間インデックス、リアルタイムジオフェンスです。緯度/経度ポイント、バウンディングボックス、XYZタイル、Geohash、GeoJSONを含む様々なオブジェクトタイプをサポートしています。

This README is quick start document. You can find detailed documentation at https://tile38.com.

このREADMEはクイックスタートのドキュメントです。詳細なドキュメントはhttps://tile38.com.

Nearby Within Intersects Geofencing Roaming Geofences

Features

特徴

Components

  • tile38-server - The server → サーバ
  • tile38-cli - Command line interface tool → コマンドインターフェースツール
  • tile38-benchmark - Server benchmark tool → サーバベンチマークツール

Getting Started

はじめに

Getting Tile38

タイル38の取得

Perhaps the easiest way to get the latest Tile38 is to use one of the pre-built release binaries which are available for OSX, Linux, FreeBSD, and Windows. Instructions for using these binaries are on the GitHub releases page. → 最新のTile38を入手する最も簡単な方法は、OSX、Linux、FreeBSD、Windows用に提供されているビルド済みのリリースバイナリを使用することでしょう。これらのバイナリの使い方は、GitHub release pageにあります。

Docker

To run the latest stable version of Tile38:→Tile38の最新の安定版を実行する。

docker pull tile38/tile38
docker run -p 9851:9851 tile38/tile38

Visit the Tile38 hub page for more information. → 詳しくはTile38ハブページをご覧ください。

Homebrew (macOS)

Install Tile38 using Homebrew →Homebrew](https://brew.sh/)を使ってTile38をインストールします。

brew install tile38
tile38-server

Building Tile38

タイル38の構築

Tile38 can be compiled and used on Linux, OSX, Windows, FreeBSD, and probably others since the codebase is 100% Go. We support both 32 bit and 64 bit systems. Go must be installed on the build machine.

Tile38は、コードベースが100%Goなので、Linux、OSX、Windows、FreeBSD、そしておそらく他のOSでもコンパイルして使うことができます。32ビットと64ビットの両方をサポートしています。ビルドマシンにはGoがインストールされている必要があります。

To build everything simply:

すべてをシンプルに構築する為に

$ make

To test:

$ make test

Running

実行

For command line options invoke: コマンドラインオプションの場合は、次を呼び出します。

$ ./tile38-server -h

To run a single server:

$ ./tile38-server

# The tile38 shell connects to localhost:9851
$ ./tile38-cli
> help

Playing with Tile38

Basic operations: 基本操作:

$ ./tile38-cli

# add a couple of points named 'truck1' and 'truck2' to a collection named 'fleet'.
#「fleet」という名前のコレクションに「truck1」および「truck2」という名前のポイントをいくつか追加します。
> set fleet truck1 point 33.5123 -112.2693   # on the Loop 101 in Phoenix
> set fleet truck2 point 33.4626 -112.1695   # on the I-10 in Phoenix

# search the 'fleet' collection.
#「フリート」コレクションを検索します。
> scan fleet                                 # returns both trucks in 'fleet'
> nearby fleet point 33.462 -112.268 6000    # search 6 kilometers around a point. returns one truck.

# key value operations
# キー値操作
> get fleet truck1                           # returns 'truck1'
> del fleet truck2                           # deletes 'truck2'
> drop fleet                                 # removes all 

Tile38 has a ton of great commands. Tile38にはたくさんの[すばらしいコマンド](https://tile38.com/commands)があります。

Fields

フィールド

Fields are extra data that belongs to an object. A field is always a double precision floating point. There is no limit to the number of fields that an object can have.

フィールドは、オブジェクトに属する追加のデータです。 フィールドは常に倍精度浮動小数点です。 オブジェクトが持つことができるフィールドの数に制限はありません。

To set a field when setting an object: オブジェクトを設定するときにフィールドを設定するには:

> set fleet truck1 field speed 90 point 33.5123 -112.2693             
> set fleet truck1 field speed 90 field age 21 point 33.5123 -112.2693

To set a field when an object already exists: オブジェクトがすでに存在するときにフィールドを設定するには:

> fset fleet truck1 speed 90

Searching

検索

Tile38 has support to search for objects and points that are within or intersects other objects. All object types can be searched including Polygons, MultiPolygons, GeometryCollections, etc.

Tile38は、他のオブジェクト内または他のオブジェクトと交差するオブジェクトおよびポイントの検索をサポートしています。 Polygons、MultiPolygons、GeometryCollectionsなどを含むすべてのオブジェクトタイプを検索できます。

Search Within

Within

WITHIN searches a collection for objects that are fully contained inside a specified bounding area. WITHINは、指定された境界領域内に完全に含まれているオブジェクトをコレクションで検索します。

Search Intersects

Intersects

INTERSECTS searches a collection for objects that intersect a specified bounding area.

Search Nearby

Nearby

NEARBY searches a collection for objects that intersect a specified radius. INTERSECTSは、指定された境界領域と交差するオブジェクトをコレクションで検索します。

Search options

検索オプション

SPARSE - This option will distribute the results of a search evenly across the requested area.

** SPARSE **-このオプションは、検索結果を要求された領域全体に均等に分散します。

This is very helpful for example; when you have many (perhaps millions) of objects and do not want them all clustered together on a map. Sparse will limit the number of objects returned and provide them evenly distributed so that your map looks clean.

これは、非常に役立ちます。 多数(おそらく数百万)のオブジェクトがあり、それらすべてをマップ上にクラスター化したくない場合。 スパースは、返されるオブジェクトの数を制限し、マップがきれいに見えるようにそれらを均等に分散させます。

You can choose a value between 1 and 8. The value 1 will result in no more than 4 items. The value 8 will result in no more than 65536. 1=4, 2=16, 3=64, 4=256, 5=1024, 6=4098, 7=16384, 8=65536.

1から8までの値を選択できます。値1は、4つ以下のアイテムになります。 値8は、65536以下になります。* 1 = 4、2 = 16、3 = 64、4 = 256、5 = 1024、6 = 4098、7 = 16384、8 =65536。*

>

No SparsingSearch WithinSparse 1Search WithinSparse 2Search WithinSparse 3Search WithinSparse 4Search WithinSparse 5Search Within

Please note that the higher the sparse value, the slower the performance. Also, LIMIT and CURSOR are not available when using SPARSE.

スパース値が高いほど、パフォーマンスが低下することに注意してください。 また、SPARSEを使用している場合、LIMITとCURSORは使用できません。

WHERE - This option allows for filtering out results based on field values. For example
nearby fleet where speed 70 +inf point 33.462 -112.268 6000 will return only the objects in the 懼fleet懼 collection that are within the 6 km radius and have a field named speed that is greater than 70.

Multiple WHEREs are concatenated as and clauses. WHERE speed 70 +inf WHERE age -inf 24 would be interpreted as speed is over 70 and age is less than 24.

The default value for a field is always 0. Thus if you do a WHERE on the field speed and an object does not have that field set, the server will pretend that the object does and that the value is Zero.

WHERE - このオプションは、fieldの値に基づいて結果をフィルタリングすることができます。例えば
`nearby fleet where speed 70 +inf point 33.462 -112.268 6000````は、半径6km以内にあるオブジェクトのみを返します。<br><br>複数のWHEREは**and**句として連結されます。<br><br>フィールドのデフォルト値は常に0です。したがって、フィールドspeed` の WHERE を実行したときに、オブジェクトにそのフィールドが設定されていない場合、サーバーはオブジェクトが設定されていて、その値がゼロであるかのように振舞うことになります。

MATCH - MATCH is similar to WHERE except that it works on the object id instead of fields.
nearby fleet match truck* point 33.462 -112.268 6000 will return only the objects in the 懼fleet懼 collection that are within the 6 km radius and have an object id that starts with truck. There can be multiple MATCH options in a single search. The MATCH value is a simple glob pattern.

nearby fleet match truck* point 33.462 -112.268 6000は、半径6km以内にある懼fリート懼コレクションのオブジェクトのうち、かつtruckで始まるオブジェクトIDを持つものだけを返します。1つの検索で複数のMATCHオプションを指定することができます。MATCHの値は単純なglob patternです。

CURSOR - CURSOR is used to iterate though many objects from the search results. An iteration begins when the CURSOR is set to Zero or not included with the request, and completes when the cursor returned by the server is Zero.

CURSOR - CURSORは、検索結果から多くのオブジェクトを繰り返し処理するために使用されます。CURSORが0に設定されているか、リクエストに含まれていない場合には反復処理が開始され、サーバから返されたカーソルが0になった時点で終了します。

NOFIELDS - NOFIELDS tells the server that you do not want field values returned with the search results.

NOFIELDS - NOFIELDSは、検索結果で返されるフィールド値を望まないことをサーバーに伝えます。

LIMIT - LIMIT can be used to limit the number of objects returned for a single search request.

LIMIT - LIMITは、1つの検索リクエストに対して返されるオブジェクトの数を制限するために使用することができます。

Geofencing

ジオフェンシング

Geofence animation A geofence is a virtual boundary that can detect when an object enters or exits the area. This boundary can be a radius, bounding box, or a polygon. Tile38 can turn any standard search into a geofence monitor by adding the FENCE keyword to the search.

ジオフェンスは、物体がその領域に入ったり出たりしたときに検出できる仮想的な境界です。この境界は、半径、境界ボックス、または多角形にすることができます。Tile38は、検索にFENCEキーワードを追加することで、標準的な検索をジオフェンスモニタに変えることができます。

Tile38 also allows for Webhooks to be assigned to Geofences.

*Tile38では、ジオフェンスにWebhooksを割り当てることもできます。

 

A simple example:

簡単な例です。

> nearby fleet fence point 33.462 -112.268 6000

This command opens a geofence that monitors the 懼fleet懼 collection. The server will respond with:

このコマンドは 懼fリート懼 コレクションを監視するジオフェンスを開きます。サーバは以下のように応答します。

{"ok":true,"live":true}

And the connection will be kept open. If any object enters or exits the 6 km radius around 33.462,-112.268 the server will respond in realtime with a message such as:

また、接続はオープンに保たれます。33.462,-112.268` 付近の半径6kmの範囲に何か物体が出入りすると、サーバはリアルタイムで次のようなメッセージを返します。

{"command":"set","detect":"enter","id":"truck02","object":{"type":"Point","coordinates":[-112.2695,33.4626]}}

The server will notify the client if the command is del | set | drop.

サーバは commanddel | set | drop の場合にクライアントに通知する。

  • del notifies the client that an object has been deleted from the collection that is being fenced.
  • del` は、フェンシングされているコレクションからオブジェクトが削除されたことをクライアントに通知します。
  • drop notifies the client that the entire collection is dropped.
  • drop` はコレクション全体が削除されたことをクライアントに通知する。
  • set notifies the client that an object has been added or updated, and when it懼s position is detected by the fence.
  • set` はオブジェクトが追加または更新されたことをクライアントに通知し、フェンスによってその位置が検出されたときにそのことを通知します。

The detect may be one of the following values.

detect` は以下の値のいずれかである。

  • inside is when an object is inside the specified area.
  • inside` はオブジェクトが指定された領域の内側にあるときのことである。
  • outside is when an object is outside the specified area.
  • outside` は、オブジェクトが指定された領域の外にあるときのことである。
  • enter is when an object that was not previously in the fence has entered the area.
  • enter`は、それまで柵の中に**なかったオブジェクトがエリア内に入ってきたときのことである。
  • exit is when an object that was previously in the fence has exited the area.
  • exit`は、以前にフェンスの中にあった***オブジェクトがエリア外に出たときのことである。
  • cross is when an object that was not previously in the fence has entered and exited the area.
  • クロス`とは、それまで柵の中になかったオブジェクトがエリアに入ってきて**エリアから出てきたときのことである。

These can be used when establishing a geofence, to pre-filter responses. For instance, to limit responses to enter and exit detections:

これらは、ジオフェンスを確立する際に、応答を事前にフィルタリングするために使用することができます。例えば、enterexit の検出に対して応答を制限することができます。

> nearby fleet fence detect enter,exit point 33.462 -112.268 6000

Pub/sub channels

パブ/サブチャンネル

Tile38 supports delivering geofence notications over pub/sub channels.

Tile38は、パブ/サブチャンネル上のジオフェンス通知の配信をサポートしています。

To create a static geofence that sends notifications when a bus is within 200 meters of a point and sends to the busstop channel:

バスがポイントから200メートル以内にいるときに通知を送信し、busstopチャンネルに送信する静的ジオフェンスを作成します。

> setchan busstop nearby buses fence point 33.5123 -112.2693 200

Subscribe on the busstop channel:

バストップチャンネルを購読してください。

> subscribe busstop

Object types

オブジェクトの種類

All object types except for XYZ Tiles and QuadKeys can be stored in a collection. XYZ Tiles and QuadKeys are reserved for the SEARCH keyword only.

XYZ TilesとQuadKeyを除くすべてのオブジェクトタイプは、コレクションに格納することができます。XYZ TilesとQuadKeyは、SEARCHキーワードのみに予約されています。

Lat/lon point

ラット/ロングポイント

The most basic object type is a point that is composed of a latitude and a longitude. There is an optional z member that may be used for auxiliary data such as elevation or a timestamp.

最も基本的なオブジェクト型は緯度と経度からなる点である。オプションの z メンバがあり、標高やタイムスタンプなどの補助データに使用することができます。

set fleet truck1 point 33.5123 -112.2693     # plain lat/lon
set fleet truck1 point 33.5123 -112.2693 225 # lat/lon with z member

Bounding box

バウンディングボックス

A bounding box consists of two points. The first being the southwestern most point and the second is the northeastern most point.

バウンディングボックスは2つの点で構成されています。1つ目は最も南西の点で、2つ目は最も北東の点です。

set fleet truck1 bounds 30 -110 40 -100

Geohash

ジオハッシュ

A geohash is a string representation of a point. With the length of the string indicating the precision of the point.

geohash は、点を文字列で表現したものです。文字列の長さは点の精度を表します。

set fleet truck1 hash 9tbnthxzr # this would be equivalent to 'point 33.5123 -112.2693'

GeoJSON

GeoJSON is an industry standard format for representing a variety of object types including a point, multipoint, linestring, multilinestring, polygon, multipolygon, geometrycollection, feature, and featurecollection.

GeoJSON](https://tools.ietf.org/html/rfc7946)は、点、多点、線条、多線条、多角形、マルチポリゴン、ジオメトリコレクション、フィーチャ、フィーチャコレクションなど、様々なオブジェクトタイプを表現するための業界標準フォーマットです。

* All ignored members will not persist.

* すべての無視されたメンバーは持続しません。

Important to note that all coordinates are in Longitude, Latitude order.

すべての座標は経度、緯度の順になっていることに注意してください。

set city tempe object {"type":"Polygon","coordinates":[[[0,0],[10,10],[10,0],[0,0]]]}

XYZ Tile

XYZタイル

An XYZ tile is rectangle bounding area on earth that is represented by an X, Y coordinate and a Z (zoom) level.

XYZタイルとは、X,Y座標とZ(ズーム)レベルで表現された地球上の矩形領域のことです。

Check out maptiler.org for an interactive example.

インタラクティブな例は maptiler.org をご覧ください。

QuadKey

A QuadKey used the same coordinate system as an XYZ tile except that the string representation is a string characters composed of 0, 1, 2, or 3. For a detailed explanation checkout The Bing Maps Tile System.

QuadKey は XYZ タイルと同じ座標系を使用しますが、文字列表現は 0, 1, 2, 3 で構成される文字列です。詳しい説明は Bing Maps Tile System をご覧ください。

Network protocols

ネットワークプロトコル

It懼s recommended to use a client library or the Tile38 CLI, but there are times when only HTTP is available or when you need to test from a remote terminal. In those cases we provide an HTTP and telnet options.

クライアントライブラリ](#client-libraries)またはTile38 CLIを使用することをお勧めしますが、HTTPしか利用できない場合や、リモート端末からテストする必要がある場合があります。そのような場合には、HTTPとtelnetオプションを用意しています。

HTTP

One of the simplest ways to call a tile38 command is to use HTTP. From the command line you can use curl. For example:

tile38コマンドを呼び出す最も簡単な方法の1つは、HTTPを使用することです。コマンドラインからcurlを使用することができます。例えば、以下のようになります。

# call with request in the body
curl --data "set fleet truck3 point 33.4762 -112.10923" localhost:9851

# call with request in the url path
curl localhost:9851/set+fleet+truck3+point+33.4762+-112.10923

Websockets

ウェブソケット

Websockets can be used when you need to Geofence and keep the connection alive. It works just like the HTTP example above, with the exception that the connection stays alive and the data is sent from the server as text websocket messages.

Websocket は、ジオフェンスして接続を維持する必要がある場合に使用することができます。これは上記の HTTP の例と同じように動作しますが、接続が生きていることと、データがテキストの Websocket メッセージとしてサーバーから送信されることを除いては、動作しません。

Telnet

There is the option to use a plain telnet connection. The default output through telnet is RESP.

プレーンなtelnet接続を使用するオプションがあります。telnetによるデフォルトの出力はRESPです。

telnet localhost 9851
set fleet truck3 point 33.4762 -112.10923
+OK

The server will respond in JSON or RESP depending on which protocol is used when initiating the first command.

サーバは、最初のコマンドを開始するときに使用されるプロトコルに応じて、JSONまたはRESPで応答します。

  • HTTP and Websockets use JSON.
  • HTTPとWebsocketsはJSONを使用しています。
  • Telnet and RESP clients use RESP.
  • Telnet と RESP クライアントは RESP を使用します。

Client Libraries

クライアントライブラリ

Tile38 uses the Redis RESP protocol natively. Therefore most clients that support basic Redis commands will in turn support Tile38. Below are a few of the popular clients.

Tile38はRedis RESPプロトコルをネイティブに使用します。そのため、基本的なRedisコマンドをサポートしているほとんどのクライアントがTile38をサポートしています。以下に人気のあるクライアントをいくつか紹介します。

Contact

連絡先

Josh Baker [@tidwall](https://twitter.com/tidwall)

License

ライセンス

Tile38 source code is available under the MIT License.

Tile38のソースコードはMIT Licenseで公開されています。

2020/12,江端さんの忘備録

今年は、新型コロナ禍もあって、嫁さんの九州方面チームも、私の東海方面チーム(私だけ)も、実家帰省できません。

This year, due to the new Corona disaster, neither my wife's Kyushu area team nor my Tokai area team (just me) will be able to go home.

家族揃って自宅で過ごすことになる、最初の年末年始、です。

This is the first year end and beginning of the year when the family will spend time together at home.

―― 正月の過し方が分からん

"I don't know how to spend the New Year"

正月や年末の料理って何だっけ?

What are the dishes for New Year's and the end of the year?

あわてて、おせちの通販予約をしたり、GoogleMapで近所の魚屋探したりして、ドタバタしています。

I'm in a panic, making mail-order reservations for Osechi and searching for a fish shop in my neighborhood using Google Maps.

-----

これまでの年末年始は、実家で、掃除して、料理して、でもって、持ち込んだパソコン一式で、プログラム、コラム執筆して、してと ―― まあ、かなり忙しい日々を送っていたものです。

So far, I've spent the New Year's holidays at my parents' house, cleaning, cooking, and programming, writing columns, using a set of computers I brought.

でもって、今の、私はというと、やっぱり、なんやかんやと、動き回っています。

But now, as for me, I'm still moving around, for whatever I can.

私が、「のんびりした正月」を体験できないのは、「私の環境」 ―― というよりは、「私の資質」に因るところが大きいようです。

The reason why I can't experience a "relaxed New Year's" seems to be largely due to my environment -- or rather, my qualities.

まあ、どこにいようとも、私は変わらんということですね。

Well, I guess that means I'm still the same no matter where I am.

2020/12,江端さんの忘備録

私、こっちで、貨幣(の信用)についてエラそうに書いています。

I've been writing about money (credit) in a big way over here.

しかし、実は、これらの知識の根っこは、実はこれらのアニメだったりします。

But in fact, the root of all this knowledge is actually these animations.

- まおゆう魔王勇者

- Maou-Yu The Demon King & hero

- 狼と香辛料

- Wolf and Spice

-----

私は、これらのアニメから貨幣について学んだ ―― のではありません。

I did not learn about money from these animations.

逆です。

Reverse.

これらのアニメについて、以前も言及してきましたが、私には、よく分からなかったのですよ ――

I've mentioned these animations before, however, I didn't really understand

アニメで登場してくる、複数通貨の役割や機能が。

the roles and functions of the multiple currencies that appear in the anime.

以前から、「少くとも、アニメの主人公が語る内容くらいはちゃんと理解したいなぁ」と思っていたところに、ビットコインやブロックチェーンのネタが来たので、勉強させて貰っているのです。

I've been thinking for a while that I'd like to understand at least what the main character of an anime is talking about. The bitcoin and blockchain stuff came to me, so I am learning about them.

-----

でも、まだ全然「遠い」です。

But it's still totally "far away".

貨幣とか経済とか言うものは、計算できない人間の心のメカニズムが、非線形に、または不条理に関わってきて、全く不可解この上もありません。

Money and economics are completely inexplicable because of the non-linear and absurd involvement of the mechanisms of the human mind, which cannot be calculated.

だから、私は、「人間」をシミュレーションしたいのです。

That's why I want to simulate a "human".

こんなちゃちなペルソナではなく、もっと、複雑で、動的で、理不尽で、不条理な、そんな人間のエージェントオブジェクトを、自分のパソコンの中に作り出したいのです。

I want to create a more complex, dynamic, unreasonable, and absurd human agent object in my computer, rather than this tiny persona.

("人工知能"などと称呼するような怪しいものではなくて、オブジェクト指向プログラミングによるエージェントです)

(It's not something dubious called "artificial intelligence," but an agent based on object-oriented programming.)

ただ、この研究、結構な予算が必要そうな上、その投資を回収するモデルが、どうにも思いつかないんですよね ―― 色々、姑息なことはやっていますけどね。

But this research is going to require a lot of money, and I can't think of any model to recover that investment. I'm doing a lot of makeshift, though.

2020/12,江端さんの忘備録

(続く)

(To be continued)

私は、子どもたちに、常に「7~8割で切り上げよ。決して100%を目指すな」と言い聞かせてきました。

I have said to my daughters that "Never aim '100%". satisfy '70%-80%' again and again.

これは、

This means

(1)0%-80%に持ち込む時間と、

(1)spended time from 0% to 80%

(2)80%-95%に持ち込む時間と、

(2)spended time from 80% to 95%

(3)95%-100%に持ち込む時間と、が

(3)spended time from 95% to 100%

概ね同じになる、という、数理統計の常識です。

are almost same, and this is common sence of mathematical statistics.

「ものごとは"7~8割"で撤収して、別のことを沢山やればいい」と思っています。

I think "after satifying '70%-80%', do many what I want to do"

『極める』ことを主張している人は、成功した人だけです。

A person who says "making you a master is meaningful" is always a success.

『極めた上に、成功もしない人』の方が圧倒的多数であるという事実を無視して、『極める』を素晴しいものと言い続ける、その「成功者」なる人の言葉に耳を傾けない方が良いと思います。

I think that we should not hear the voices of "making you a master is meaningful " of the success, because the success ignores enoumous numbers of "unsuccessful master".

-----

このように、"100%"は、"遅い"、"辛い"、"不味い"の三拍子です。目指すべきものではありません。

Thus, "100%" is a combination of "slow","hard" and "discomfort". I think we shold not aim to that.

"100%"とは、「一人で"楽しい"を続けていたら、気がついたらなっていた」もの、と、思っています。

I also think that "100%" is a just result to "keep enjoying alone".

-----

つまり、

In conclusion,

■「すきやき食べ放題」は、"一人"で行くものであり、

- my daughter should go to "all-you-can-eat sukiyaki" alone.

■「郵送されてきた贈答用の高級柿」は、"一人部屋"に持ち込んでおく

- my wife should get high-grade persimmons in her room

のが正解、ということです。

These are correct answers.

2020/12,江端さんの忘備録

次女は、「良く煮えた牛肉」が好きです。

My junior daughter likes "well-cooked beef.

嫁さんは、「熟れた柿」が好きです。

My wife likes "ripe persimmons".

で、結局、彼女らは「すきやき食べ放題の肉の取り合い」や「郵送されてきた贈答用の高級柿の争奪戦」に敗北する運命にあります。

So, in the end, they are doomed to be defeated in the "battle for the meat of the all-you-can-eat sukiyaki" or the "battle for the high-grade persimmons that were sent to them as gifts.

つまり、「時間をかけてじっくり待つ」という戦略は、「手に入るものから、とっとと手に入れる」という戦略の前には、勝てないのです。

In other words, the strategy of "take your time and wait" is no match for the strategy of "take what you can get it fast".

-----

私の連載コラムの為に許さえる勉強期間は、1ヶ月未満です(執筆に6営業日くらい必要)。

The study period I allow for my series of columns is less than a month (I need about 6 working days to write).

ですので、その分野について徹底的に勉強している人から見ると、私のコラムの内容は、

So, from someone who has studied the subject thoroughly, the content of my column may seem

(1)情報の精度が低く、

(1) The accuracy of the information is low.

(2)検討分野の項目が少なく、

(2) The number of items in the study area is limited.

(3)非常に底の浅い考察になっている

(3) The content of the discussion is thin.

かもしれません ―― というか、まあ、確実にそうでしょう。

They will be for sure.

つまり、その分野に10年以上もかけて検討している人に勝るような内容にならない ―― というのは良く分かっています。

In other words, my column is not as good as those who have spent 10 years or more examining the field -- I know that well.

よく分かっているのですが ――

I know exactly what I'm doing. I also think that

『岩波、中公、講談、ちくま、あたりの本の多く(×全部)は、あんなに読み難い上に、楽しくもないんだろう?』

"I wonder why so many (x all) books of Iwanami, Chuko, Kodan, Chikuma are so hard to read and so unenjoyable?"

と思っています。

私が、3回以上読み直ししなければ分からない本というのは、"知のキャリア"としては失敗しているのじゃないかとさえ思います ―― もっとも「私にとっては」という意味で、ですが。

I think any book that I have to reread more than three times to understand is a failure, just for me.

まあ、これは「受容体としての私」が、無知蒙昧(むちもうまい)で、浅学菲才(せんがくひさい)、である、ということでいいです。

Well, let's just say that I, as a receptor, am ignorant, illiterate, and uneducated.

いずれにしても、私、「岩波、中公、講談、ちくま、あたりの本を理解するために、全力を尽す」などということに、1mmの価値も見い出せません。

Anyway, I don't find even a millimeter of value in "doing my best to understand books from Iwanami, Chuko, Kodan, Chikuma, and so on.

私なら、簡単で、分かりやすい本を、10冊以上、楽しく読む方を選びます。

I would choose to read 10 or more simple, easy to understand books for fun.

『辛い読書』なんぞ、人生最低にして最悪の時間の使い方です。

"Hard reading" is the worst use of time in life.

(続く)

(To be continued)