兵庫県知事選、稲村氏支持表明伝説の市長会有志22人の経歴まとめ

兵庫県知事選、市長会有志22人、各市長の経歴をまとめた表を作成しました。

氏名 市名 生年月日 出身地 最終学歴 主な経歴
清元 秀泰 姫路市 1964年1月1日 兵庫県姫路市 香川医科大学大学院修了 医師、東北大学医学部教授、2019年姫路市長就任
松本 眞 尼崎市 1979年9月21日 静岡県静岡市 東京学芸大学大学院修了 文部科学省勤務、尼崎市教育長、2022年尼崎市長就任
石井 登志郎 西宮市 1971年5月29日 兵庫県芦屋市 ペンシルベニア大学大学院修了 神戸製鋼所勤務、衆議院議員、2018年西宮市長就任
上崎 勝規 洲本市 1955年4月10日 兵庫県洲本市 関西学院大学経済学部卒業 洲本市役所勤務、副市長、2022年洲本市長就任
藤原 保幸 伊丹市 1954年6月28日 兵庫県伊丹市 東京大学工学部卒業 建設省勤務、伊丹市助役、2005年伊丹市長就任
谷口 芳紀 相生市 1955年生まれ 兵庫県相生市 兵庫県相生市 慶應義塾大学法学部卒業 相生市役所勤務、2018年相生市長就任
岡田 康裕 加古川市 1965年生まれ 兵庫県加古川市 京都大学法学部卒業 兵庫県庁勤務、2012年加古川市長就任
山本 実 たつの市 1952年4月26日 兵庫県たつの市 兵庫県立龍野実業高等学校卒業 龍野市役所勤務、たつの市議会議員、2017年たつの市長就任
牟礼 正稔 赤穂市 1954年7月20日 兵庫県赤穂市 大阪大学法学部卒業 兵庫県庁勤務、2019年赤穂市長就任
山崎 晴恵 宝塚市 1960年生まれ 兵庫県宝塚市 神戸女学院大学総合文化学科卒業 京都大学大学院法学研究科修了神戸大学大学院法学研究科修了 宝塚市役所勤務、2021年宝塚市長就任
仲田 一彦 三木市 1956年生まれ 兵庫県三木市 京都産業大学法学部卒業 三木市役所勤務、2020年三木市長就任
都倉 達殊 高砂市 1958年生まれ 兵庫県高砂市 南九州大学園芸学部造園科卒業 高砂市役所勤務、2021年高砂市長就任
越田 謙治郎 川西市 1974年生まれ 兵庫県川西市 同志社大学法学部政治学科卒業 川西市議会議員、2018年川西市長就任
高橋 晴彦 加西市 1958年1月2日 兵庫県加西市 大阪大学基礎工学部卒業 加西市役所勤務、教育長、2023年加西市長就任
林 時彦 丹波市 1954年5月3日 兵庫県丹波市 明治大学商学部卒業 林建設代表取締役丹波市議会議員、2020年丹波市長就任
守本 憲弘 南あわじ市 1955年生まれ 兵庫県南あわじ市 京都大学法学部卒業 経済産業省勤務、2017年南あわじ市長就任
藤岡 勇 朝来市 1956年生まれ 兵庫県朝来市 兵庫県立豊岡実業高等学校(現:兵庫県立豊岡総合高等学校)を卒業し、同年4月に兵庫県和田山農林事務所に就職 朝来市役所勤務、2020年朝来市長就任
門 康彦 淡路市 1946年2月24日 兵庫県淡路市 関西大学文学部卒業 兵庫県庁勤務、2005年淡路市長就任
福元 晶三 宍粟市 1957年生まれ 兵庫県宍粟市 兵庫県立山崎高等学校卒業 宍粟市役所勤務、2021年宍粟市長就任
岩根 正 加東市 1955年生まれ 兵庫県加東市 神戸商科大学卒業 兵庫県庁勤務、2021年加東市長就任

 

GoogleのAI Overviewsの見解に対する反論:「高品質なクリック」の欺瞞、サーチコンソールからクリック率を早期に開示せよ

グーグルがまた欺瞞的な文章を書いていたので反論しておこう。

New ways to connect to the web with AI Overviews

 

SUMMARY: 『AI Overviewsがウェブとの新しいつながりを生む』と彼らは主張するが、実際には、これはユーザーがウェブサイトを訪れる必要性を減らし、コンテンツ制作者の収益を削ぐ結果につながりかねない。『多様な視点を提供する』と述べているが、AIによる自動要約は、情報の表面的な理解を促進し、真に多様な視点や深い洞察を得る機会を奪う可能性が高い。また、検索結果ページに表示される情報の信頼性や質が十分に保証されているかも疑問が残る。ゼロクリック検索の影響が懸念される中、グーグルが透明性を欠いたまま、こうしたシステムを拡張することは、長期的にはインターネット全体の健全な情報エコシステムを脅かすだろう。

 

