「DSN」を含む日記 RSS

はてなキーワード: DSNとは

2025-01-29

2029年地球文明から人類メッセージが届く? 科学者も期待をかけ

以下の記事について.

2029年地球文明から人類メッセージが届く? 科学者も期待をかける「白色矮星付近からの返信」

https://web-mu.jp/paranormal/52364/

宇宙人がいたとして,本当に1973年に送った電波宇宙人が受信できて,その返信を地球人が受信できるのか.疑問だったのでChatGPTさんに聞いてみた.

1973年NASA探査機パイオニア10号に向けて送信した無線信号は、その先にある恒星系へも届くはずである。仮にこれらの星の知的生命体が、その無線信号を受信しようとしたとき、どのくらいの規模、感度のアンテナ信号復元能力必要か?地球技術で、同じ距離から送られてきた無線信号を受信する技術・機材はあるか?


以下では、「1973年NASAパイオニア10号に向けて送信した電波(指令信号やテレメトリ送信)」が、さらにその先の恒星系へ到達した場合に、それを受信しようとする知的生命体に必要アンテナ規模や受信感度、そして同等の距離から電波地球側が受信可能かどうか、という観点で概説します。実際には正確な数値は周波数帯や送信電力、信号処理方法など多くの要素に依存しますが、ここでは概略のイメージを示します。

1. パイオニア10号に指令を送信した当時の地球側の送信スペック

送信周波数帯: パイオニア10号との通信はS帯(約2GHz前後)で行われていました。

送信電力: 数kW程度の送信機を地上局が使用(厳密には指向性が高く実効的な放射電力(EIRP)はさらに大きい)。

地上局アンテナ: NASAの深宇宙通信網(DSN)では直径64m級(当時)のパラボラアンテナなどが用いられた。

距離: 1973年当時、パイオニア10号は数AUから十数AUほど離れた位置木星軌道付近木星フライバイ後)に存在していた。

しかし、この通信信号は当然、宇宙空間光速拡散していきます。そのため、さらに何十光年・何百光年先にある恒星系にも到達「はする」ことになります。ただし距離が大きくなるにつれ、電波強度は 1/𝑟^2 で減衰していきます

2. 数十光年先での信号強度と受信に必要な規模

2.1 距離による電力密度の減衰

たとえば10光年(約10^17 m)先での電波強度は、1AU(約1.5×10^11 m)での強度に比べて

(1AU / 10光年)^2

だけ減衰します。1光年は約6.3×10^4AUなので、10光年なら約6.3×10^5AU。そこから

(6.3x10^5)^2≈2.5×10^(-12)

と、10光年先では1天文単位あたりの強度の10^-12程度にしかなりません(実際にはさらに詳細なアンテナ利得・指向性などが絡むのでオーダーで見ています)。

2.2 必要となるアンテナ口径の概算

地球Deep Space Network(DSN)では、数十AU~数百AU程度先の探査機Voyagerなど)からの微弱な信号を受信しています。これは探査機送信電力が数W~20W程度、周波数帯はやや上のX帯(約8GHz)あるいはKa帯(30GHz)などを使いつつ、高利得アンテナで地上局が受信を行い、さらに超狭帯域で信号処理をしているからです。

しかし「数十光年」のスケールは「数十AU」の1万倍以上離れており、電波強度は数十AU場合の(1万)^2 = 10^8分の1(10^8倍減衰)よりもはるかに弱くなります。実際は1光年=約63,000AUですから、たとえば50光年先だと

63,000(AU/光年)×50≈3.15×10^6AU

で、数十AUと比べると何万~何十万倍も遠いオーダーになります。よって通常のDSN相当のサイズ(直径 70mクラス)では、とても検出困難と考えられます

もし「同じS帯の数kW送信・70m受信機」という想定で数十~数百光年から信号を捉えるには、以下のいずれか、あるいは複数組合せが必要になります

はるか大口径の単一アンテナを用いる

km級、あるいはそれ以上の直径が必要になる可能性がある。現実的には困難。

