未分類

WindowsのDockerでFlutter for Web(開発環境構築)

https://qiita.com/toshibe/items/e05ebe152e579ad39a58

で、色々問題がでてくるけど、

Flutter

https://qiita.com/tiri/items/5ad8d173df2c3823a265

の記載の内容で対応できました。

動かし方

1. Dockerfileからイメージを作成する

docker-compose build

 2. イメージからコンテナを作成し、起動する

docker-compose up -d

 3. 起動したコンテナに入る

docker exec -it flutter bash

4. フラッターアプリを作成する

cd workspace
flutter create .

5. サーバーを立ち上げる

flutter run -d web-server --web-port=${WEB_SERVER_PORT} --web-hostname 0.0.0.0

さて、これでサンプルは動かせたんだけど、さて、コーディングはどうやるのかな?


docker exec -it flutter bash でシェルに入った後、

root@0c0fd167601e:/usr/local# ls
Android bin etc flutter games include lib man sbin share src workspace
root@0c0fd167601e:/usr/local# cd workspace/
root@0c0fd167601e:/usr/local/workspace# ls
README.md android ios linux pubspec.lock test windows
analysis_options.yaml build lib macos pubspec.yaml web workspace.iml
root@0c0fd167601e:/usr/local/workspace# cd test
root@0c0fd167601e:/usr/local/workspace/test# ls
widget_test.dart ← これがターゲットのソース(だと思う)

root@0c0fd167601e:/usr/local/workspace/test#more widget_test.dart

 

// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility in the flutter_test package. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:workspace/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(const MyApp());

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
}

という記載が見える。
とりあえず、ここを書き換えれば、最初のアプリが作れるのかな、とアタリを付けています。

https://docs.flutter.dev/get-started/test-drive

ざっくり、翻訳してみておく

Test drive

What you'll learn

#

  1. How to create a new Flutter app from a sample template.
    サンプルテンプレートから新しいFlutterアプリを作成する方法。
  2. How to run the new Flutter app.
    新しいFlutterアプリの実行方法。
  3. How to use "hot reload" after you make changes to the app.
    アプリに変更を加えた後に「ホットリロード」を使用する方法。

Guide depends on your IDE
ガイドはあなたのIDEに依存します。

#

These tasks depend on which integrated development environment (IDE) you use.
これらの作業は、どの統合開発環境(IDE)を使うかによって異なる。

  • Option 1 explains how to code with Visual Studio Code and its Flutter extension.
    オプション1では、Visual Studio CodeとそのFlutter拡張機能を使ってコーディングする方法を説明する。
  • Option 2 explains how to code with Android Studio or IntelliJ IDEA with its Flutter plugin.
    オプション2では、Android StudioまたはIntelliJ IDEAのFlutterプラグインを使ってコーディングする方法を説明する。Flutter supports IntelliJ IDEA Community, Educational, and Ultimate editions.
    FlutterはIntelliJ IDEA Community版、Educational版、Ultimate版をサポートしています。
  • Option 3 explains how to code with an editor of your choice and use the terminal to compile and debug your code.
    オプション3では、好きなエディターを使ってコードを書き、ターミナルを使ってコンパイルとデバッグを行う方法を説明する。

Choose your IDE
IDEを選ぶ

#

Select your preferred IDE for Flutter apps.
Flutterアプリに適したIDEを選択する。

Create your sample Flutter app

#

  1. Open the Command Palette.
    コマンドパレットを開く。Go to View > Command Palette or press Shift + P.
    表示 > コマンドパレットに移動するか、+ Shift + Pを押します。
  2. Type flutter
    fluter
    とタイプする
  3. Select the Flutter: New Project.
    Flutter: New Projectを選択する
  4. When prompted for Which Flutter Project, select Application.
    どのFlutterプロジェクトかを聞かれたら、Applicationを選択する。
  5. Create or select the parent directory for the new project folder.
    新しいプロジェクトフォルダの親ディレクトリを作成または選択します。
  6. When prompted for a Project Name, enter test_drive.
    プロジェクト名の入力を求められたら、test_driveと入力する。
  7. Press Enter.
    Enterを押す。
  8. Wait for project creation to complete.
    プロジェクトの作成が完了するまで待つ。
  9. Open the lib directory, then the main.dart.
    libディレクトリを開き、次にmain.dartを開く。To learn what each code block does, check out the comments in that Dart file.
    各コードブロックが何をするのかを知るには、そのDartファイルのコメントをチェックしてほしい。