1. AI Overviewsによる「多様性」と「深掘り」への疑問

Googleは、AI Overviewsがより多様なサイト訪問や複雑なテーマの深掘りを促していると主張していますが、これには疑問が残ります。AIによる要約がユーザーに提示されることで、むしろユーザーが浅い情報収集に陥り、表面的な理解に留まるリスクが増大する可能性があります。

AI Overviews普及でゼロクリック検索が発生し、コンテンツ制作者や出版業者はトラフィックを失う可能性があります。検索結果ページでユーザーが満足してしまうと、元のサイトに訪問する必要がなくなり、広告収益やコンテンツの価値が低下するリスクがあります。これにより、コンテンツ制作者が質の高い情報を提供し続けるインセンティブが弱まるかもしれません。

また、「多様なサイト訪問」とは言え、AIが特定のアルゴリズムに基づいて推奨するサイトが偏った内容を持っている場合、その多様性が実質的に意味を持つかは不明です。

 

2. 「高品質なクリック」との主張の曖昧さ

AI Overviewsからのクリックが「高品質」であり、ユーザーがサイトに長く滞在する傾向があるとされていますが、この「高品質」という概念が曖昧です。滞在時間の増加が必ずしもユーザーの満足度やコンテンツの有用性を反映するとは限りません。逆に、複雑な情報を理解するために何度も読み返す必要があるため、滞在時間が長くなる場合も考えられます。

3. 視覚的変更による影響の過小評価

AI Overviewsにおけるサイトアイコンの表示がサイトの可視性やエンゲージメントに影響を与えると述べられていますが、こうした視覚的変更が実際にどの程度の影響を持つのか、具体的なデータやユーザーエクスペリエンスへの影響が示されていません。これは、視覚的な要素がコンテンツの信頼性や質に対する認識にどのように影響するかを軽視している可能性があります。

 

4. リンク追加の「早期成功」への懐疑

AI Overviews内にリンクを直接追加することが「早期に成功を示した」とされていますが、この「成功」の定義や評価基準が曖昧です。リンクがクリックされる回数が増えたというだけでは、ユーザーの満足度やコンテンツの質が向上したとは言い難いです。リンク追加が単にクリック率を上げるだけの短期的な効果に留まる可能性もあり、長期的な価値が疑わしいです。またインフォメーショナルクエリにおいても同様に、AI概要からのクリックが本当に質の高いエンゲージメントに繋がるのか疑問です。本当にクリックを誘発しているのだというのであれば、グーグルはサーチコンソールからクリック率を早期に開示すべきです。なでできないのでしょうか?

 

5. 保存機能と言語簡略化の実用性

AI Overviewsを保存する機能や言語を簡略化する機能が新たに導入されていますが、これらの機能が本当にユーザーにとって有益かどうかは疑問です。特に言語の簡略化が、情報の正確さやニュアンスを失う結果になりかねないリスクがあり、複雑なトピックに対する理解が逆に浅くなる可能性があります。

6. グローバル展開とローカル対応の課題

AI Overviewsのグローバル展開が行われる一方で、各国の文化や言語、検索行動の違いにどれだけ適切に対応できるか疑問です。特に、現地の言語や文化に合わせた調整が不十分な場合、ユーザー体験が損なわれるリスクがあります。グローバル展開の一環として、現地のニーズや背景を十分に考慮しているかどうかは重要なポイントです。

 

これらの点を踏まえると、GoogleのAI Overviewsに関する主張には、いくつかの未解決の課題や潜在的なリスクが存在することがわかります。

Rust csv をtupleでindex column(1列目)をわけてdesrerializeする

tupleでindex column(1列目)をわけてdesrerializeする

 

 

```.rust

extern crate csv;
#[macro_use]
extern crate serde_derive;

use csv::ReaderBuilder;
use std::error::Error;

#[derive(Debug, Deserialize, Eq, PartialEq)]
struct Row {
    value: Vec<i32>,
}

fn example() -> Result<(), Box<dyn Error>> {
    let data = "\
label,value1,value2
l1,2,4
l2,2,4
";
    let mut rdr = ReaderBuilder::new()
        .has_headers(false)
        .from_reader(data.as_bytes());
    // skip since header 1
    let mut data = rdr.deserialize().skip(1).collect::<Result<Vec<(String, Row)>, _>>().unwrap();
    for row in data{
        println!("label: {:?}", row.0);    
        println!("data: {:?}", row.1);  
    }
    
    Ok(())
}

fn main() {
    example();
}

```

環境に最もやさしいプログラミング言語はC。Rustは2位