巨大な電波干渉計(アレイ)で有効口径を拡大

数十~数百~数千ものパラボラアンテナ地球規模・あるいは月や宇宙空間をも巻き込む形で電波干渉計として合成し、膨大な合成口径を得る。将来的なSKA(スクエアキロメートルアレイ)などの拡張構想に近い。

非常に狭帯域に絞った信号処理、長時間積分を行う

信号わずかでもバンド幅を極端に狭くすればS/Nは向上する。狭帯域SETI観測のように、Hzオーダー・mHzオーダーまで絞って長時間積分する、など高度なデジタル信号処理を駆使する。

もともとの送信側が極端に高出力・高利得アンテナ指向性を絞って送信する

受信側の負担を減らすには送信電力や指向性ゲインを桁違いに高める必要がある(大電ビーム送信)。

実際に未知の星間通信を成立させるには、上記のように「超高性能アンテナ」+「超狭帯域処理」+「相当の送信電力」という組合せが必要になります

3. 地球側の技術で“同じ距離から信号を受信できるか

結論としては、「今の地球技術でも理論的には可能」ですが、「実用的な設備規模」や「膨大な観測時間信号処理」が必要です。たとえば以下のような状況が考えられます

SKAなど超大型電波干渉計での観測

たとえ非常に微弱な信号でも、周波数を極端に限定し、長時間データ積分(平均化)することでノイズを下げ、S/N比を稼ぐ手法がすでに行われていますSETI研究では、広範囲周波数を走査しながら狭帯域の人工信号らしきものを探索する手法がありますが、それをさらに極端化して、特定周波数を狙って超狭帯域・長時間積分すれば、送信電力が小さくとも検出の可能性は上がります

現実的制限

星間ガスや散乱などによる減衰は、電波周波数によっては大きくなる場合があります。また、地球大気や地上環境雑音(人工衛星レーダーなど)の影響も無視できません。さらに「どの星方向を狙うか」「どの周波数帯で通信しているかからない」という問題もあり、実際に「地球既存装置キャッチしよう」とするには、相当の観測リソース必要になります

4. まとめ

数十~数百光年先でパイオニア10号への指令電波を受信するためには、非常に大口径のアンテナや、巨大アレイ電波干渉計)、狭帯域観測・長時間積分などが必要となる。いわゆるパワーやアンテナゲイン、受信系の超高性能化なしでは、通常のDSNクラス設備ではほぼ検出不能なほど弱い信号になる。

地球側が“同等の距離から飛んでくる電信号を検出できるかどうか

理論的には、超狭帯域・長時間積分を組み合わせれば、今ある技術の延長でも検出可能可能性がある。

ただし巨大施設(たとえばSKA等)のように大規模なアンテナアレイと高度な信号処理を組み合わせることが前提になる。現行の設備でも「SETIレベルの狭帯域探索」は可能だが、何十光年も先に存在する非常に弱い信号特定周波数で捉えるには、相当の工夫と時間必要である

まり、「1973年NASA送信した電波理論上は恒星間を伝播し、もし受信する文明があれば捉えられるはずだが、実用上はかなり大規模・高感度な設備を要する」というのが結論です。また、同様に地球側も「もし相手側が数十光年から似たような出力で信号を送ってきた場合には、非常に狭帯域で長時間積分するなどの先端的な技術を駆使すれば、ギリギリ検出の可能性はある」ということになります

2023-05-01

anond:20230419125905

できたできた。自己解決。多分誰にも役に立たないだろうが書いておこう。

DB2ODBCの設定以外にNodeとDBの設定情報必要らしい。それがなんなのかはわからない。

GUIODBCデータソースで追加すると、これが裏で作ってくれるっぽいが

ODBCCONF.exeでは作ってくれず、エラーとなる。らしい。

"C:\Program Files\IBM\SQLLIB\BIN\db2cmd.exe" /c /w db2 catalog tcpip node FOO remote 192.168.1.1 server 10000
"C:\Program Files\IBM\SQLLIB\BIN\db2cmd.exe" /c /w db2 catalog db FOO at node FOO