The previous commands create a Flutter project directory called test_drive that contains a simple demo app that uses Material Components.
先ほどのコマンドでtest_driveというFlutterプロジェクトディレクトリが作成され、Material Componentsを使ったシンプルなデモアプリが含まれる。

Run your sample Flutter app
サンプルのFlutterアプリを実行する

#

Run your example application on your desktop platform, in the Chrome web browser, in an iOS simulator, or Android emulator.
デスクトップ・プラットフォーム、Chromeウェブ・ブラウザ、iOSシミュレータ、Androidエミュレータでサンプル・アプリケーションを実行してください。

  1. Open the Command Palette.
    コマンドパレットを開く。Go to View > Command Palette or press Shift + P.
  2. Type flutter
    fluterとタイプする
  3. Select the Flutter: Select Device.
    Flutter: New Projectを選択するIf no devices are running, this command prompts you to enable a device.
    実行中のデバイスがない場合、このコマンドはデバイスを有効にするよう促します。
  4. Select a target device from Select Device prompt.
    Select Deviceプロンプトからターゲットデバイスを選択します。
  5. After you select a target, start the app. Go to Run > Start Debugging or press F5.
    ターゲットを選択したら、アプリを起動する。Run > Start Debuggingに進むか、F5を押す。
  6. Wait for the app to launch.
    アプリが起動するのを待つ。You can watch the launch progress in the Debug Console view.
    起動の進行状況は、デバッグコンソールビューで確認できます。

After the app build completes, your device displays your app.
アプリのビルドが完了すると、デバイスにアプリが表示されます。

Starter app on macOS
Starter app
スターターアプリ

Try hot reload
ホットリロードを試す

#

Flutter offers a fast development cycle with Stateful Hot Reload, the ability to reload the code of a live running app without restarting or losing app state.
Flutterは、ステートフルホットリロード(Stateful Hot Reload)、つまりアプリを再起動したりアプリの状態を失ったりすることなく、実行中のアプリのコードをリロードする機能によって、高速な開発サイクルを提供します。

You can change your app source code, run the hot reload command in VS Code, and see the change in your target device.
アプリのソースコードを変更し、VS Codeでホット・リロード・コマンドを実行すれば、ターゲット・デバイスで変更を確認できる。

  1. Open lib/main.dart.
    lib/main.dartを開く。
  2. Change the word pushed to clicked in the following string. It is on line 109 of the main.dart file as of this writing.
    以下の文字列のpushedをclickedに変更する。これを書いている時点では、main.dartファイルの109行目にある。

    Original New
    'You have pushed the button this many times:' , 'You have clicked the button this many times:' ,
  3. Save your changes: invoke Save All, or click Hot Reload lightning bolt .

Your app updates the string as you watch.
変更を保存する:すべて保存を実行するか、ホットリロードをクリックします。

Starter app after hot reload on macOS
Starter app after hot reload

2024,江端さんの忘備録

松本人志さんの事件について、私は、今後も、その事件そのものについては、コメントはしないつもりです。

I will not comment on the case of Mr. Matsumoto's case itself.

私は、1981年の「ロス疑惑事件」を覚えているからです。

Because I remember the "Los scandal" of 1981.

この事件、当時も今も、私には整理できないほど複雑で、今も理解できておりません。

This case was then and still is too complicated for me to understand.

興味のある人は、こちらをどうぞ。

For those interested, click here.

当時、私はティーンエイジャでしたが、この事件にあまり関心はありませんでした。

I was a teenager then and did not pay much attention to the case.

ただ、世間とマスコミの加熱ぶりは、よく覚えております。

However, I remember how heated the public and the media were.

-----

私が、今でもはっきり覚えているのが、

I still remember it clearly,

「その事件で、その人物を呼び捨てにして、散々犯人扱いしてきた週刊誌が、最高裁での無罪の確定後に、『さん』づけで呼び、そして、『犯人扱いされてきたことに』に『同情的』な記事を掲載した」

The weekly magazine, which had called the person out in the case and treated him like a criminal, called him "Mr." after his acquittal by the Supreme Court and published an article that was "sympathetic" to "what he experimented treatment as a criminal."

ということです。

確か、"女性"という単語を含む週刊誌だったと思います。

It was a weekly magazine that included the word "women."