コンピュータの消費電力とプログラミング言語の選択に相関関係があるかどうか。ポルトガルの大学の研究者グループがそうした疑問に応える論文を発表した。

タイトルは「Energy Efficiency across Programming Languages / How Do Energy, Time, and Memory Relate? 」。

 

この論文は、27の有名なソフトウエア言語のランタイム、メモリ使用量、エネルギー消費量に関する研究を紹介する。各言語で表現された10種類のプログラミング問題を用いて、これらの言語の性能を監視した。その結果、消費電力が少ない言語と多い言語、メモリ使用量が消費電力に与える影響など、興味深い知見が得られた。この結果を用いて、ソフトウェア技術者がエネルギー効率を重視する場合に、どの言語を使用するかを決定するための支援を提供する方法を示す。

選択されたプログラミング言語が「よく知られている」ものであることについては問題があるかもしれませんが、このプロジェクトは非常に綿密で、文書化もかなり進んでいます。多くの人は、高速に動作するコンピュータ・プログラムほど消費電力が少ないことを当然と考えるだろう。しかし、電力消費の方程式には速度以外の要素も含まれるため、必ずしもそうとは限りません。研究チームは、Computer Language Benchmarks Gameプロジェクト(旧称:The Great Computer Language Shootout)の標準アルゴリズム10個を評価基準として使用した。

 

f:id:realitytoabstract:20220123183510p:plain

プログラミング言語別エネルギー使用量



 

Rustでcsv deserialize してstruct配列を取得する

deserializeはcsv::DeserializeRecordsIterを返却するので、collectすると取得できる。

型を指定してcollectしないと

consider specifying the type argument in the method call

のエラーが出る。

extern crate csv;
#[macro_use]
extern crate serde_derive;

use csv::ReaderBuilder;
use std::error::Error;

#[derive(Debug, Deserialize, Eq, PartialEq)]
struct Row {
    label: String,
    value: Vec<i32>,
}

fn example() -> Result<(), Box<dyn Error>> {
    let data = "\
label,value1,value2
l1,2,4
l2,2,4
";
    let mut rdr = ReaderBuilder::new()
        .has_headers(false)
        .from_reader(data.as_bytes());
    // skip since header 1
    let mut data = rdr.deserialize().skip(1).collect::<Result<Vec<(Row)>, _>>().unwrap();
    println!("{:?}", data);
    Ok(())
}

fn main() {
    example();
}

headerを無視して、deserialize したい場合。 (has_headers falseでskip)

headerを無視して、deserialize したい場合がある。

label,value1,value2
l1,2,4
l2,2,4

で、structは

#[derive(Debug, Deserialize, Eq, PartialEq)]
struct Row {
    label: String,
    value: Vec<i32>,
}

みたいなケースだ。 こういうときはskipを使ってheaderを無視する

extern crate csv;
#[macro_use]
extern crate serde_derive;

use csv::ReaderBuilder;
use std::error::Error;

#[derive(Debug, Deserialize, Eq, PartialEq)]
struct Row {
    label: String,
    value: Vec<i32>,
}

fn example() -> Result<(), Box<dyn Error>> {
    let data = "\
label,value1,value2
l1,2,4
l2,2,4
";
    let mut rdr = ReaderBuilder::new()
        .has_headers(false)
        .from_reader(data.as_bytes());
    // skip since header 1
    let mut iter = rdr.deserialize().skip(1);
    for result in iter {
        let record: Row = result?;
        println!("{:?}", record);
    }
    Ok(())
}

fn main() {
    example();
}

while と loop なぜ二つあるのか 、while trueではだめなのか

while trueとloopの違いはあるが、現段階では理解することはあまり重要ではないとRustチュートリアルにはあるが、どのような違いがあるか?をここで解説する。

http://web.mit.edu/rust-lang_v1.25/arch/amd64_ubuntu1404/share/doc/rust/html/book/first-edition/loops.html

無限ループが必要なとき

while true {

を使いたいかもしれないが、

loopを使ったほうが良いだろう

loop {

Rustのコントロールフロー解析では、この構文は常にループすることが分かっているので、while trueとは異なる扱いをするためだ。一般に、コンパイラに与える情報が多ければ多いほど、安全性とコード生成の面で有利になる。したがって、無限にループする予定がある場合は、常にloopを選択すべきだ。

上の説明だと、いまいち抽象的でよくわからないが、実際whileだとうまく動かないケースをみてみよう。

while は以下のコードで初期化エラーをはく。

let x;
while true { x ="hogehoge"; break; }
println!("{}", x);

while trueは必ず実行されるのでxは初期化されるが、コンパイラはwhile文内が一度は必ず実行されることを考慮して型推測をしてくれない。

一方loopを使うと

let x;
loop { x ="hogehoge"; break; }
println!("{}", x)

コンパイルすることができる。