odbcconf /A {CONFIGSYSDSN "IBM DB2 ODBC DRIVER - DB2COPY1" "DSN=FOO|DATABASE=FOO|SYSTEM=192.168.1.1:10000|UID=db2admin|PWD=password"}

で追加できる。知らんだけで最後ODBCCONFではなく、db2側のでDSNも追加できるのかもしれない…

さらに「 - DB2COPY1」が何なのかさっぱりわからん。「IBM DB2 ODBC DRIVER」もあるんだけども。

というか、こういう要望無いんだろうか?探してもAIに聞いてもなかなかヒットせず

リファレンス見ながらだましだましやってやっとたどり着いた。

FAQみたいなのに載っててもよさそうなもんだけども。DB2シェア低すぎるのかな?

2023-04-19

DB2 ODBC DSNコマンド登録したいけどできない

odbcconf /A {CONFIGSYSDSN "IBM DB2 ODBC DRIVER - DB2COPY1" "DSN=FOO|DATABASE=FOO|SYSTEM=192.168.1.1:10000|UID=db2admin|PWD=password"}

だと「ドライバーの ConfigDSN、ConfigDriver、または ConfigTranslator が失敗しました」とあてにならないエラーが出てしまう。


iAccess

odbcconf /A {CONFIGSYSDSN "iSeries Access ODBC Driver" "DSN=BARLIB|DRIVER=IBM i Access ODBC Driver|SYSTEM=192.168.1.1|DefaultLibraries=BARLIB|CMT=3|SORTTYPE=2|LANGUAGEID=JPN"}

登録アクセスもできたんだけども。

なんかちがうんかなぁ。。。

2015-08-25

IT関係ないサラリーマンコミュニティサイト作っちゃいました。

私ごとですが、この度コミュニティサイト作成いたしました。

私の持てる知識を絞り出してなんとか完成しました。

**************************************************************************************

完成したサイトがこちらです。

LapyNetニュース

http://lapynetz.net/

**************************************************************************************

私は普段webとは関係ない仕事してます。なんとか休日を利用して、

webサービス作成しました。

メインのコードはこんな感じ

----------------------------------------------------------------------------------------------------------------------



App::uses('Sanitize', 'Utility');
class RssfeedsController extends AppController {

public $helpers = array('Html','Form','Session','Number','Cache');

public $uses = array(
'Rssfeed',
'Tweet',
'Wadai',
'Rank',
'Oracle'
);
 **************************************************************************************
public function index() {

$title_for_layout = "LapyNetニュース";
$content = "Hello World!!";

$this->set(compact('title_for_layout','content'));
if(date("G")>0 and date("G") < 7){
$today = date("Y-m-d", strtotime('-1 day'));
}else{
$today = date("Y-m-d");
}

$params = array(
'conditions' = > array(
'and' = > array(
'Rssfeed.time' = > $today,
)),
'order' = > 'tweets desc',
'limit' = > '50'
);
$this- >set('posts',$this- >Rssfeed- >find('all',$params));

$paramz = array(
'order' = > 'Rssfeed.id desc',
'limit' = > '10'
);
$this->set('posts2',$this->Rssfeed->find('all',$paramz));

$paramz = $this- >Rssfeed- >query('SELECT id,title FROM rssfeeds order by id desc limit 10');

$this->set('posts2', $paramz);

$parapara = $this- >Oracle- >query('SELECT id,title FROM oracles order by id desc limit 10');

$this- >set('postx', $parapara);

$funking = $this- >Rank- >query('SELECT id,frank FROM ranks where creation=(select max(creation) from ranks)');

$this- >set('funking', $funking);


}

 **************************************************************************************
public function mizuno() {
$parapara = array(
'order' => 'Oracle.id desc',
'limit' => '30'
);
$recent_posts = $this->Oracle->find('all',$parapara);
return $recent_posts;

}