私は、その週刊誌に対して、"無知性"、"無能力"、"無責任"、"無教養"、"無信念"、"無品性"、"無羞恥" ―― と、ありとあらゆる罵詈雑言を付くしても、なお足りないと思えるほど罵倒したことを覚えています。

I remember cursing the weekly magazine for its "ignorance," "incompetence," "irresponsibility," "illiteracy," "unbelief," "lack of character," "shamelessness," and a host of other abuses that would have been inadequate.

今も、その気持ちを消し去ることはできず、その手の週刊誌を読んでいる人を見ると(以下省略)。

Even now, I can't erase that feeling when I see people reading those weekly magazines (Omitted below).

-----

私も、物書きの端くれとして、批判や非難を受けることがあります。

As a writer, I am also subject to criticism and condemnation.

それは仕方がないことと思っていますが、少なくとも「"無羞恥"と罵倒されることはしないようにしよう」と思っています。

I don't blame them; however, I try not to be abused as "shameless.

間違ったことを書いてしまって、それが間違っていたと自分が納得したなら、『私が、間違っていました。ごめんなさい』とちゃんと言えるように心掛け、これからも、そうしたいと思っています。

If I write something wrong and am convinced it is wrong, I can say, 'I was wrong. I am sorry,' and I will continue to do so.

というか、私にとって、「"私"が正しいかどうか」は比較的どーでもいいのです。

It is relatively unimportant to me whether "I" am right or not.

私は、自分が間違っていることに納得できれば、3秒以内に考え方を変えることができるように訓練された、研究員&エンジニアですから。

I am a researcher & engineer trained to change my mind within 3 seconds if I am convinced I am wrong.

訓練されたエンジニア/研究員は、自分が「間違っていること」を前提に行動します。

未分類

https://suumo.jp/article/oyakudachi/oyaku/chintai/fr_room/tsuukinjikan_heikin/

https://toyokeizai.net/articles/-/140017?display=b

https://prtimes.jp/main/html/rd/p/000000286.000000624.html

2024,江端さんの忘備録

4月は、キックオフミーティングの季節ですね。

April is the season for kick-off meetings.

私、これまで何度かキックオフミーティングの司会者をやったことがあります。

I have moderated several kick-off meetings in my career.

このようなミーティングで良く見られるのが「質問が出てこない」という現象です。

A common phenomenon in such meetings is the "no questions asked."

しかし、幹部の出席するミーティングで「質問が出てこない」のは『当たり前』じゃないですか?

But isn't it 'normal' that 'no questions are asked' at meetings attended by executives?

いらんこと言って、幹部から目をつけられるのは怖いです。

I am afraid of saying something terrible and getting noticed by the executives.

特に、私について言えば、『的外れな質問をして、場を白けさせる』ことをやらかしたことがあり、今でもトラウマになっています。

As for me in particular, I once asked a question that was so off the mark that it made the place feel whitewashed, and I'm still traumatized by it.

事実、過去、私はマズい質問をして、幹部からマークされたという"実績"があります。

I have a "track record" of being marked by executives for asking wrong questions in the past.

まあ、上司や会社の関係者の出席してきない国際学会では、私は「質問製造機」に変貌するのですけどね。

Well, at international conferences not attended by my boss or company officials, I turn into a "question-making machine.

『見苦しい英語であろうが、そんなこと構っていられるか』と振り切れるくらい、正直、今の私は追い込まれているのです。

-----

さて、私が司会者の時に採用したのが、「負のクジ」です。

Now, I employed a "negative lottery" when I was a moderator.

どこの世界に「小説が長い」と文句を言う人がいますか?

(1)私は、5秒以内に質問が出なければ、課長をランダムに指名すると宣言しておく。

(1) At the start of the meeting, I will declare that if no questions are asked within 5 seconds, I will randomly appoint a section head.

(2)私は、課長を指名してする。指名された課長は質問するか、あるいは、自分の部下を再指定できる(たらい回す)

(2) I shall nominate a section chief. The nominated section chief can ask questions or reassign subordinates.

(3)再指定された部下は、質問をしなければならない

(3) The reassigned subordinate must ask questions

この「負のクジ」によって、「全員が質問できるネタを考えながらミーティングに参加しなければならない」という緊張感で満たされることになりました。

This "negative lottery" filled me with a sense of urgency. I had to attend the meeting, thinking of a story that everyone could ask questions about.

私の後任者は、この方法を継承したようです(今年がどうなっているかは不明です)。