 **************************************************************************************
public function wadai() {
if(date("G")>0 and date("G") < 7){
$today = date("Y-m-d", strtotime('-1 day'));
}else{
$today = date("Y-m-d");
}

$params = array(
'conditions' => array(
'and' => array(
'Rssfeed.time' => $today,
'Rssfeed.kubetu' => 4
)),
'order' => 'tweets desc',
'limit' => '100'
);
$this->set('posts',$this->Rssfeed->find('all',$params));





$this->set("title_for_layout","2CHニュース-LapyNetニュース");


$paramz = array(
'order' => 'Rssfeed.id desc',
'limit' => '10'
);
$this->set('postyy',$this->Rssfeed->find('all',$paramz));

$parapara = array(
'order' => 'Oracle.id desc',
'limit' => '10'
);


$this->set('postyx',$this->Oracle->find('all',$parapara));

$funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)');

$this->set('funking', $funking);



}
 **************************************************************************************
public function hot() {
if(date("G")>0 and date("G") < 7){
$today = date("Y-m-d", strtotime('-1 day'));
}else{
$today = date("Y-m-d");
}

$params = array(
'conditions' => array(
'and' => array(
'Rssfeed.time' => $today,
'Rssfeed.kubetu' => 3
)),
'order' => 'tweets desc',
'limit' => '20'
);
$title_for_layout = "LapyNetニュース";
$this->set("title_for_layout","ニュース-LapyNetニュース");
$this->set('posts',$this->Rssfeed->find('all',$params));

$parapara = array(
'order' => 'Oracle.id desc',
'limit' => '10'
);
$this->set('postxx',$this->Oracle->find('all',$parapara));

$paramz = array(
'order' => 'Rssfeed.id desc',
'limit' => '10'
);
$this->set('postsxxx',$this->Rssfeed->find('all',$paramz));

$funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)');

$this->set('funking', $funking);


}

 **************************************************************************************
public function newnew() {
if(date("G")>0 and date("G") < 7){
$today = date("Y-m-d", strtotime('-1 day'));
}else{
$today = date("Y-m-d");
}

$params = array(
'conditions' => array(
'and' => array(
'Rssfeed.time' => $today,
'Rssfeed.kubetu' => 2
)),
'order' => 'tweets desc',
'limit' => '20'
);
$this->set("title_for_layout","エンタメニュース-LapyNetニュース");
$this->set('posts',$this->Rssfeed->find('all',$params));

$paramz = array(
'order' => 'Rssfeed.id desc',
'limit' => '10'
);
$this->set('postszz',$this->Rssfeed->find('all',$paramz));

$paramz = $this->Oracle->query('SELECT id,title FROM rssfeeds order by id desc limit 10');

$this->set('postszz', $paramz);

$parapara = $this->Oracle->query('SELECT id,title FROM oracles order by id desc limit 10');

$this->set('postzy', $parapara);


$funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)');

$this->set('funking', $funking);



}
 **************************************************************************************
public function top() {
if(date("G")>0 and date("G") < 7){
$today = date("Y-m-d", strtotime('-1 day'));
}else{
$today = date("Y-m-d");
}
$params = array(
'conditions' => array(
'and' => array(
'Rssfeed.time' => $today,
'Rssfeed.kubetu' => 1
)),
'order' => 'tweets desc',
'limit' => '20'
);
$this->set('posts',$this->Rssfeed->find('all',$params));

$param = array(
'conditions' => array('times > current_timestamp + interval -600 minute and Kubetu = 4'),
'order' => 'tweets desc',
'limit' => '30'
);
$this->set('posts2',$this->Rssfeed->find('all',$param));
}


 **************************************************************************************
public function view($id = null ) {
$this->Rssfeed->id = $id; //驥崎ヲ√↑荳譁・i縺励>
$user = AuthComponent::user();

$TwimStatus = ClassRegistry::init('Twim.TwimStatus');


$TwimStatus->getDataSource()->setToken(AuthComponent::user());

$statuses = $TwimStatus->tweet();
$rairai = $this->Rssfeed->read(title,$id);
$alcol = $this->Rssfeed->read();
$this->set('post', $alcol);

$this->set('post2', $user);
$this->set('post3', $statuses);
$this->set("title_for_layout",$rairai[Rssfeed][title]."-LapyNetニュース");

$paramz = array(
'order' => 'Rssfeed.id desc',
'limit' => '20'
);
$this->set('postszz',$this->Rssfeed->find('all',$paramz));

$parapara = array(
'order' => 'Oracle.id desc',
'limit' => '30'
);
$this->set('postzy',$this->Oracle->find('all',$parapara));

}
 **************************************************************************************
public function add() {

if($this->request->isPost()){
if($this->Tweet->save($this->data)) {
$this->Session->setFlash('seikou');
$this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11));

}else{
$this->Session->setFlash('sipai');
$this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11));
}
}
}
 **************************************************************************************
public function delete($id = null) {
$this->Rssfeed->id = $id; 
$this->set('set', $this->Rssfeed->read());
$this->redirect(array('controller'=>'tweets','action'=>'delete',$this->data['tweet']['rssfeed_id']));


}
 **************************************************************************************
public function oracle() {
if($this->request->is('post')) {

$user = AuthComponent::user();

$TwimStatus = ClassRegistry::init('Twim.TwimStatus');


$TwimStatus->getDataSource()->setToken(AuthComponent::user());

$contents1 = $this->request->data['Rssfeed']['contents'];
$contents2 = $this->request->data;
$statuses = $TwimStatus->tweet($contents1);


if($this->Rssfeed->save($contents2)) {
$this->Session->setFlash('成功です。');
$this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11));
$this->redirect($this->referer());
}else{
$this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11));
$this->Session->setFlash('失敗です。');
}
}


}
 **************************************************************************************
public function makelist() {
$rssfeeds = $this->paginate();
if ($this->request->is('requested')) {
return $rssfeeds;
} else {
$this->set('rssfeeds', $rssfeeds);
}
}

}

----------------------------------------------------------------------------------------------------------------------

rssフィードはこんな感じです。
----------------------------------------------------------------------------------------------------------------------

#!/usr/bin/php
<?php

header('Content-type: text/html; charset=UTF-8');


require_once ('/var/www/html/s/magpierss/rss_fetch.inc');


define('MAGPIE_CACHE_AGE', 60*5);

define('MAGPIE_CACHE_DIR', '/var/www/html/s/cache/');

define('MAGPIE_OUTPUT_ENCODING','UTF-8');


$urls = array(
'*********************************');

$items = getRssList($urls);

echo '<ul>';
foreach ($items as $item) {

$href = mb_convert_encoding($item['link'], "UTF-8", "auto");

$title = mb_convert_encoding($item['title'], "UTF-8", "auto");
$description = mb_convert_encoding($item['description'], "UTF-8", "auto");
$megami = mb_convert_encoding($description, "UTF-8", "auto");

 

 **************************************************************************************


$all = 'http://urls.api.twitter.com/1/urls/count.json?url='.$href;
$Rits = file_get_contents($all);
$Olfe = mb_convert_encoding($Rits, 'UTF-8', 'auto');
$data = json_decode($Olfe);
$tweets = $data->count;

 **************************************************************************************

$checkman = db_check_urls($href);
$checkman2 = db_check_pr($title);

$nowtimes = date('Ymd');

 


if($checkman == 0 && $checkman2 == 0){
#$hrefs = urlencode($href);
db_put_urls($nowtimes,$href,$title,$description,$tweets);
echo "<li><a href=$href>$title</a><br>$megami<p>$tweets</p><p>$checkman</p></li>";
}else{

}


}
echo '</ul>';

 

 

 **************************************************************************************
function getRssList($urls)
{
$rssitems = array();
foreach ($urls as $url) {
$obj = fetch_rss($url);
$rssitems = array_merge($rssitems, $obj->items);
}
return $rssitems;
}

 **************************************************************************************