My successor seems to have inherited this method (not sure how this year is going).

-----

この方法のメリットは、

The advantages of this method are,

(1)場が沈黙するのを回避できる

(1) Avoids silencing the field.

(2)指名された人間が、変な質問をしても『仕方がない』と割り切れる気分になれる

(2) The nominated person can feel like they can 'just go along with it' even if they ask strange questions.

ということです(ミーティングにゲーム感覚を取り込める)。

This system brings a sense of game into the meeting.

「幹部が参加しているミーティングで、下っ端が進んで質問はしない」は当然なのですが、この当然を前提とする考え方が欠けているように思えます。

It is evident that "a low-level person will not willingly ask questions at a meeting attended by executives." Still, it seems to me that the concept of assuming this obviousness is lacking.

適度な"強制"と"諦観"を入れることで、ミーティングを適度に運行させることは可能と思います。

It is possible to keep meetings running at a moderate level by adding just the right amount of "compulsion" and "resignation.

-----

ただ、一つ誤解して頂きたくないことは、私は、ミーティングを活性化させ、組織に貢献するという気持ちは、ほとんどなく、

One thing I don't want you to misunderstand, however, is that I have little desire to activate the meeting and contribute to the organization. This is just a 

―― 私が与えられたミッションを完遂するために、私が捻り出した方法

"method I have devised to complete the mission I have been given."

ということです。

忘れないでください ―― 私は「会社の犬」です。

2024,江端さんの忘備録

私は、もの書きの一人であるという自覚はありますが、だからといって、高い読解力を持っている訳ではないようです。

I know that I am one of those people who write things, but that does not mean I am a high reader.

次女の持っている「SPI(*)問題集」なるものの本に目を通していたですが、「(日本語)長文解読」という項を試してみて驚きました。

I was looking through a book that my second daughter has called "SPI(*) Question Book," and I was surprised when I tried the section called "(Japanese) Long Sentence Decoding.

(*)SPIとは、Synthetic Personality Inventory(総合適性検査)の略で、1974年に個人の資質をベースとした採用選考を目的として開発された適性検査で、一般社会人として必要な性格や能力の測定を目的としているテスト

(*)SPI stands for Synthetic Personality Inventory, an aptitude test developed in 1974 for employment selection based on personal qualities to measure the personality and abilities required of ordinary working adults.

エンジニアの私から見れば、

From my perspective as an engineer,

―― 壮絶に酷い文章

"a spectacularly bad sentence."

と、呟かずにはいられない文章でした。

I couldn't help but mutter to myself.

-----

例えば、長文問題の、

For example, of long-form questions,

『全体として見た言語学は、いまだ生物的に共有されることばというわくの外に立つことを望んではいない』

"Linguistics taken as a whole is still unwilling to stand outside the web of biologically shared language."

の意味を問う設問がありました。

There was a question asking the meaning of the above sentence.

設問以前に、このフレーズ、日本語として意味をなしているのでしょうか?

Before the question, does this phrase make sense in Japanese?

私なら、素直に『言語学では、生物学的な側面や共通性に焦点を当てて、言語を研究する』と書きます。

I would honestly write, 'In linguistics, they study language by focusing on biological aspects and commonalities.

このように書かなければ、私は上司に怒鳴りつけられただろうし、私も部下を怒鳴りつけるだろう、と思います。

If I had not written it this way, my supervisor would have yelled at me, and I would have yelled at my subordinates.

-----

テクニカルライティングで洗脳されているエンジニア(私のことです)は、

I am an engineer (that's me) who believes technical writing is the best. Therefore, I always consider the following.

■明確で正確な言葉遣い

- Clear and accurate language

■図表やグラフの効果的な利用

- Effective use of charts and graphs

■段落構造の整理

- Organize paragraph structure

を常に考慮しますし、

■ターゲット読者や文書の目的に合わせた、適切なスタイルやフォーマットの採用

- Adoption of appropriate style and formatting to suit the target audience and purpose of the document

にも気を使います。

そこに共通する基本原則は、

What are the basic principles common to all of them is

『わからない文章の責任は、"100%"書き手にある』

"The writer is 100% responsible for the unreadable text."

であり、そこには、一貫した"読者第一主義"があります。

There is a consistent "reader-first" principle.

―― 『読みやすい文章』っていうのは、こういうものさ

-----

まあ、かくいう私も、常に、"テクニカルライティング"や"読者第一主義"をやっている訳ではありません。

I am not always a "technical writer" or a "reader-first" person.

コラムを書く第一の目的は、「私が楽しく書くこと」であり、その後、そのコラムを「私が楽しく読むこと」です。

My primary purpose in writing a column is that I enjoy writing it, and then I enjoy reading it.

私のコラムにおいては、読者は、常に二の次です。

In my columns, the readers are always secondary.

まあ、『このようなスタンスが、物書きとしては、どうか?』と問われると、問題があるとは思っています。

Well, 'How is this stance for a writer?' I think it is problematic.

-----

世の中全部が、テクニカルライティングになったら、文学は成り立たないし、学問の分野も味けなくなるだろうとは思います。

If the world were to become technical writing, literature would not be possible, and academic fields would lose flavor.

そもそも、SPIのこういう設問自体が成立しなくなる、とは思います。

First, I think this kind of SPI question will be invalid.

ただ、

However,

『全体として見た言語学は、いまだ生物的に共有されることばというわくの外に立つことを望んではいない』

"Linguistics taken as a whole is still unwilling to stand outside the web of biologically shared language."

というフレーズを理解できない人は、自分の国語力が低いと思わなくて良いと思います。

If you do not understand the above phrases, you need not think your language skills are poor.

少なくとも、私は分かりませんでした ―― 私たちは同志です。

At least, I didn't understand -- we are comrades.

-----

ただ、SPIの他の分野、算数(数学)や、英語(単語)については、『妥当な内容だな』と思えました。

However, it seemed reasonable for the other areas of the SPI, arithmetic (math) and English (vocabulary).

私は、設問の内容を理解することができ、解答を導くことができたからです。

I was able to understand the questions and derive the answers.

そのように考えると、『私の国語力だけが極端に低い』という可能性も出てきます。

When I think about it that way, the possibility arises that 'only my language skills are deficient.'

という訳で、この話題については、ここで打ち切りたいと思います。

Therefore, I would like to discontinue this topic here.

もし、私が悪霊になって、人を祟るようになったとしても、この呪文の内容では、私を除霊することはできないと思います。

2024,江端さんの忘備録

私は、自分自身が「組織の問題児」であるという自覚があります。

I know I am a "problem child" of the organization.

そもそも、私には、組織を愛するという考え方(愛社精神とか、愛校心とか、地元愛とか、愛国心)が、希薄です。

To begin with, I do not have a strong sense of love for the organization (company spirit, school spirit, local love, patriotism).

「ない」という訳ではないと思うのですが、それに対する強い愛は「弱い」、という気がします。

I don't think it's "no," but I feel intense love for it is "weak."

組織への帰属感というのは、社会生活における基盤でもあるので、この帰属感が薄いということは、ある意味、「組織における問題児」といっても、過言ではないような気がします。

Since a sense of belonging to an organization is the foundation of social life, I think that it is not too much to say that those who lack this sense of belonging are, in a sense, "problem children in the organization.

でも、まあ、誰も彼も、方向や大きさの違いはあれども、組織の問題児であると思います。

But, well, I think everyone is a problem child of the organization, albeit in different directions and sizes.

-----

最近、というか、ずっと昔から思ってきたのですが、私は、その「問題児を"直す(または"潰す")装置」として使われることが多いようです。

Lately, or so I have thought for a long time, I have often been used as that "device to "fix" (or "crush") problem children.

ロジック(屁理屈)と暴力(権力)を使って、『問題発生を抑止する装置』です。

It is a "device to deter the occurrence of problems" using logic (quibble) and violence (power).

「毒をもって毒を制する」の、完璧な実施例です。

This is a perfect example of "conquering poison with poison.

まあ、年齢を取っているので『睨み』はききますし、脅しとすかしの使い分けもやります ―― ただ、面倒くさいですけどね。

今でも、会社で安全衛生委員として、社員の職場環境を、会社の規定されたフォーマット("5S"なるルール等)に押しつけるように弾圧を続けています。

I'm getting older, so I can 'glare' and use threats and scolding, even if it's just a pain.

『会社も他人もどうなろうと知ったことか』をベースとする私の価値観において、自分の中の暴力装置を動かすのは、それなりにエネルギーがいるのです。

In my value system, "I don't care what happens to the company or others," it takes some energy to move the violent device inside me.

でも、ご存知の通り、私は「会社の犬」ですから、ミッションが与えられれば、それを完遂するように動くのです。

忘れないでください ―― 私は「会社の犬」です。

But as you know, I am a "company dog," so when given a mission, I work to complete it.

-----

新たに与えられるミッションを聞いた瞬間に、「組織の狙い」が見えてしまうことが、『嫌だなぁ』とも『面倒くさいなぁ』とも思います。

I both 'hate' and 'find it troublesome' that the moment I hear about a newly given mission, I can see the 'aims of the organization.'

もうそろそろ『縁側で、日向ぼっこしながら、お茶をすするような仕事にしてもらってもいい頃だ』とも思うのですが、それはそれで、辛いだろうな、とも思います。

I think it's about time for me to get a job where I can sip tea in the sun on the porch," but I also think that would be harsh.

シニアも、シニアなりに、日々、悩ましいのです。

Seniors, in their own way, are also troubled daily.

2024,江端さんの技術メモ

背景

現在、tomioka_db_cを中心にコーディングを展開していますが、とみおかーとのルートの入っていない(バスのルートだけが入っている)地図が必要となりました。

課題

JSONからとみおかーとのルートを取り除いて地図を作り直すこともできますが、ノード番号ずれが発生するという問題が生じます

課題を解決する手段

つまるところ、とみおかーとのルート情報だけを、tomioka_db_cから取り除ければいいのです。

実施例

まず、

ebata@DESKTOP-P6KREM0 MINGW64 ~
$ createdb -U postgres -h 192.168.0.23 -p 15432 tomioka_db_c_trial
Password:
ebata@DESKTOP-P6KREM0 MINGW64 ~
$ pg_dump -U postgres -h 192.168.0.23 -p 15432 -Ft tomioka_db_c | pg_restore -U postgres -h 192.168.0.23 -p 15432 -d tomioka_db_c_trial
Password:
Password:
で、実験用のtomioka_db_c_trialを作成しました。
QGISで除去手術の状況を把握する為に、tomioka_db_c_trialを見える状態にしました。

現時点で分かっていること

(1)とみおかーとルート用のnode番号は、1~181の連番である。

(2)とみおかーとルート用のwayには、"TomioCart"の属性情報が入っている

(3)これを、単に、

public | ways | table | postgres
public | ways_vertices_pgr | table | postgres
からDeleteすれば良いのかどうかは不明
ですが、やってみるしかない。

nodeの削除(最初のトライアル) →失敗

DELETE FROM ways_vertices_pgr WHERE id >= 1 AND id <= 181;

すると、こんなメッセージを受けて、失敗します。
tomioka_db_c_trial=# DELETE FROM ways_vertices_pgr WHERE id >= 1 AND id <= 181;
ERROR: update or delete on table "ways_vertices_pgr" violates foreign key constraint "ways_source_fkey" on table "ways"
DETAIL: Key (id)=(1) is still referenced from table "ways".
"エラーメッセージによると、"ways_vertices_pgr" テーブルの "id" 列が "ways" テーブルの "ways_source_fkey" 外部キー制約によって参照されていることが原因のようです。
削除操作を行う前に、この外部キー制約を解除する必要があります。"
とのことのようなので、最初はwaysの削除に変更をします。

wayの削除(最初のトライアル)

DELETE FROM ways WHERE name = 'TomioCart';
"DELETE 184"
とこちらはサクっと消えました。

あれ? TomioCartが消えていない?

QGISからエントリーを削除して、再度読み込みをしたら

ちゃんとwayが消えていました。

nodeの削除(2回目のトライアル) →やはり失敗

chatGPTに相談したら、以下のような指示を受けました。

ALTER TABLE ways DROP CONSTRAINT ways_source_fkey;

しかし、
tomioka_db_c_trial-# ALTER TABLE ways DROP CONSTRAINT ways_source_fkey; ERROR: syntax error at or near "ALTER" LINE 2: ALTER TABLE ways DROP CONSTRAINT ways_source_fkey; と言われました

SELECT constraint_name, table_name, column_name, referenced_table_name, referenced_column_name
FROM information_schema.key_column_usage
WHERE table_name = 'ways_vertices_pgr';

ここから手をやきました。
多分、まだ1~181のノードを参照しているwaysのエントリーが残っているので、消せないのだろうと推測しました。

で、まずは、sourceに21番を持っているwayのエントリーを探してみました。

tomioka_db_c_trial=# select * from ways where source = 21;
gid | osm_id | tag_id | length | length_m | name | source | target | source_osm | target_osm | cost | reverse_cost | cost_s | reverse_cost_s | rule | one_way | oneway | x1 | y1 | x2 | y2 | maxspeed_forward | maxspeed_backward | priority | the_geom
------+--------+--------+------------------------+-------------------+------+--------+--------+------------+------------+------------------------+------------------------+--------------------+--------------------+------+---------+---------+-----------------+----------------+-------------+------------+------------------+-------------------+----------+--------------------------------------------------------------------------------------------
1258 | 104020 | 112 | 3.9727662820583996e-05 | 3.612272689729353 | | 21 | 899 | 102079 | 2958989369 | 3.9727662820583996e-05 | 3.9727662820583996e-05 | 0.2600836336605134 | 0.2600836336605134 | | 0 | UNKNOWN | 139.62560711503 | 35.36760885871 | 139.6256468 | 35.3676107 | 50 | 50 | 2.5 | 0102000020E6100000020000005C6636F9047461408EF09CCE0DAF41401B1B704C0574614070140FDE0DAF4140
(1 row)

で、このエントリーを消去しました。

tomioka_db_c_trial=# DELETE FROM ways WHERE source = 21;
DELETE 1
tomioka_db_c_trial=# select * from ways where osm_id = 102058;
gid | osm_id | tag_id | length | length_m | name | source | target | source_osm | target_osm | cost | reverse_cost | cost_s | reverse_cost_s | rule | one_way | oneway | x1 | y1 | x2 | y2 | maxspeed_forward | maxspeed_backward | priority | the_geom
-----+--------+--------+--------+----------+------+--------+--------+------------+------------+------+--------------+--------+----------------+------+---------+--------+----+----+----+----+------------------+-------------------+----------+----------
(0 rows)

たしかに消えています。

で、今度は、ways_vertices_pgr の方を消してみました

tomioka_db_c_trial=# DELETE FROM ways_vertices_pgr WHERE id = 21;
DELETE 1
tomioka_db_c_trial=# SELECT * FROM ways_vertices_pgr;
id | osm_id | eout | lon | lat | cnt | chk | ein | the_geom
------+------------+------+--------------+-------------+-----+-----+-----+----------------------------------------------------
(前略)
20 | 102078 | | 139.62563228 | 35.36755641 | | | | 0101000020E6100000C1D1FD2D05746140C4EAA8160CAF4140
22 | 102080 | | 139.62561830 | 35.36767727 | | | | 0101000020E61000000979AB1005746140ABEC760C10AF4140
(後略)

あっさり消えていました。

 

ということは、source またはtargetが 1~181に関するwayを全部消せば、ways_vertices_pgr の方も消せるはず

ちょっと怖かったけどやってみることにしました。

tomioka_db_c_trial=# DELETE FROM ways WHERE source >= 1 and source <=181;
DELETE 96

tomioka_db_c_trial=# DELETE FROM ways WHERE target >= 1 and target <=181;
DELETE 81

おお! 完全にwayが消えました。

 

では、ふたたび
DELETE FROM ways_vertices_pgr WHERE id >= 1 AND id <= 181;
を実施します

tomioka_db_c_trial=# DELETE FROM ways_vertices_pgr WHERE id >= 1 AND id <= 181;
DELETE 180

やっと消えました

tomioka_db_c_trial=# SELECT * FROM ways_vertices_pgr;
id | osm_id | eout | lon | lat | cnt | chk | ein | the_geom
------+------------+------+--------------+-------------+-----+-----+-----+----------------------------------------------------
182 | 102254 | | 139.62956343 | 35.36605302 | | | | 0101000020E61000007690336225746140082C51D3DAAE4140
183 | 102255 | | 139.62952386 | 35.36602637 | | | | 0101000020E6100000F1EB3A0F257461401A07C7F3D9AE4140
184 | 102256 | | 139.62949515 | 35.36599335 | | | | 0101000020E6100000F65C05D3247461403A74BFDED8AE4140

総括

postgresqlのpostGISのDBから新規に作成したnodeとwayを削除するには、以下の手順を踏むこと
(Step.1) waysから、新規node,wayに関する全部エントリーを削除すること。今回の場合は、以下の3つ

DELETE FROM ways WHERE name = 'TomioCart';
DELETE FROM ways WHERE source >= 1 and source <=181;
DELETE FROM ways WHERE target >= 1 and target <=181;

(Step.2)
ways_vertices_pgrからターゲットのNode情報を削除すること。今回の場合は以下の1つ。

DELETE FROM ways_vertices_pgr WHERE id >= 1 AND id <= 181;

(Step.3)
最後に、tomioka_db_c_trial を、tomioka_db_d に変更する(コピーしてから、tomioka_db_c_trialを消すこと)

ebata@DESKTOP-P6KREM0 MINGW64 ~
$ createdb -U postgres -h 192.168.0.23 -p 15432 tomioka_db_d
Password:
ebata@DESKTOP-P6KREM0 MINGW64 ~
$ pg_dump -U postgres -h 192.168.0.23 -p 15432 -Ft tomioka_db_trial | pg_restore -U postgres -h 192.168.0.23 -p 15432 -d tomioka_db_d
Password:
Password:
drop database tomioka_db_c_trial;

2024,江端さんの忘備録

私は、娘たちに、『(スマホなどの)ゲームをしろ』とも『ゲームをするな』とも言いませんでした。

I did not tell my daughters to 'play games (such as on their phones)' or 'don't play games.

しかし、世間の多くの保護者が頭を抱えている『子どもがゲームから離れない』という現象に出会ったことがありません。

However, I have never encountered the phenomenon many parents are annoyed with: 'My child won't leave the game.

私は、娘たちに『本を読め』とも『本を読むな』とも言いませんでした。

I did not tell my daughters to 'read books' or 'don't read books.

でも、彼女らは、普通に本を読んでいるみたいです。

But they seem to be reading books just fine.

私は、娘たちに『勉強しろ』とも言いませんでした。

I didn't even tell my daughters to 'study.

優秀な成績だったのかどうかは知りませんが、卒業しているようなので、それなりにやっていたのだと思います。

I don't know if they excelled, but they seem to have graduated, so I think they did reasonably well.

私は、娘たちに、『英語はやっておいた方がいいよ』とは言っていました。

I had told my daughters, 'You might do English.

しかし、二人の娘たちから「少なくとも『就活』に英語は全く必要なかった」と総括されています。

However, my two daughters have summed it up by saying, "At least we didn't need English at all for 'job hunting.

-----

実際に、私が「命懸け」で英語の勉強始めたのは、30歳を超えてからです。文字通り、命がかかっていたので。

It wasn't until I was over 30 that I started studying English "with my life on the line." My life was on the line.

海外での仕事は何とかなりました。今も、何とかしています。

I managed to work abroad. I am still managing to do so.

「英語に愛されないエンジニア」のための新行動論

ちなみに、『幼少のころから始めないと、英語が使えない』というのは、私が知る限り、根拠となるデータがありません(根拠なしで、そう主張しているのは、幼児向け英語教材の会社だけです)。

Incidentally, as far as I know, there is no data to support the claim that 'if you don't start at an early age, you can't use English' (the only company that claims so, without evidence, is the company that produces English materials for young children).

根拠となるデータや論文があれば、私に教えて下さい。私がエンジアリングアプローチで、きちんと検証します。

Please let me know if you have any data or papers to back this up. I will use an engineering approach to validate it properly.

-----

ともあれ、私には語るべき「教育論」がありません。

Anyway, I have no "educational theory" to speak of.

例外があるとすれば、これをやった記憶くらいです。

The only exception is my memory of doing this.

未分類

カート、バスのコストを減らすテスト用に、tomioka_db_c_cost を作成

ebata@DESKTOP-P6KREM0 MINGW64 ~(こっちのシェルを使うこと。パイプを使うため)>createdb -U postgres -h 192.168.0.23 -p 15432 tomioka_db_c_cost
Password:

ebata@DESKTOP-P6KREM0 MINGW64 ~(こっちのシェルを使うこと。パイプを使うため)
$ pg_dump -U postgres -h 192.168.0.23 -p 15432 -Ft tomioka_db_c | pg_restore -U postgres -h 192.168.0.23 -p 15432 -d tomioka_db_c_cost

富岡地区のバス等の平均速度の算出

歩行に対するバスの歩行比 = 0.18

歩行に対するカートの歩行比 = 0.45

は、まだ未設定

 

未分類

 

バスは、平均速度17.9km/hくらい

カートは、平均速度7.2km/hくらい

高低差が富岡地区と程度の1.3kmをテスト歩行 / 24分
歩行は3.25km/hくらい

歩行に対するバスの歩行比 = 0.18

歩行に対するカートの歩行比 = 0.45