function db_check_pr($japanese){

$moji = mb_substr($japanese,0,2);
if($moji == 'PR'){
return 1;
}else{
return 0;
}
}
 **************************************************************************************

function db_check_urls($href){

require '/var/www/html/s/database_conf.php';

try {

$db = new PDO($dsn, $dbUser, $dbPass);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


$sql = 'SELECT count(*) AS count FROM rssfeeds WHERE urls = :language';
$prepare = $db->prepare($sql);


$languages = array($href);
foreach ($languages as $language) {

$prepare->bindValue(':language', $language, PDO::PARAM_STR);
$prepare->execute();

$result = $prepare->fetchColumn();
if ($result > 0) {
return true;
}else{
return false;
}
}

} catch (PDOException $e) {
echo 'エラーが発生しました。内容: ' . h($e->getMessage());
}

function h($var) 
{
return htmlspecialchars($var, ENT_QUOTES, 'UTF-8');
}
}

 **************************************************************************************
function db_put_urls($nowtimes,$href,$title,$description,$tweets){
require '/var/www/html/s/database_conf.php';
try {

$db = new PDO($dsn, $dbUser, $dbPass);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sikibetu = 5;
$moto = "アニゲー速報VIP";

$sql = 'insert into rssfeeds (id, time,urls,title,contents,tweets,times,kubetu,teikyo) values (?, ?, ?, ?, ?, ?, ?, ?, ?)';

$prepare = $db->prepare($sql);

$prepare->bindValue(1, 0, PDO::PARAM_STR);
$prepare->bindValue(2, $nowtimes, PDO::PARAM_STR);
$prepare->bindValue(3, $href, PDO::PARAM_STR);
$prepare->bindValue(4, $title, PDO::PARAM_STR);
$prepare->bindValue(5, $description, PDO::PARAM_STR);
$prepare->bindValue(6, $tweets, PDO::PARAM_STR);
$prepare->bindValue(7, 'cast( now() as datetime)', PDO::PARAM_STR);
$prepare->bindValue(8, $sikibetu, PDO::PARAM_STR);
$prepare->bindValue(9, $moto, PDO::PARAM_STR);
$prepare->execute();

} catch (PDOException $e) {
echo 'エラーが発生しました。内容: ' . h($e->getMessage());
}
}
?>

---------------------------------------------------------------------------------------------------------------------

**************************************************************************************

参考にした書籍

CakePHP2 実践入門 (WEB+DB PRESS plus)

CakePHP2 実践入門 (WEB+DB PRESS plus)

作者: 安藤祐介,岸田健一郎,新原雅司,市川快,渡辺一宏,鈴木則夫

出版社/メーカー: 技術評論社

発売日: 2012/09/29

メディア: 単行本ソフトカバー

購入: 5人 クリック: 165回

この商品を含むブログ (9件) を見る

Webアプリ開発を加速する CakePHP2定番レシピ119

Webアプリ開発を加速する CakePHP2定番レシピ119

作者: 長谷川智希,デジタルサーカス

出版社/メーカー: 秀和システム

発売日: 2013/09/28

メディア: 単行本

この商品を含むブログ (1件) を見る

**************************************************************************************

一番難しいところはtwitterログインwebサイト連結でした。

cakephp直感できに操作できていいです。

素人のわたしでも操作できましたので。

cakephpを使用しています

webからニュース収集してきます

ツイート数でランキングしてますネット話題を見つけられます

twitterアカウントログインできます

ニュースに対するコメントもできるし、

自分記事投稿できます。(画像も可)

デザインはよくわからないので、

ホームページビルダーを使用しています

今のホームページビルダーは昔と違って高機能ですね。

テンプレートも何種類もあって今はすごいです。

アマゾンawsを使用してます

サーバーWebサーバーデータベースサーバmysql)

に分かれています

今更cakephpを使っている人は少ないかもしれませんが、

データベースとの接続などは楽でした。

twitterアカウントあるといつでも参加できますので、

ニュースを通してコミュニケーション目的としたサイトを目指します。

 
ログイン ユーザー登録
ようこそ ゲスト さん