tag:blogger.com,1999:blog-36145313026487134252024-03-05T15:15:15.233+09:00広く浅くसकेसम्म深くPHP, C#などのプログラミング情報やネパールに関する情報を、広く浅く時には深く発信していきます。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.comBlogger94125tag:blogger.com,1999:blog-3614531302648713425.post-20409285775281231342022-01-17T12:59:00.002+09:002022-01-17T12:59:55.514+09:00WPF DataGridの表示行数を取得 VB.NET<h3>WPF DataGridの表示行数を取得</h3><p style="text-align: left;">Windowの高さが変更されることで、DataGridの高さが変わり、表示できる行数が変わりますが、この表示行数を取得したいと思います。</p><p style="text-align: left;">サイズ変更イベントに書きました。</p><div>
<script class="brush:vb" title="行数取得" type="syntaxhighlighter">
<![CDATA[
''' <summary>
''' サイズ変更
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Window_SizeChanged(sender As Object, e As SizeChangedEventArgs) Handles MyBase.SizeChanged, MyBase.SizeChanged
'表示行数を取得
If GridList.Items.Count > 0 Then
GridList.UpdateLayout()
Dim VisibleRows As Integer = 0
For Each Item In GridList.Items
Dim Row As DataGridRow = CType(GridList.ItemContainerGenerator.ContainerFromItem(Item), DataGridRow)
If Not IsNothing(Row) Then
If Row.TransformToVisual(GridList).Transform(New Point(0, 0)).Y + Row.ActualHeight >= GridList.ActualHeight Then
Exit For
End If
VisibleRows += 1
End If
Next
Console.WriteLine("表示行数:" & VisibleRows)
End If
End Sub
]]>
</script>
<p style="text-align: left;">GridListはDataGridの名前です。VisibleRowsが行数となります。</p>
</div>Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-81586352828505974042022-01-14T22:02:00.001+09:002022-01-18T00:28:33.496+09:00LINE BOTをPHPで作る - BOT本体作成<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEibOP4Z0rQfPf0qMcEWIsk5pnp8Pb7MVzEdIh01PWdoztan1f56tlZzppP9_-wbbAnowBUzRd-M4hRxT6wgMS9dRCV61-rCVdbvMj0tsTX3k2X7Ef_OS-Zl5-x5edPibjny1TIA5EhiKMkEquoIeZRxTpBgT0SfOOt8w8U8Gmd9mQe_DTp011IUO-CgvQ=s1000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1000" height="200" src="https://blogger.googleusercontent.com/img/a/AVvXsEibOP4Z0rQfPf0qMcEWIsk5pnp8Pb7MVzEdIh01PWdoztan1f56tlZzppP9_-wbbAnowBUzRd-M4hRxT6wgMS9dRCV61-rCVdbvMj0tsTX3k2X7Ef_OS-Zl5-x5edPibjny1TIA5EhiKMkEquoIeZRxTpBgT0SfOOt8w8U8Gmd9mQe_DTp011IUO-CgvQ=w200-h200" width="200" /></a></div><br /><div><br /></div>LINE BOT本体をPHPで作る方法をメモします。<br />
<br />
<h2>
公式SDK</h2>
LINE BOTを作るために公式PHP版SDKを利用しました。<br />
<br />
<a href="https://github.com/line/line-bot-sdk-php">https://github.com/line/line-bot-sdk-php</a><br />
<br />
それをサーバーにインストールします。<br />
インストール方法については、別途記載します。<br />
<br />
<h2>
つくるもの</h2>
メッセージを打つとそのままオウム返ししてくれるBOTを作ります。また、BOTからのスタンプ、地図、ダイアログ型メッセージ、カルーセル型メッセージなどを返信できるようなので、それらも試してみました。<br />
<ul>
<li>スタンプを送るとスタンプを返す(送信できるスタンプには制限があるようです。)</li>
<li>「位置」という文字を打つと、地図を返す</li>
<li>「確認」という文字を打つと、ダイアログ型メッセージを返す</li>
<li>「選択」という文字を打つと、カルーセル型メッセージを返す</li>
<li>それ以外はオウム返し</li>
</ul>
という形で作ってみます。<br />
<br />
<h2>
BOT本体 PHPソース</h2>
<script class="brush:php" title="PHPソース" type="syntaxhighlighter"><![CDATA[
use \LINE\LINEBot\HTTPClient\CurlHTTPClient;
use \LINE\LINEBot;
use \LINE\LINEBot\Constant\HTTPHeader;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
use LINE\LINEBot\MessageBuilder\MultiMessageBuilder;
use LINE\LINEBot\MessageBuilder\StickerMessageBuilder;
use LINE\LINEBot\MessageBuilder\LocationMessageBuilder;
use LINE\LINEBot\MessageBuilder\TemplateMessageBuilder;
use LINE\LINEBot\MessageBuilder\TemplateBuilder\ConfirmTemplateBuilder;
use LINE\LINEBot\TemplateActionBuilder\MessageTemplateActionBuilder;
use LINE\LINEBot\TemplateActionBuilder\UriTemplateActionBuilder;
use LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselColumnTemplateBuilder;
use LINE\LINEBot\MessageBuilder\TemplateBuilder\CarouselTemplateBuilder;
use LINE\LINEBot\Event\MessageEvent;
use LINE\LINEBot\Event\MessageEvent\AudioMessage;
use LINE\LINEBot\Event\MessageEvent\ImageMessage;
use LINE\LINEBot\Event\MessageEvent\LocationMessage;
use LINE\LINEBot\Event\MessageEvent\StickerMessage;
use LINE\LINEBot\Event\MessageEvent\TextMessage;
use LINE\LINEBot\Event\MessageEvent\UnknownMessage;
use LINE\LINEBot\Event\MessageEvent\VideoMessage;
use LINE\LINEBot\Event\UnfollowEvent;
use LINE\LINEBot\Event\FollowEvent;
//SDK読込み
require_once __DIR__.'/vendor/autoload.php';
//トークン
const ACCESS_TOKEN = "hvwJKvQlP08O2yY8MSARjwjutjbjwqDOla/LWtemrCyUMyvEwZCydvriZKtqWDq0BXSzctAtmCbSyKDW+t6DWkTBKBXhnVrIP+45quO0i9SjpSyhAXAuK88iIIEUTeXZ25oZD++pPfw5nr2ZcZOiJgdB04t89/1O/w1cDnyilFU=";
const SECRET_TOKEN = "e146218623f6b8dca65bf07af3bd5776";
//LINEからのメッセージを確認
if(isset($_SERVER["HTTP_".HTTPHeader::LINE_SIGNATURE])){
//LINEBOTにPOSTで送られて来た生データ取得
$inputdata = file_get_contents('php://input');
//LINEBOTSDKの設定
$httpclient = new CurlHTTPClient(ACCESS_TOKEN);
$bot = new LineBot($httpclient, ['channelSecret' => SECRET_TOKEN]);
$signature = $_SERVER["HTTP_".HTTPHeader::LINE_SIGNATURE];
try {
$events = $bot->parseEventRequest($inputdata, $signature);
} catch(\LINE\LINEBot\Exception\InvalidSignatureException $e) {
error_log('parseEventRequest failed. InvalidSignatureException => ' .var_export($e, true)."\n", 3, "./php_error.log");
} catch(\LINE\LINEBot\Exception\UnknownEventTypeException $e) {
error_log('parseEventRequest failed. UnknownEventTypeException => ' .var_export($e, true)."\n", 3, "./php_error.log");
} catch(\LINE\LINEBot\Exception\UnknownMessageTypeException $e) {
error_log('parseEventRequest failed. UnknownMessageTypeException => ' .var_export($e, true)."\n", 3, "./php_error.log");
} catch(\LINE\LINEBot\Exception\InvalidEventRequestException $e) {
error_log('parseEventRequest failed. InvalidEventRequestException => '.var_export($e, true)."\n", 3, "./php_error.log");
}
//大量にメッセージが送られると複数分のデータが同時に送られてくるため、foreachをしている。
foreach($events as $event) {
//クライアント名取得
$userId = $event->getUserId();
$response = $bot->getProfile($userId);
if ($response->isSucceeded()) {
$profile = $response->getJSONDecodedBody();
$displayName = $profile['displayName'];
$user = $displayName;
$_SESSION["USER_ID"] = $profile['userId'];
$_SESSION["USER_NM"] = $profile['displayName'];
}
//イベントタイプ判別
$return_type = "";
$message_text = "";
if ($event instanceof MessageEvent) {
//メッセージイベント取得
if ($event instanceof TextMessage) {
if ($event->getText()=="位置") {
$return_type = "location";
} elseif ($event->getText()=="確認") {
$return_type = "confirm";
} elseif ($event->getText()=="選択") {
$return_type ="carousel";
} else {
$return_type = "text";
$message_text = "「".$event->getText()."」ですね?「".$user."」さん";
}
} elseif ($event instanceof StickerMessage) {
$return_type = "sticker";
}
} else {
$message_text = 'メッセージイベント以外は無効です';
}
//返信
if ($return_type=="text") {
//オウム返し
$SendMessage = new MultiMessageBuilder();
$TextMessageBuilder = new TextMessageBuilder($message_text);
$SendMessage->add($TextMessageBuilder);
$bot->replyMessage($event->getReplyToken(), $SendMessage);
} elseif ($return_type=="sticker") {
//スタンプ送信
$bot->replyMessage($event->getReplyToken(), new StickerMessageBuilder('1', '2'));
} elseif ($return_type=="location") {
//地図送信
$bot->replyMessage($event->getReplyToken(), new LocationMessageBuilder("位置情報", "チトワンソウラハ村", 27.576718, 84.493928));
} elseif ($return_type=="confirm") {
//確認ダイアログ送信
$bot->replyMessage($event->getReplyToken(),
new TemplateMessageBuilder('Confirm alt text',
new ConfirmTemplateBuilder('Do it?',
[new MessageTemplateActionBuilder('Yes', 'Yes!'), new MessageTemplateActionBuilder('No', 'No!'),]
)
)
);
} elseif ($return_type=="carousel") {
//カルーセル型メッセージ送信
$columns = []; // カルーセル型カラムを3つ追加する配列
for($i=0; $i<3; $i++) {
// カルーセルに付与するボタンを作る
$action = new UriTemplateActionBuilder("クリックしてね", "http://hiroasake.blogspot.com/");
// カルーセルのカラムを作成する
$column = new CarouselColumnTemplateBuilder("タイトル(40文字以内)", "ブログです", 'https://57c57cef.ngrok.io/linebot/image/PICT0065.JPG', [$action]);
$columns[] = $column;
}
// カラムの配列を組み合わせてカルーセルを作成する
$carousel = new CarouselTemplateBuilder($columns);
// カルーセルを追加してメッセージを作る
$carousel_message = new TemplateMessageBuilder("メッセージのタイトル", $carousel);
$bot->replyMessage($event->getReplyToken(), $carousel_message);
}
}
}
]]></script>
ACCESS_TOKEN はチャネル基本設定にある「アクセストークン」の値をセットします。<br />
SECRET_TOKEN はチャネル基本設定にある「Channel Secret」の値をセットします。<br />
<script class="brush:php" title="PHPソース" type="syntaxhighlighter"><![CDATA[
const ACCESS_TOKEN = "hvwJKvQlP08O2yY8MSARjwjutjbjwqDOla/LWtemrCyUMyvEwZCydvriZKtqWDq0BXSzctAtmCbSyKDW+t6DWkTBKBXhnVrIP+45quO0i9SjpSyhAXAuK88iIIEUTeXZ25oZD++pPfw5nr2ZcZOiJgdB04t89/1O/w1cDnyilFU=";
const SECRET_TOKEN = "e146218623f6b8dca65bf07af3bd5776";
]]></script>
StickerMessageBuilderでは、パッケージIDとステッカーIDを設定して任意のスタンプを送信しています。<br />
※ただし、使用できるスタンプには制限があるようです。<br />
<script class="brush:php" title="PHPソース" type="syntaxhighlighter"><![CDATA[
//スタンプ送信
$bot->replyMessage($event->getReplyToken(), new StickerMessageBuilder('1', '2'));
]]></script>
カルーセルに写真を表示していますが、絶対パスにする必要があるようです。(確か…)<br />
<script class="brush:php" title="PHPソース" type="syntaxhighlighter"><![CDATA[
// カルーセルのカラムを作成する
$column = new CarouselColumnTemplateBuilder("タイトル(40文字以内)", "ブログです", 'https://57c57cef.ngrok.io/linebot/image/PICT0065.JPG', [$action]);
]]></script>
<br />
<h2>
設定</h2>
<ol>
<li>作ったBOTのphpファイルをサーバーにアップします。</li>
<li>Line Developersページのチャネル基本設定にあるWebhook URLに上記のファイルがあるURLを指定します。</li>
</ol>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXg5zZUuPBIdGHPMrKT6w0sHni8st0lmsmBFBxNZ1KwXEsWVpxr88jx0igAuCcNkX0Zd0NYop1CxTn1CEIb86dx5J80192aNKfd_PJ8EFwrQxwcchqi6V-iqn5qC85vtgykDS1GwG-AXM/s1600/line-code0.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="760" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXg5zZUuPBIdGHPMrKT6w0sHni8st0lmsmBFBxNZ1KwXEsWVpxr88jx0igAuCcNkX0Zd0NYop1CxTn1CEIb86dx5J80192aNKfd_PJ8EFwrQxwcchqi6V-iqn5qC85vtgykDS1GwG-AXM/s640/line-code0.jpg" width="640" /></a></div>
<br />
今回はローカルマシンの仮想サーバーにアップしました。<a href="http://hiroasake.blogspot.com/2018/10/ngrok.html" target="_blank">ngrok</a>を利用して公開しています。<br />
<br />
<h2>
結果</h2>
<div>
<div class="separator" style="clear: both; text-align: left;">
チャネル基本設定画面にあるQRコードで友達追加します。</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcB7wNckchM8uRy0JbkMOmJ_pcsiA-6zYUsWd5PURdTY1kW-nECzV10z2fvCZOhxU2UD4u8CY7XpN49gSqafHKiIloYKpRjdEA4kPMaIxhXVrfzKcQbQgG0rAWWyzPSoVjdm-E0o3a3k5n/s1600/line-code1.JPG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="381" data-original-width="989" height="123" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcB7wNckchM8uRy0JbkMOmJ_pcsiA-6zYUsWd5PURdTY1kW-nECzV10z2fvCZOhxU2UD4u8CY7XpN49gSqafHKiIloYKpRjdEA4kPMaIxhXVrfzKcQbQgG0rAWWyzPSoVjdm-E0o3a3k5n/s320/line-code1.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTtoJKT4dtuGsawaQ6vSEM9NoJMgI3D5_-v0HPFbgSAj3HMXIfifj0MdmaLWvqZJPU3HTBsqjxoZD2wtOx014nZNg5McSfuowmrQc_PkKGKIs7uMq5UMEj0cIo7SAFMYON_KcPwlv0ypVL/s1600/line-code2.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTtoJKT4dtuGsawaQ6vSEM9NoJMgI3D5_-v0HPFbgSAj3HMXIfifj0MdmaLWvqZJPU3HTBsqjxoZD2wtOx014nZNg5McSfuowmrQc_PkKGKIs7uMq5UMEj0cIo7SAFMYON_KcPwlv0ypVL/s320/line-code2.jpg" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
追加されました。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1K4m3VZJNLMeadvADW8b3888R6FCPTqPi2gbQnAfmXvUMQp7trt4zbURsjGjM0tiipQ2-IRGxb1UrayWKUhlbmTLpx_nxjE0gnUaRJ4wi55TocGG2aKH4h_WtCPzPUZcmQFtJXwH9bVtt/s1600/line-code3.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1K4m3VZJNLMeadvADW8b3888R6FCPTqPi2gbQnAfmXvUMQp7trt4zbURsjGjM0tiipQ2-IRGxb1UrayWKUhlbmTLpx_nxjE0gnUaRJ4wi55TocGG2aKH4h_WtCPzPUZcmQFtJXwH9bVtt/s320/line-code3.jpg" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
「こんにちは~」を打つとそのまま返してくれます。(後ろにユーザー名も表示していますが)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUzFInBJZM7t7G_ZGvKL8LQAbQPjjEM9qB5qWtyuxVVwveAfCyXWaEuBG8TnmCJv5gmw-WJMl4CC7lyguzT2pXI6yjiQTHbCCSRf8m_dVgCC5osx7sgxJyC9fenzvN9C18oPhYiZcR8Ddd/s1600/line-code4.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUzFInBJZM7t7G_ZGvKL8LQAbQPjjEM9qB5qWtyuxVVwveAfCyXWaEuBG8TnmCJv5gmw-WJMl4CC7lyguzT2pXI6yjiQTHbCCSRf8m_dVgCC5osx7sgxJyC9fenzvN9C18oPhYiZcR8Ddd/s320/line-code4.jpg" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
「位置」で地図</div>
<div class="separator" style="clear: both; text-align: left;">
「選択」でカルーセル型</div>
<div class="separator" style="clear: both; text-align: left;">
「確認」でダイアログ(ダイアログ選択後の処理は未実装)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8wbC5z2LPmNVU-2gFztHGZrfMHBs9ojO7nqyOsdPpeOk85TmdpO0ejuobGm9VIJAK45FFQ8Wchyphenhyphene6L7TdJWJ9dWstcEKMmZ-D9gLArorZ_hET0qNfwqlb_P0R6B4j8F7HfcheINA61jSx/s1600/line-code5.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8wbC5z2LPmNVU-2gFztHGZrfMHBs9ojO7nqyOsdPpeOk85TmdpO0ejuobGm9VIJAK45FFQ8Wchyphenhyphene6L7TdJWJ9dWstcEKMmZ-D9gLArorZ_hET0qNfwqlb_P0R6B4j8F7HfcheINA61jSx/s320/line-code5.jpg" width="200" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
スタンプも返してくれました。</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfYFyJNBFMxzVILTnBTSqnh901KqvOHgO1f3B809BhWJHDelip_29IdQhf-jScGSJDy2EES47fdDrdMBwNtBD7NWJ_CA4ggkUPOG_1rHbP73W49WPLL60txlBlO1nlrVoGxP2_mUzt_fDc/s1600/line-code6.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="800" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfYFyJNBFMxzVILTnBTSqnh901KqvOHgO1f3B809BhWJHDelip_29IdQhf-jScGSJDy2EES47fdDrdMBwNtBD7NWJ_CA4ggkUPOG_1rHbP73W49WPLL60txlBlO1nlrVoGxP2_mUzt_fDc/s320/line-code6.jpg" width="200" /></a></div>
<br /></div>
<div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
LINEから返信できる様々なメッセージを確認できました。<br />
ラッパークラスを作ったり、メッセージの分岐等についてはこれから勉強していきます。<br />
<br /></div>
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-84118312628169946852022-01-10T16:56:00.011+09:002022-01-15T22:38:51.623+09:00WPF 画像が削除できない問題 VB.NET<p>WPFで画像を読み込んだ場合、画像ファイルをアプリケーションが保持してしまい、名前変更・削除等ができなくなります。</p><p>「別のプロセスで使用されているため、プロセスはファイルにアクセスできません。」とのメッセージが表示されます。</p><p>その場合、サムネイルを作成して表示する方法があります。</p><p> </p>
<script class="brush:vb" title="サムネイル作成関数" type="syntaxhighlighter"><![CDATA[
''' <summary>
''' 画像パスからサムネイルを作成
''' </summary>
''' <param name="FilePath">画像ファイル</param>
''' <param name="Width">ファイル幅</param>
''' <returns></returns>
Public Shared Function MakeThumbnail(ByVal FilePath As String, Optional ByVal Width As Integer = 0) As BitmapImage
Try
'サムネイル画像
Dim bitmap As BitmapImage = New BitmapImage
Using fs = New System.IO.FileStream(FilePath, IO.FileMode.Open)
bitmap.BeginInit()
bitmap.CacheOption = BitmapCacheOption.None
bitmap.CacheOption = BitmapCacheOption.OnLoad
If Width > 0 Then
bitmap.DecodePixelWidth = Width
End If
bitmap.StreamSource = fs
bitmap.EndInit()
bitmap.Freeze()
End Using
Return bitmap
Catch ex As Exception
Return New BitmapImage(New Uri("Resources/errir.png", UriKind.Relative))
End Try
End Function
]]>
</script>
<p>使用方法です。</p>
<script class="brush:vb" title="使い方" type="syntaxhighlighter"><![CDATA[
Img.Source = Utils.MakeThumbnail("C:\TEST\Sample.png", 300)
]]>
</script>
<p>ImgタグのSourceプロパティにBitmapImageをセットすることがあります。</p>
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-84923171376103031652021-09-13T08:48:00.002+09:002021-09-13T08:48:55.005+09:00MySQLで良く使う関数<div style="text-align: left;">MySQLで良く使う関数をまとめておきます。
</div><div style="text-align: left;"><br /></div><h1 style="text-align: left;">COALESCE関数 Null置換</h1><div style="text-align: left;">カラムがnullの場合に任意の値をセットしたい場合があります。そのような際に、coalesce関数を用います。これはnullを任意の値で置換する関数です。</div><div style="text-align: left;">coalesce(カラムA, 0) </div><div style="text-align: left;">カラムAがnullの場合、0を返すことができます。</div><div style="text-align: left;"><br /></div><div style="text-align: left;"><br /></div><h1 style="text-align: left;">date_format関数 日付フォーマット</h1><div style="text-align: left;">日付を表す値を指定のフォーマットで整形することができます。</div><div style="text-align: left;">date_format(m.material_update_datetime, '%b %e, %Y') ⇒ Sep 2, 2021</div><div style="text-align: left;"><br /></div><div style="text-align: left;">
<table>
<thead>
<tr><th>指定子</th><th>説明</th></tr>
</thead>
<tbody>
<tr><td>%a</td><td>簡略曜日名 (Sun..Sat)</td></tr>
<tr><td>%b</td><td>簡略月名 (Jan..Dec)</td></tr>
<tr><td>%c</td><td>月、数字 (0..12)</td></tr>
<tr><td>%D</td><td>英語のサフィクスを持つ日付 (0th, 1st, 2nd, 3rd, …)</td></tr>
<tr><td>%d</td><td>日、数字 (00..31)</td></tr>
<tr><td>%e</td><td>日、数字 (0..31)</td></tr>
<tr><td>%f</td><td>マイクロ秒 (000000..999999)</td></tr>
<tr><td>%H</td><td>時間 (00..23)</td></tr>
<tr><td>%h</td><td>時間 (01..12)</td></tr>
<tr><td>%I</td><td>時間 (01..12)</td></tr>
<tr><td>%i</td><td>分、数字 (00..59)</td></tr>
<tr><td>%j</td><td>年間通算日 (001..366)</td></tr>
<tr><td>%k</td><td>時 (0..23)</td></tr>
<tr><td>%l</td><td>時 (1..12)</td></tr>
<tr><td>%M</td><td>月名 (January..December)</td></tr>
<tr><td>%m</td><td>月、数字 (00..12)</td></tr>
<tr><td>%p</td><td>AM または PM</td></tr>
<tr><td>%r</td><td>時間、12 時間単位 (hh:mm:ss に AM または PM が続く)</td></tr>
<tr><td>%S</td><td>秒 (00..59)</td></tr>
<tr><td>%s</td><td>秒 (00..59)</td></tr>
<tr><td>%T</td><td>時間、24 時間単位 (hh:mm:ss)</td></tr>
<tr><td>%U</td><td>週 (00..53)、日曜日が週の初日、WEEK() モード 0</td></tr>
<tr><td>%u</td><td>週 (00..53)、月曜日が週の初日、WEEK() モード 1</td></tr>
<tr><td>%V</td><td>週 (01..53)、日曜日が週の初日、WEEK() モード 2、%X とともに使用</td></tr>
<tr><td>%v</td><td>週 (01..53)、月曜日が週の初日、WEEK() モード 3、%x とともに使用</td></tr>
<tr><td>%W</td><td>曜日名 (Sunday..Saturday)</td></tr>
<tr><td>%w</td><td>曜日 (0=Sunday..6=Saturday)</td></tr>
<tr><td>%X</td><td>年間の週、日曜日が週の初日、数字、4 桁、%V とともに使用</td></tr>
<tr><td>%x</td><td>年間の週、月曜日が週の初日、数字、4 桁、%v とともに使用</td></tr>
<tr><td>%Y</td><td>年、数字、4 桁</td></tr>
<tr><td>%y</td><td>年、数字 (2 桁)</td></tr>
<tr><td>%%</td><td>リテラル 「%」 文字</td></tr>
<tr><td>%x</td><td>x (上記にないすべての 「x」)</td></tr>
</tbody></table>
</div>Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.comtag:blogger.com,1999:blog-3614531302648713425.post-40274696915923999122020-04-16T19:11:00.006+09:002022-02-09T10:39:14.237+09:00VB.NET HTMLおよびXML文書を作成する<h4>HTML, XML文字列の生成</h4>
プログラムやアプリ内で、HTMLやXMLを出力する処理は意外に多くあります。今日は簡単にHTMLを生成する方法について紹介します。<br />
タグ文字の作成にはXmlDocument クラスを使用することができます。以下に簡単な例を示します。<br />
<script class="brush:vb" title="関数" type="syntaxhighlighter"><![CDATA[
Private Sub makeHTL()
Dim document As New Xml.XmlDocument
Dim ul As Xml.XmlElement = Nothing
Dim li As Xml.XmlElement = Nothing
Dim span As Xml.XmlElement = Nothing
Dim text As Xml.XmlText = Nothing
ul = document.CreateElement("ul") 'ulタグを作成します。
setAttributes(document, ul, "class", "style-ul") 'ulタグにstyle-ulというクラスをセットします。
document.AppendChild(ul) 'ulタグをドキュメントオブジェクトに追加します。
li = document.CreateElement("li") 'liタグを作成します。
setAttributes(document, li, "class", "style-li") 'liタグにstyle-liというクラスをセットします。
span = document.CreateElement("span") 'spanタグを作成します。
Text = document.CreateTextNode("こんにちは") 'textノードを作成し、「こんにちは」という値をセットします。
span.AppendChild(text) 'textノードをspanタグに追加します。
li.AppendChild(span) 'spanタグをliタグに追加します。
ul.AppendChild(li) 'liタグをulタグに追加します。
Console.WriteLine(document.InnerXml) '生成した文字列を出力します。
Ens Sub
'ノードの属性値をセットする関数です。
Private Shared Sub setAttributes(ByRef doc As Xml.XmlDocument, ByRef El As Xml.XmlElement, attrName As String, attrValue As String)
Dim attr As Xml.XmlAttribute
attr = doc.CreateAttribute(attrName)
attr.Value = attrValueEl.Attributes.Append(attr)
End Sub
]]></script>
上記のようにしてHTMLやXML文字列を作成できます。
整形していますが、出力結果は以下の通りです。
<script class="brush:html" title="結果" type="syntaxhighlighter"><![CDATA[
<ul class="style-ul">
<li class="style-li">
<span>こんにちは</span>
</li>
</ul>
]]></script><a href="https://rc-support.org/2022/02/02/vb-net-html_xml_doc_make/" target="_blank">こちら</a>もご覧くださいHirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-37765904108794569782020-01-14T00:38:00.000+09:002020-01-14T00:38:14.743+09:00Excelで簡単にHPのボタンを作る<div class="separator" style="clear: both; text-align: center;">
</div>
Excelでホームページに使用するボタンを簡単に作る方法を紹介します。<br />
Excel(2013以降のバージョン)を使うなら、クオリティなどは別として、photoshopなどの有料ソフトや使い慣れないお絵かきソフトを使わずに簡単にボタン(イメージファイル)を作成できます。個人的にはデモ画面などを作る際に利用しています。<br />
<br />
<h2>
必要なソフト</h2>
Microsoft Excel (2013以降のバージョン)<br />
<br />
<h2>
手順</h2>
<h4>
①Excel上でボタンイメージを作成</h4>
<div style="padding-left: 20px;">
<div>
Excelの図形描画機能を利用してボタンを作成します。</div>
<div>
挿入タブ⇒図形 で図形を追加します。</div>
<div>
図形を選択した状態で右クリック⇒テキストの編集でボタンに表示する文字を追加します。</div>
<div>
図形の形、線の色、背景色などもグラデーションをかけたり、ある程度装飾できます。(ここでは省略します)</div>
<div>
<br /></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWsKHWCx7TyMR2Il0zIKdStdTsYc7GtvBT0OB3heIVr92w2ptS_8xP-vUoataz6HZwhzisxbOjkDWjtRSH30g1jVZcHhNK8vwjeE8Mef7PNpo_ZU2a3MKQjr07vfx9Q4ao98ZluEmpT5BZ/s1600/iconex1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="582" data-original-width="649" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWsKHWCx7TyMR2Il0zIKdStdTsYc7GtvBT0OB3heIVr92w2ptS_8xP-vUoataz6HZwhzisxbOjkDWjtRSH30g1jVZcHhNK8vwjeE8Mef7PNpo_ZU2a3MKQjr07vfx9Q4ao98ZluEmpT5BZ/s1600/iconex1.PNG" /></a></div>
<br />
<h4>
②Webページ形式で保存</h4>
<div style="padding-left: 20px;">
名前を付けて保存します。<br />
この際、ファイルの種類(T)をWebページ(*.htm;*.html)とします。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggmUxyy9M8GpG9qAqiV3tVK-9SUohhz11QqCS-DqQkik8gMfBzXK2vW6mFb5Rms0fYFTmEWZL_v-LxWwZy2V4qAjOIDgW6hpGXxXT8jv1mr6JkQ1c0qAmk1-EphT040mHDAMgtTfD8Qh2N/s1600/iconex2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="610" data-original-width="946" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggmUxyy9M8GpG9qAqiV3tVK-9SUohhz11QqCS-DqQkik8gMfBzXK2vW6mFb5Rms0fYFTmEWZL_v-LxWwZy2V4qAjOIDgW6hpGXxXT8jv1mr6JkQ1c0qAmk1-EphT040mHDAMgtTfD8Qh2N/s1600/iconex2.PNG" /></a></div>
<br />
<div style="padding-left: 20px;">
保存すると、Book1.htmlというファイルと、Book1.filesというフォルダができます。<br />
Book1.htmlには、先ほどのExcel画面イメージがhtml(WEB形式)で保存されています。<br />
Book1.filesには、Book1.htmlを表示するためのファイルが保存されています。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGeXVe1_vEWwaN5r1klvEJ_IxonInWl7nHNHUAbFRre1ktJ3Nx2zKfJjC9QawZSkKG0UUSkEuaU2ad2FBATqK1Lrmq9w_E43vYQEmZK3hVXQSbJ6vIdn57lfysMo6dSW7X6pwnP7JzX2fS/s1600/iconex3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="464" data-original-width="917" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGeXVe1_vEWwaN5r1klvEJ_IxonInWl7nHNHUAbFRre1ktJ3Nx2zKfJjC9QawZSkKG0UUSkEuaU2ad2FBATqK1Lrmq9w_E43vYQEmZK3hVXQSbJ6vIdn57lfysMo6dSW7X6pwnP7JzX2fS/s1600/iconex3.PNG" /></a></div>
<br />
<div style="padding-left: 20px;">
Book1.filesフォルダを開くと、image001.png, image002.pngというファイルがあります。今回の場合は、どちらも同じですが、先ほどExcel上で作った図形オブジェクトがpngファイルとして保存されています。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHW_Z1qjl6hV4yYbXfuL_Tj1CujfSl6dYMxrw3ncI68yQIPc8mUmQhRo20n9lOJhBeZtq4CYvYlopyOkQvY1GD8qQNaOF8RRZWGjzne4BxWl_YbCnEqZLi3mEvYFoxdMqJPONjA00NpOD0/s1600/iconex4.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="464" data-original-width="917" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHW_Z1qjl6hV4yYbXfuL_Tj1CujfSl6dYMxrw3ncI68yQIPc8mUmQhRo20n9lOJhBeZtq4CYvYlopyOkQvY1GD8qQNaOF8RRZWGjzne4BxWl_YbCnEqZLi3mEvYFoxdMqJPONjA00NpOD0/s1600/iconex4.PNG" /></a></div>
<br />
<div style="padding-left: 20px;">
開くとこんな感じです。<br />
これをホームページのボタンとして使用することができます。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0YDVT0Ih3pH47dkPIHEoVqQOh_M4GMP0aGA1Az_gqPIqoWUbDZlGGnKSt9jSUbopM-xKvgWSox8CXKdNvgnuy7IOGTrFls1YJHUelJyANFY5OmsRb3wPlGUjjnB1I2RCBigG2lw89j2LJ/s1600/iconex5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="501" data-original-width="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0YDVT0Ih3pH47dkPIHEoVqQOh_M4GMP0aGA1Az_gqPIqoWUbDZlGGnKSt9jSUbopM-xKvgWSox8CXKdNvgnuy7IOGTrFls1YJHUelJyANFY5OmsRb3wPlGUjjnB1I2RCBigG2lw89j2LJ/s1600/iconex5.PNG" /></a></div>
<br />
この機能は個人的には便利で気に入っています。<br />
是非一度試してみてください。<br />
<br />
<h2>
注意点</h2>
この記事の手順では書いていませんが、注意点としてExcelでボタン等を作った後、一度Excelブック形式(.xlsx)で保存されることをお勧めします。いきなりWebページ形式(.html)で保存しExcel画面を閉じると、そのExcelデータは保存されず消えてしまいます。<br />
ボタンを作ったはいいが、少し色を調整したいという時に、元のExcelファイルがない状態なので、いちから作りなおさないといけません。何度か私も失敗しました。<br />
<br />
<br />Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-35128934939664487472019-12-11T11:28:00.001+09:002022-01-14T22:11:47.684+09:00MySql トランザクションが効かない? [mysql] mysqlを利用したアプリケーションのテストをしていて、更新処理中にエラーが発生しても、データがロールバックされていないことに気付きました。アプリケーション側を見直してみましたが、トランザクション処理やエラーフックにも問題がありませんでした。<br />
<br />
mysqlに関して初心者なので何か設定に問題があるのかもと思ってネットで調べた所、mysql側の設定に問題がありました。<br />
<br />
<h3>
MyISAM</h3>
mysqlにはストレージエンジンというものがあるらしく、その設定がMyISAMになっていました。平たく言うとトランザクション処理ができないようです。デフォルトのストレージエンジンがMyISAMになっていたらしく、知らずにテーブルを作っていました。通常InnoDBを利用するようです。<br />
<br />
■■変更■■<br />
my.confを開き、[mysqld]の下に一文を追加します。<br />
default-storage-engine=innodb<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi61iPeuQh84OOlfnYqPns4zW0mLxQiYwft2AZTZd_u0fn21VqVBPTXumbW4BHkggF3vZZ_Pz_oKil3L7S-IcE57FCOgbnbFRQZY2zV2fov1ixXqugUsmswHy1Fd-VnvaLM_QBCUzHhoLZY/s1600/m_engine1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="274" data-original-width="350" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi61iPeuQh84OOlfnYqPns4zW0mLxQiYwft2AZTZd_u0fn21VqVBPTXumbW4BHkggF3vZZ_Pz_oKil3L7S-IcE57FCOgbnbFRQZY2zV2fov1ixXqugUsmswHy1Fd-VnvaLM_QBCUzHhoLZY/s320/m_engine1.png" width="320" /></a></div>
<br />
そして、mysqlを再起動!!<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL5ZX7oJwCRKUvikGjYMzItP_UkIVTLstj5X3xfyYLxLcXuH0yo3j23tPPGq4_wf9IPQ1I3edjaQmQb7xBiFvTCYglHAkm9BZOUBvvJ6XEkvMUuVedxY1mNVBY18CZQQjO2or6FH06aLuC/s1600/m_engine2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="251" data-original-width="350" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL5ZX7oJwCRKUvikGjYMzItP_UkIVTLstj5X3xfyYLxLcXuH0yo3j23tPPGq4_wf9IPQ1I3edjaQmQb7xBiFvTCYglHAkm9BZOUBvvJ6XEkvMUuVedxY1mNVBY18CZQQjO2or6FH06aLuC/s320/m_engine2.png" width="320" /></a></div>
<br />
MySql Workbenchで確認してみるとデフォルトのストレージエンジンがInnoDBになっていることが確認できました。<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSFtNyZ7K33VPTDr_9KK7gyJnT0aIVpy0zEUjUV9sxczkAdJeBa-ciDqgpoYY37gwv1YdkYzBdPk4UWoLw3ybycoV30vTj18bocmRjNJf9NtYbkFfYIv_ug_K5j1lhbRcv8VOeNzodWfnr/s1600/m_engine3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="243" data-original-width="350" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSFtNyZ7K33VPTDr_9KK7gyJnT0aIVpy0zEUjUV9sxczkAdJeBa-ciDqgpoYY37gwv1YdkYzBdPk4UWoLw3ybycoV30vTj18bocmRjNJf9NtYbkFfYIv_ug_K5j1lhbRcv8VOeNzodWfnr/s320/m_engine3.png" width="320" /></a></div>
<br />
さらに既存のテーブルのストレージエンジンをWorkbench経由でMyISAMからInnoDBに変更しました。<br />
最後に確認。<br />
select table_name, engine from tables where table_schema = 'スキーマ名'<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG6FtQFT_5JkVuK8idWPJ2mNKQZUYpYsKJI_OmKt3DW-oPzntepfJmgfZKTiNmOZJBTwhB1ombWcYf1zC8emWs0RDVhITLuKIHxpbsubfxR731HfA8CK_i_TpkJxeEQm4PwmWysaUc6Jxa/s1600/m_engine4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="114" data-original-width="350" height="104" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG6FtQFT_5JkVuK8idWPJ2mNKQZUYpYsKJI_OmKt3DW-oPzntepfJmgfZKTiNmOZJBTwhB1ombWcYf1zC8emWs0RDVhITLuKIHxpbsubfxR731HfA8CK_i_TpkJxeEQm4PwmWysaUc6Jxa/s320/m_engine4.png" width="320" /></a></div>
<br />
<br />
最終的に開発中のアプリケーションで確認した所、無事トランザクション処理が動作しました。<br />
以上です。<br />
<br />Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-71702594590161606482019-12-08T14:18:00.001+09:002022-01-13T10:41:16.573+09:00Line BotをPHPで作る - はじめに<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDOMDLG91tQBZkJiLZYvDvE7D7uo0wxJbyFJeKpUdsJ5pg6c4fYAdaIcP5soR5E-tkA1e3dCjo2Jgx5kSKoa0DHVV7mqAObYD53QWp9XJ88lgbjJctOUwrqG25CyzEh8-tNPp3ApeMmGAz/s1600/LINE_APP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1000" data-original-width="1000" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDOMDLG91tQBZkJiLZYvDvE7D7uo0wxJbyFJeKpUdsJ5pg6c4fYAdaIcP5soR5E-tkA1e3dCjo2Jgx5kSKoa0DHVV7mqAObYD53QWp9XJ88lgbjJctOUwrqG25CyzEh8-tNPp3ApeMmGAz/s320/LINE_APP.png" width="320" /></a></div>
<br />
PHPでLine Botを作成した時のメモを少しづつ書きます。</div>
<div>
<br /></div>
<h2>
Lineボットとは</h2>
<div>
Line Botとは、Line上で動くチャットボットのことを言います。「ボット」とは自動的に処理を実行するソフトウェアのことです。LineボットとはLineが提供しているMessaging APIを利用してその「ボット」を実装するものです。Lineボットにメッセージを送ると、ボットからのリアクションが返ってきます。</div>
<div>
<br /></div>
<h2>
活用方法</h2>
<div>
多くの企業では、商品の検索、予約機能、アンケートなどに使われています。また個人的に作成して、アラート機能や天気予報の自動取得、画像検索などにも利用されています。</div>
<div>
<br /></div>
<h2>
開発の流れ</h2>
<div>
<div>
「Linebot作り方」などで検索すると多くのサイトが見つかります。私はPHPで作る方法を探してみました。あくまで私個人が試した方法なので、いろんなパターンがあると思いますが、参考になれば幸いです。</div>
<h3>
必要物</h3>
作成に必要なものは以下の通りです。</div>
<div>
<ul>
<li>LINEアカウント</li>
<li><a href="https://hiroasake.blogspot.com/2018/10/line-bot-php-vmware.html" target="_blank">サーバー</a></li>
<li>SSL証明書</li>
</ul>
</div>
<div>
<h3>
開発の流れ</h3>
<div>
<ul>
<li><a href="https://hiroasake.blogspot.com/2018/10/line-botphp-1.html" target="_blank">LINE Developers のサイトでLINEボットアカウント、Channelを作成</a></li>
<li><a href="http://hiroasake.blogspot.com/2018/10/line-botphp-bot.html" target="_blank">LINEボット本体をPHPにて作成し、サーバーへ配置</a></li>
<li>サーバーのURLをLINE Developers コンソールで登録</li>
</ul>
</div>
という流れになります。<br />
<br />
これから随時書いていきます。</div>
<div>
<br /></div>
<div>
<br /></div>
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-664564402373784412019-12-08T14:10:00.000+09:002019-12-08T14:10:41.205+09:00VMware 「このマシンは移動またはコピーされた可能性があります」 [その他]<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9fC1Xz_20x0W6-hVu5oIeTS-AJWjvhWfw06baReUooeu_-uNNVG_G5pQGtSNOAtHLJlq_TMUmp02AOOelUAkmOfE1PX8FF11l1sevOfRMrMNilAbV0t9bEbj693QavVWfiC17OT2yKbPI/s1600/programming.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1068" data-original-width="1600" height="427" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9fC1Xz_20x0W6-hVu5oIeTS-AJWjvhWfw06baReUooeu_-uNNVG_G5pQGtSNOAtHLJlq_TMUmp02AOOelUAkmOfE1PX8FF11l1sevOfRMrMNilAbV0t9bEbj693QavVWfiC17OT2yKbPI/s640/programming.jpg" width="640" /></a></div>
既存のVMwareのファイルをコピーして新しい環境を作る際、<br />
「このマシンは移動またはコピーされた可能性があります」というメッセージが表示されます。<br />
そして「移動」「コピー」のどちらかを選択する必要があります。<br />
<br />
実際コピーしたのですが、「コピーしました」を選択した場合、MACアドレスが新しく作られます。この場合、ネットワークが認識されない場合があります。<br />
「移動しました」にすると問題なく動作しました。<br />
<br />
<span style="color: red;">ただし使用する環境によっては「コピーしました」が正解の場合もあるので、環境によりけりだそうです。</span><br />
<div>
<br /></div>
以上です。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-35793133140428984082019-12-08T14:01:00.003+09:002022-01-17T11:13:42.404+09:00PHP DOM操作で別ドキュメントからのノードをコピーする方法 Uncaught DOMException: Wrong Document Error inDOMDocumentを使ってHTMLの特定要素を抽出し別ドキュメントにコピーしようとした際に以下のエラーが発生した。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIFROmvofPyuQDDPBjFR58uMQwNdNpEyW7-zXLuOlanKUNKGQB-B8Xiv9lWAILbx9ngrdo7BYEcJXX_mVhOON-F9C0ZkyX2bisv501MsStjBcO271NhOaWhzZApYJdsiW45D1fc5HSahP4/s1600/phplogo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIFROmvofPyuQDDPBjFR58uMQwNdNpEyW7-zXLuOlanKUNKGQB-B8Xiv9lWAILbx9ngrdo7BYEcJXX_mVhOON-F9C0ZkyX2bisv501MsStjBcO271NhOaWhzZApYJdsiW45D1fc5HSahP4/s1600/phplogo.png" /></a></div>
<b>PHP Fatal error: Uncaught DOMException: Wrong Document Error in</b><br />
<br />
エラーになったソースは以下の通りです。
<script class="brush:php" title="エラー" type="syntaxhighlighter"><![CDATA[
//HTMLファイルをdomで読込む
$htmlTo = file_get_contents($htmlpathTo);
$docTo = new DOMDocument;
libxml_use_internal_errors( true ); //Warning: DOMDocument::loadHTML() を抑制する
$docTo->loadHTML('<?xml encoding="UTF-8">'.$htmlTo); //xmlでラップ(UTF-8で読むため)
libxml_clear_errors(); //Warning: DOMDocument::loadHTML() を抑制する
$xpTo = new DOMXPath($docTo);
$xyz = $xp1->query('//*[@class="xyz"]'); //xyzのクラス名を持つ要素を抽出
$parent = $xyz->parentNode;
$htmlFm = file_get_contents($htmlpathFm);
$docFm = new DOMDocument;
libxml_use_internal_errors( true ); //Warning: DOMDocument::loadHTML() を抑制する
$docFm->loadHTML('<?xml encoding="UTF-8">'.$htmlFm); //xmlでラップ(UTF-8で読むため)
libxml_clear_errors(); //Warning: DOMDocument::loadHTML() を抑制する
$xpFm = new DOMXPath($docFm);
$target = $xpFm->query('//*[@class="abc"]'); //abcのクラス名を持つ要素を抽出
foreach ($target as $item) {
$newNode = $item->cloneNode(true);
$parent->insertBefore($newNode, $xyz); //$xyzノードの前に$newNodeを挿入
}
]]></script>
<br />
<b>やりたい事</b><br />
$htmlpathFmにあるhtmlファイルから、abcというクラス名を持つ要素を抽出します。それを$htmlToにあるhtmlファイルのxyzというクラス名を持つ要素の前に挿入する。(よくないのですが、xyzのクラス名を持つ要素は一つだけという前提です。)<br />
上記コードを実行すると"PHP Fatal error: Uncaught DOMException: Wrong Document Error in …"というエラーが発生します。$itemをコピーした$newNodeは$docFm所有のノードなので、ことなるドキュメント$docToのノードに挿入することは出来ないようです。それで上記のエラーが発生するようです。知識不足でした。<br />
解決策としては<a href="https://www.php.net/manual/ja/domdocument.importnode.php">importNode</a>メソッドを使用するようです。<br />
<script class="brush:php" title="解決策" type="syntaxhighlighter"><![CDATA[
//HTMLファイルをdomで読込む
$htmlTo = file_get_contents($htmlpathTo);
$docTo = new DOMDocument;
libxml_use_internal_errors( true ); //Warning: DOMDocument::loadHTML() を抑制する
$docTo->loadHTML('<?xml encoding="UTF-8">'.$htmlTo); //xmlでラップ(UTF-8で読むため)
libxml_clear_errors(); //Warning: DOMDocument::loadHTML() を抑制する
$xpTo = new DOMXPath($docTo);
$xyz = $xp1->query('//*[@class="xyz"]'); //xyzのクラス名を持つ要素を抽出
$parent = $xyz->parentNode;
$htmlFm = file_get_contents($htmlpathFm);
$docFm = new DOMDocument;
libxml_use_internal_errors( true ); //Warning: DOMDocument::loadHTML() を抑制する
$docFm->loadHTML('<?xml encoding="UTF-8">'.$htmlFm); //xmlでラップ(UTF-8で読むため)
libxml_clear_errors(); //Warning: DOMDocument::loadHTML() を抑制する
$xpFm = new DOMXPath($docFm);
$target = $xpFm->query('//*[@class="abc"]'); //abcのクラス名を持つ要素を抽出
foreach ($target as $item) {
$newNode = $docTo->importNode($item, true); //$docToに$itemノードをインポートする
$parent->insertBefore($newNode, $xyz); //$xyzノードの前に$newNodeを挿入
}
]]></script>
これで無事に解決しました。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-82719023710787608202019-12-04T12:07:00.001+09:002021-09-09T12:48:46.756+09:00MySqlでセレクトしたレコードの一部を表示する方法mysqlのselect文で取得したレコードの一部を表示する方法を説明します。<br />
select文で値を取得する際、大量の検索結果の中から一部だけ取り出したい場合があります。<br />
webの画面などで1ページに20項目のレコードを表示し、その前後のデータは「次へ」「前へ」などのナビゲーションリンクを貼るという場合です。<br />その際は全レコード中、n行目から20行分のレコードが欲しいということがあります。<br />
<span style="color: red;">(※最近は<a href="https://datatables.net/">DataTables.js</a>などのプラグインを使えばできるので需要は少ないかもしれません。)</span><br />
その際、次のようなselect文を書きます。<br />
<pre class="prettyprint lang-sql linenums">
select 名称
, CD
from テーブル
order by CD
limit 20 offset 40
</pre>
n件のデータ中、40レコード目(offset)から20レコード(limit)を表示する。というものです。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-11720874168018255712019-10-17T10:14:00.008+09:002022-01-18T00:19:19.920+09:00jQuery ループ処理 連想配列や要素の値をループで取得<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/a/AVvXsEhbCAtpsfA2aBkGJgD8yq61HRsBGKLvGW0QztjS7r4j5mBt2zmMqX5gUgtIBGf2UPWfgLa7w-LYm90baWzaETXcLUL-jHY7GIjvlVBm0GDfLk-j_X2mosjokGW49QIwvclMs6sEUkajS_6aDPiwLbW3auly6P7OH8UOhGLI2M-a6iNi5wwlIqZCwpDHKA=s1160" imageanchor="1" style="margin-left: 1em; margin-right: 1em;">
<img style="padding:10px;" border="0" data-original-height="295" data-original-width="1160" height="163" src="https://blogger.googleusercontent.com/img/a/AVvXsEhbCAtpsfA2aBkGJgD8yq61HRsBGKLvGW0QztjS7r4j5mBt2zmMqX5gUgtIBGf2UPWfgLa7w-LYm90baWzaETXcLUL-jHY7GIjvlVBm0GDfLk-j_X2mosjokGW49QIwvclMs6sEUkajS_6aDPiwLbW3auly6P7OH8UOhGLI2M-a6iNi5wwlIqZCwpDHKA=w640-h163" width="640" /></a>
</div>
<br />
<p><br /></p><p>jQueryで連想配列や要素の値をループで取得する方法について紹介します。</p>
<h2>Object.keys().forEach</h2>
<h4>連想配列の値を取得</h4>
Object.keysを使用すると連想配列をループで回して、keyと値を取得することができます。
<script class="brush:js" title="ループ" type="syntaxhighlighter"><![CDATA[
//連想配列
var param = {user_id:1, user_name:"山田 太郎", user_sex:1};
//ループで取得
Object.keys(param).forEach(function(key){
console.log("key="+key);
console.log("val="+param[key]);
});
]]></script>
<h4>結果は以下の通りです</h4>
<script class="brush:js" title="結果" type="syntaxhighlighter"><![CDATA[
key=user_id
val=1
key=user_name
val=山田 太郎
key=user_sex
val=1
]]></script>
<h2>$.each</h2>
更に$.eachの方法でも可能です。
<h4>連想配列の値を取得</h4>
<script class="brush:js" title="$.eachでのループ" type="syntaxhighlighter"><![CDATA[
//連想配列
var param = {user_id:1, user_name:"山田 太郎", user_sex:1};
//ループで取得
$.each(param, function(key, item){
console.log("key="+key);
console.log("val="+item);
});
]]></script>
<h4>結果は以下の通りです</h4>
<script class="brush:js" title="結果" type="syntaxhighlighter"><![CDATA[
key=user_id
val=1
key=user_name
val=山田 太郎
key=user_sex
val=1
]]></script>
<h2>$.eachで子要素取得</h2>
$.eachでは要素のループも可能です。
<h4>HTML</h4>
<script class="brush:js" title="要素でのループ" type="syntaxhighlighter"><![CDATA[
<ul class="list">
<li>日本</li>
<li>ネパール</li>
<li>インド</li>
<li>アメリカ</li>
</ul>
]]></script>
<h4>ループ</h4>
<script class="brush:js" title="ループ" type="syntaxhighlighter"><![CDATA[
//ループで取得
$.each($(".list li"), function(idx, li){
console.log(idx+':'+$(li).text());
});
]]></script>
<h4>結果は以下の通りです</h4>
<script class="brush:js" title="結果" type="syntaxhighlighter"><![CDATA[
0:日本
1:ネパール
2:インド
3:アメリカ
]]></script>
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-72741128654858068222019-10-06T09:37:00.002+09:002022-01-10T22:20:36.396+09:00VB.Net ファイル操作 [.NET].Netでフォルダやファイルの削除、存在チェックは以下のようにできます。<br />
<h3>.NETファイル操作</h3>
<script class="brush:vb" title="ファイル操作" type="syntaxhighlighter"><![CDATA[
System.IO.Directory.Delete(sPath) 'フォルダ削除'
System.IO.Directory.CreateDirectory(sPath) 'フォルダ作成'
'フォルダ存在確認'
If System.IO.Directory.Exists(sPath) Then
MsgBox("存在します。", vbInformation)
Else
MsgBox("存在しません。", vbExclamation)
End If
]]></script>
<h3>.NETフォルダ操作</h3>
<script class="brush:vb" title="フォルダ操作" type="syntaxhighlighter"><![CDATA[
System.IO.File.Delete(sPath) 'ファイル削除'
System.IO.File.Copy(sPathFrom, sPathTo) 'ファイルコピー'
'ファイル存在確認'
If System.IO.File.Exists(sPath) Then
MsgBox("存在します。", vbInformation)
Else
MsgBox("存在しません。", vbExclamation)
End If
]]></script>
<br />
便利ですね。
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-60716210563805625452019-09-19T16:19:00.002+09:002022-01-10T22:21:54.629+09:00PostgreSql 列追加 [postgres]Postgresのテーブルに列を追加する方法について説明します。<br />
<h2>PostgreSql 列追加</h2>
t_testというテーブルにaddcol1 ~ addcol3 の列を追加してみます。<br />
<script class="brush:sql" title="列追加" type="syntaxhighlighter"><![CDATA[
ALTER TABLE t_test
ADD COLUMN addcol1 smallint
, ADD COLUMN addcol2 smallint
, ADD COLUMN addcol3 smallint;
]]></script>
<br />
<h2>PostgreSql 列に説明分を追加</h2>
追加した列の説明を記入します。<br />
<script class="brush:sql" title="列追加 説明文" type="syntaxhighlighter"><![CDATA[
COMMENT ON COLUMN t_test .addcol1 IS '追加列1';
COMMENT ON COLUMN t_test .addcol2 IS '追加列2';
COMMENT ON COLUMN t_test .addcol3 IS '追加列3';
]]></script>
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-78722725553696520432019-08-29T17:04:00.003+09:002022-01-17T11:16:00.665+09:00Postgres レコードの一部のみ取得・表示する方法 [postgres]<h2 style="clear: both;">
limitとoffset</h2>
<div class="separator" style="clear: both;">
Postgresで指定した条件のレコードの内、一部だけ取得したい場合、</div>
<div class="separator" style="clear: both;">
limitとoffsetを使用します。</div>
<div class="separator" style="clear: both;">
以下が使用例です。</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzkJ8W91cDOcG_EEMxWuz78qjQpXiNoJs4le9TEMXI8GrJrlB7_7U3ZE2keAs97Zf8So-tx8WpPpkS0dCql9fDTQc4Lqc-EEXah8n5Uhpf7KWo0Kk1Up9gr6RadWzHPcXsAesmgfb79D_A/s1600/m_full_tbl.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="235" data-original-width="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzkJ8W91cDOcG_EEMxWuz78qjQpXiNoJs4le9TEMXI8GrJrlB7_7U3ZE2keAs97Zf8So-tx8WpPpkS0dCql9fDTQc4Lqc-EEXah8n5Uhpf7KWo0Kk1Up9gr6RadWzHPcXsAesmgfb79D_A/s1600/m_full_tbl.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
testテーブルで3レコード目から5件のデータを取得したい場合、SQLを次のように書きます。<br />
<h4>
■SQL </h4>
<script class="brush:sql" title="limt,offset" type="syntaxhighlighter"><![CDATA[
select * from test
order by id
limit 5 offset 2
]]></script>
すると
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrFfU8HDXBJ5Bg8jr1SU5wgdDq54ZDArwKkwRXFSljdWNyPMD5lVUnahJLmKPiADa3Sjh-F4Lj1Ju7c7orpXhph71PLWoL_PTB9LYrzAF2r-1bAAKWETgeDGFHe6ZefiA26Silq7ismwtC/s1600/m_offset.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="126" data-original-width="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrFfU8HDXBJ5Bg8jr1SU5wgdDq54ZDArwKkwRXFSljdWNyPMD5lVUnahJLmKPiADa3Sjh-F4Lj1Ju7c7orpXhph71PLWoL_PTB9LYrzAF2r-1bAAKWETgeDGFHe6ZefiA26Silq7ismwtC/s1600/m_offset.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
という具合に、必要なレコードのみ抽出してくれます。<br />
limit 5 で5レコード分のデータのみ取得し、<br />
offset 2 で3レコード目からのデータを表示してくれます。<br />
とても便利です。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-27164967910957832042019-08-28T16:32:00.000+09:002019-09-04T12:38:22.169+09:00जापानी समाचारयस blog मा जापानमा भएको मुख्य समाचार, घटना जस्तो विभिन्न जानकारीबारे लेख्ने योजना छ।<br />
<br />
अहिले थुप्रै नेपालीहरूले जापानमा आएका छन्। त्यसैकारण जापानी भाषा समेत जापानको बारेमा बेलाबेलामा लेख्न चाहन्छु।<br />
आज चाहिं जापानी भाषा को अक्षर बारे लेख्नेछु।<br />
<div>
<br /></div>
<h2>
<span style="color: #6fa8dc;">
जापानी भाषा</span></h2>
जापानी भाषामा ३ वटा किसिमको अक्षर प्रयोग गरिन्छ।<br />
<div>
<br /></div>
<h3>
<span style="color: #6fa8dc;">
ひらがな(Hiragana)</span></h3>
<div>
एउटा चाहिं "Hiragana" भनिन्छ।</div>
<div>
जस्तै「あ」、「い」、「う」、「え」、「お」</div>
<div>
नेपरली भाषामा कसरि उच्चारण गर्छ भन्दा </div>
<div>
<div>
「आ」、「इ」、「उ」、「ए」、「ओ」हुन्छ कि?</div>
</div>
<div>
<br /></div>
<h3>
<span style="color: #6fa8dc;">
カタカナ(Katakana)</span></h3>
<div>
अर्को अक्षर चाहिं "Katakana" भनिन्छ।</div>
<div>
「ア」、「イ」、「ウ」、「エ」、「オ」</div>
<div>
<div>
नेपरली भाषामा कसरि उच्चारण गर्छ भन्दा </div>
<div>
「आ」、「इ」、「उ」、「ए」、「ओ」हुन्छ कि?</div>
<div>
<div>
<br /></div>
<div>
"Hiragana" र "Katakana" को अक्षर चाहिं फरक भए तापनि उच्चारण तथा अर्थ एउटा हो।</div>
</div>
</div>
<div>
<div>
त्यसोभए यी दुइटा अक्षर कसरि छुट्याएर प्रयोग गर्छ?</div>
</div>
<div>
<div>
यास विषय चाहिं अर्को मौकामा लेख्न चाहन्छु।</div>
</div>
<div>
<br /></div>
<h3>
<span style="color: #6fa8dc;">
漢字(Kanji)</span></h3>
<div>
तेस्रो अक्षर चाहिं "Kanji " हो।</div>
<div>
<div>
"Kanji" चीनियाँ र जापानीमा प्रयोग गरिन्छ। तर दुइटा भाषाको "Kanji" चाहिं फरक छ।</div>
<div>
<div>
भनेको के हो भन्ने कुरा उदाहरण दिन चाहन्हु।</div>
</div>
</div>
<h4>
<span style="color: #6fa8dc;">
「山」</span></h4>
<div>
"Kanji" चाहिं एउटा शब्दसँग "Onyomi" र "Kunyomi" भन्ने दुइटा उच्चारण छ।</div>
<div>
「山」भन्ने शब्दको "Onyomi" चाहिं "सान" हुन्छ। अनि "Kunyomi" चाहिं "यामा" हुन्छ।<br />
यस शब्दको अर्थ पहाडपर्वत, हिमाल हुन्छ।<br />
<br />
अनि दुइवटा (कहिलेकहीं तिन वटा अथवा चार वटा पनि) "Kanji" मिलेर विभिन्न अर्थ दिन सकिन्छ।<br />
「高山」(उच्चारण : कोउजान)<br />
यो 「高」भन्ने "Kanji" र 「山」भन्ने ”Kanji” जोडिएको छ।<br />
「高」को अर्थ अग्लो हो। त्यसैले 「高山」भन्ने शब्दको अर्थ "अग्लो पहाड" हो।<br />
「高山」लाई "Hiragana" र "Katakana" प्रयोग गरेर लेख्ने हो भने यसरी लेख्न सकिन्छ।<br />
「こうざん」(Hiragana)<br />
「コウザン」(Katakana)<br />
<br />
<h3>
<span style="color: #6fa8dc;">प्रयास</span></h3>
यसरी "Kanji" प्रयोग गर्दा पढ्न र अर्थ बुझ्न सजिलो छ। तर यसको लागि "Kanji" कान्त गर्नु अवाशक छ।<br />
अनि "Kanji" को संख्या धेरै भएकोले प्रयास चाहिन्छ।(प्राय प्रयोग गर्ने ”Kanji” को संख्या २००० भन्दा धेरै हुन्छ।)<br />
<br />
<span style="color: #bf9000;">※मेरो नेपाली भाषाको सिमित भएकोले व्याकरण र शब्द mistake हुन सक्छ।</span> <br />
<br /></div>
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-41237245910723656582019-08-22T19:33:00.000+09:002019-08-22T19:33:15.383+09:00ネパール、関空直行便について2約12年ぶりにネパールと日本の間の直行便が就航します。何度かの延期がありましたがようやく8月29日からの就航となるようです。<br />
<br />
試しにネパールエアラインのサイトで検索をしてみました。<br />
7月に試した時には便がありませんとなりましたが、この度はフライト情報やフライト料金などの詳しい情報が表示されました。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwsZbxG_cQ9bejcmKCyJM7f8LrTtrqYdnoFWE8XgnS4l3J1dN425WHHOacmgUQxF-hyvp5VaRlh8q9xqI-TJ260dNWNBSNBOwNdOxf5uf8MkvNA7cNxkpuwEOkIMPRPPdsqo9ZqiJitCXG/s1600/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF4.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="556" data-original-width="524" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwsZbxG_cQ9bejcmKCyJM7f8LrTtrqYdnoFWE8XgnS4l3J1dN425WHHOacmgUQxF-hyvp5VaRlh8q9xqI-TJ260dNWNBSNBOwNdOxf5uf8MkvNA7cNxkpuwEOkIMPRPPdsqo9ZqiJitCXG/s320/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF4.PNG" width="301" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEwAZ0FmGfePeqZS2qPf37Iw0DjcsJnRkDxI1unaTxouDhqYvfFvzhYOB_oDFJnbn64HlQ7Uj99qdlQJXVO1Mz3_CQUotuEUSQroJZZVTZjg0rCSjFymS3aayPoMfLstHJxE_bOR5di2ZI/s1600/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="702" data-original-width="1163" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEwAZ0FmGfePeqZS2qPf37Iw0DjcsJnRkDxI1unaTxouDhqYvfFvzhYOB_oDFJnbn64HlQ7Uj99qdlQJXVO1Mz3_CQUotuEUSQroJZZVTZjg0rCSjFymS3aayPoMfLstHJxE_bOR5di2ZI/s640/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF5.PNG" width="640" /></a></div>
<br />
料金は直行便という利便性を考慮にいれるとまずまずではないでしょうか。今まではネパールへの渡航は一回の乗り換えが必要でした。トランジットがどれくらいの長さになるか等、考慮に入れる要素が多かったですが、直行便の就航でオプションが一つ増えました。ネパール人の日本への渡航が増えていますが、それに伴い日本からの旅行者も増えていると感じています。観光業がネパール産業の大きな要素なので、この直行便で経済効果があるといいなぁと思っています。<br />
<br />
ネパールエアラインという所が少し怖いですが、一度は乗ってみたいですね。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-57659640523759683352019-07-02T14:35:00.000+09:002019-07-02T14:35:38.161+09:00VirtualBox 共有フォルダ設定<h2>
VirtualBoxの共有フォルダ設定</h2>
VirtualBoxでホスト、ゲスト間のファイルをやり取りするため、共有フォルダを設定する方法を書きます。<br />
<br />
■■■ホスト側の設定■■■<br />
①VirtualBoxの設定画面で、共有フォルダを選択し、右側の追加ボタンを選択する。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLMMJ7WVvEX8VO1qCLBtuSqHTeOMFdKnv2dzf4UuKF1OKOmCbSnb13MFPrGHEz8KkWSDvN0XgrmDbi9tG2sFO73rUZoCWOXTE7Cu5lcbkxe7aWB-7h3-x4aHSvh3g-wKBADOCg1ZU1apdC/s1600/2017041701.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="214" data-original-width="420" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLMMJ7WVvEX8VO1qCLBtuSqHTeOMFdKnv2dzf4UuKF1OKOmCbSnb13MFPrGHEz8KkWSDvN0XgrmDbi9tG2sFO73rUZoCWOXTE7Cu5lcbkxe7aWB-7h3-x4aHSvh3g-wKBADOCg1ZU1apdC/s320/2017041701.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
②ホスト側の共有用のフォルダを指定し、自動マウントにチェックを入れる。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQNFvmUsS9VQbTduIOmh8uKH2-XAVFKHDhPnZTUYoDeeOgzpzEpkIzFJP-_3SJ_FXL3p9tSBIUHmpn1u5H5Khcavhebs58KWCHcs3zMrgyCSaBZENhWxAOtBHIKvLvouu0gzgy17PQsWD_/s1600/2017041702.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQNFvmUsS9VQbTduIOmh8uKH2-XAVFKHDhPnZTUYoDeeOgzpzEpkIzFJP-_3SJ_FXL3p9tSBIUHmpn1u5H5Khcavhebs58KWCHcs3zMrgyCSaBZENhWxAOtBHIKvLvouu0gzgy17PQsWD_/s1600/2017041702.png" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
③Okをおす<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4wmwuFzxp21Hx3_WiprDWNIum6PlUgEpic9wFyG9FmdXYN4lgDD5Bi2GtuEEUnP3epziYzrAEPEKhKGOuNlDqMD98hvnVIc_jjTw36EJFJgXRC0MeO_ULw_NaS-inEMPi7Z-h0AO0X8e2/s1600/2017041703.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="588" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4wmwuFzxp21Hx3_WiprDWNIum6PlUgEpic9wFyG9FmdXYN4lgDD5Bi2GtuEEUnP3epziYzrAEPEKhKGOuNlDqMD98hvnVIc_jjTw36EJFJgXRC0MeO_ULw_NaS-inEMPi7Z-h0AO0X8e2/s320/2017041703.png" width="320" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div style="margin-left: 1em; margin-right: 1em; text-align: left;">
</div>
<br />
■■■ゲスト側の設定■■■<br />
④ネットワークドライブの割り当てでフォルダ名を"\\vboxsvr\共有" ← ホスト側のフォルダ名とする<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJTWsDKR5rPqfqUAeF110cr9GF-hKRJw5r5O1SZ-syA7WzZxvAOvPpZsoz8B0LKXh69RNwkQSUxGyVld5OhKSQQEWLmzmOxpMaovhHXKCdqNKZ3NKdhUtaKHMen2yoWLGrg7TpPm92YQ8T/s1600/2017041704.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="245" data-original-width="417" height="188" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJTWsDKR5rPqfqUAeF110cr9GF-hKRJw5r5O1SZ-syA7WzZxvAOvPpZsoz8B0LKXh69RNwkQSUxGyVld5OhKSQQEWLmzmOxpMaovhHXKCdqNKZ3NKdhUtaKHMen2yoWLGrg7TpPm92YQ8T/s320/2017041704.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
⑤ネットワークドライブに割り当てられる。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBEz-QWr7FlM0S60WovVYWMeCE5vYPqOUCvBZlhlyQEdVu1v9UHGBkhxKIB_oye_bvYvC8YB6BKBpASBUxikHiPCk_AK5rVwTzRil2gRfSbb6n7s9K8pQUqg4oy7CcETzG61zrgylPmIq/s1600/2017041705.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="640" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGBEz-QWr7FlM0S60WovVYWMeCE5vYPqOUCvBZlhlyQEdVu1v9UHGBkhxKIB_oye_bvYvC8YB6BKBpASBUxikHiPCk_AK5rVwTzRil2gRfSbb6n7s9K8pQUqg4oy7CcETzG61zrgylPmIq/s320/2017041705.png" width="320" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
以上です。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-86929228336825813612019-07-02T14:33:00.001+09:002021-09-09T12:55:18.848+09:00VB.NET 改行削除 [.NET]テキストボックスにコピペされた改行文字を消去したく以下の方法を試してみました。<br />
<br />
<h2>改行コードの削除</h2>
<pre class="prettyprint lang-vb linenums">Private Sub txtExp_Validated(sender As Object, e As System.EventArgs) Handles txtExp.Validated
//改行文字削除
Dim sText As String = txtExp.Text
txtExp.Text = sText.Replace(vbLf, "").Replace(vbCr, "")
End Sub
</pre>
テキスト編集終了時に改行文字が削除されることが確認できました。<br />
置換対象文字にvbNewLineを指定すると上手く機能しない場合があります。<br />
vbNewLineは結局CR+LFなので、分けて置換する方が確実なようです。<br />
<br />
置換するタイミングですが、アプリケーションによるとは思いますが、色々検討してみたいと思います。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-60128942219932334322019-06-26T17:38:00.001+09:002021-09-09T12:55:51.867+09:00DataTableのソート [.NET]<h2>
DataTableのソート</h2>
DataTable内の列を指定してソートする方法を説明します。
<pre class="prettyprint lang-vb linenums">
Public Shared Function SortTable(ByVal oTbl As DataTable, ByVal sSortCol As String) As DataTable
Dim oView As New DataView(oTbl)
oView.Sort = sSortCol '列を降順に並べ替える'
Return oView.ToTable '並び替え後のレコードを返す'
End Function
</pre>
ソートするにはDataViewオブジェクトを使用します。
Sortプロパティーにソートしたい列名を入力します。
そしてToTableメソッドで並び替え後のDataTableを返すことができます。
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-61926574508721188582019-06-24T13:12:00.001+09:002021-09-09T12:58:33.518+09:00VB.NET Dictionaryの使い方VB.NETのDictionaryの使い方について説明します。<br />
<br />
<h2>
Dictionaryの使用方法</h2>
<pre class="prettyprint lang-vbs lang-vb linenums">
'ディクショナリ宣言'
Dim oDic As New Dictionary(Of String, String)
'値入力'
oDic("001") = "北海道"
oDic("002") = "青森"
oDic("003") = "秋田"
oDic("004") = "岩手"
oDic("005") = "宮城"
oDic("006") = "山形"
oDic("007") = "福島"
'値取得 (004)'
Dim sName As String = oDic("004")
Console.WriteLine("{0}", sName)
'キーを削除'
oDic.Remove("004")
'キー存在確認'
If oDic.ContainsKey("004") Then
Console.WriteLine("キー、004は存在します。")
Else
Console.WriteLine("キー、004は存在しません。")
End If
'値存在確認'
If oDic.ContainsValue("北海道") Then
Console.WriteLine("値、北海道は存在します。")
Else
Console.WriteLine("値、北海道は存在しません。")
End If
</pre>
<br />
<h3>
出力結果</h3>
<pre class="prettyprint lang-text linenums">
岩手
キー、004は存在しません。
値、北海道は存在します。
</pre>
何かと便利ですね。Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-80146308095373100142019-06-19T15:01:00.000+09:002019-06-19T18:11:32.067+09:00ネパール、関空直行便について<h2>
ネパールへの直行便</h2>
ネパールエアラインズによるカトマンズ、関西国際空港間の直行便が就航するという情報が一年前ぐらいから流れています。<br />
<br />
ネパールの新聞にも7月を目標にという見出しが出ていました。<br />
<a href="https://kathmandupost.ekantipur.com/news/2019-04-26/nepal-airlines-receives-fare-clearance-for-osaka-flights.html">https://kathmandupost.ekantipur.com/news/2019-04-26/nepal-airlines-receives-fare-clearance-for-osaka-flights.html</a><br />
<br />
こちらのサイトにも<br />
<a href="https://travel.watch.impress.co.jp/docs/news/1184861.html">https://travel.watch.impress.co.jp/docs/news/1184861.html</a><br />
<div style="border-left: 7px solid Lightgrey; padding-left: 15px; margin:10px 0px 10px 10px;">
ネパール航空は、7月4日に関西国際空港~トリブバン国際空港(カトマンズ)線を新規就航する。<br />
関空への就航は2006年の冬期スケジュール以来、約12年ぶりとなる。また今回の就航により日本で唯一のネパール直行便が復活となる。<br />
使用機材は、エアバス A330-200型機、火、木、土曜の週3便での運航となる。<br />
ネパール航空の関西国際空港~トリブバン国際空港(カトマンズ)線<br />
RA412便: 関空(13時55分)発~カトマンズ(18時00分)着、火・木・土曜運航<br />
RA411便: カトマンズ(02時30分)発~関空(11時55分)着、火・木・土曜運航<br />
使用機材: エアバス A330-200型機(ビジネスクラス18席、エコノミークラス256席)</div>
とありました。<br />
いよいよ、なのでしょうか。試しにネパールエアラインのサイトで便の検索をしてみました。情報通り行き先にOsakaが出ていました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipLqoKcx859HvTedOqQCgquBzQxIuHLsBOuxVDnrrFRxNpIryhsYCRN3M9wjjf-g6GtoEcrcpAL1xsjbLPxemzOkOMBhXAcpXq0zbhZggM9tKj5BS-ggvZGwx7a9OnJBILEW5Ap_gVyYL7/s1600/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="522" data-original-width="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipLqoKcx859HvTedOqQCgquBzQxIuHLsBOuxVDnrrFRxNpIryhsYCRN3M9wjjf-g6GtoEcrcpAL1xsjbLPxemzOkOMBhXAcpXq0zbhZggM9tKj5BS-ggvZGwx7a9OnJBILEW5Ap_gVyYL7/s1600/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF2.PNG" /></a></div>
<br />
しかし、検索してもヒットしませんでした。国際線のスケジュールにもまだ載っていません。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmH28ugLqrMcny_fHlSTOjIh8Xaj2LxxhgX4gdb4JFd7lQoYX26PTqTgu824_0N8Pk2KKEWgRLGUfGKcXnugrQnr_m38RjiMkv9ehMJqZTiBdyK-kbHpMw0_I0oore6tujXXYLLumJHTGi/s1600/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="726" data-original-width="1236" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmH28ugLqrMcny_fHlSTOjIh8Xaj2LxxhgX4gdb4JFd7lQoYX26PTqTgu824_0N8Pk2KKEWgRLGUfGKcXnugrQnr_m38RjiMkv9ehMJqZTiBdyK-kbHpMw0_I0oore6tujXXYLLumJHTGi/s640/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF1.PNG" width="640" /></a></div>
<br />
<h3>
なぜ?</h3>
別の記事には<br />
<a href="http://sky-budget.com/2019/04/15/%E3%83%8D%E3%83%91%E3%83%BC%E3%83%AB%E8%88%AA%E7%A9%BA%E3%80%8119%E5%B9%B47%E6%9C%88%E3%81%AB%E9%96%A2%E8%A5%BF%EF%BD%9E%E3%82%AB%E3%83%88%E3%83%9E%E3%83%B3%E3%82%BA%E7%B7%9A%E3%81%8B%E3%82%89/">http://sky-budget.com/2019/04/15/%E3%83%8D%E3%83%91%E3%83%BC%E3%83%AB%E8%88%AA%E7%A9%BA%E3%80%8119%E5%B9%B47%E6%9C%88%E3%81%AB%E9%96%A2%E8%A5%BF%EF%BD%9E%E3%82%AB%E3%83%88%E3%83%9E%E3%83%B3%E3%82%BA%E7%B7%9A%E3%81%8B%E3%82%89/</a><br />
<div style="border-left: 7px solid Lightgrey; padding-left: 15px; margin:10px 0px 10px 10px;">
関西~カトマンズ線は週3便での運航となり、以前就航に際し問題となった地上ハンドリング会社(キャセイ関西ターミナルサービス株式会社)の件が解決され次第認可を受ける見込みですが、現在は解決されていることから認可を取得できる見込みとしているようです。※詳細は下の過去の記事をご覧ください<br />
就航に際し、あとは国交省の認可のみとなっている状態ですが、幾度となく安全上の問題などから延期となっているため再び就航が延期となる可能性も十分に考えられます。</div>
という情報もあり、まだ許可が下りていないようです。<br />
<h3>
安全性</h3>
航空会社の安全性を示すランキングを見ると(このサイトの信ぴょう性については分かりません…)<br />
<a href="https://www.airlineratings.com/safety-rating-tool/">https://www.airlineratings.com/safety-rating-tool/</a><br />
7段階中の★一つ(もっとも危険)との評価になっています。そんな理由もあり、許可に時間がかかるのかもしれません。たしかヨーロッパへの乗り入れも禁止されていたと思います。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJhA8_4gX7WgOqw42BF4GwLt5vUP3uyCWYLGtfE0GJeegwQJ0gDCt7gLO_OV94OskIwgPWU1cQAfRDbkYYNN0VohbpGGdgKkiZmQGp7bp1Z5xddVMf59UuBLhRhjqS09jNaVzDoybwz_rf/s1600/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="763" data-original-width="1176" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJhA8_4gX7WgOqw42BF4GwLt5vUP3uyCWYLGtfE0GJeegwQJ0gDCt7gLO_OV94OskIwgPWU1cQAfRDbkYYNN0VohbpGGdgKkiZmQGp7bp1Z5xddVMf59UuBLhRhjqS09jNaVzDoybwz_rf/s640/%25E7%259B%25B4%25E8%25A1%258C%25E4%25BE%25BF3.PNG" width="640" /></a></div>
<br />
<br />
直行便ができるとネパールへのアクセスも非情に楽になりますし、流通も活発になるので日本に住むネパール人にとっても、香辛料などが今までより安く手に入るかもしれませんね。しかし、安全性ランキングが本当なら、利用するのに少し勇気がいるかもしれませんね。<br />
現在、ネパールではポカラやニジガットという都市にも国際空港を作っており、カトマンズのトリブバン空港も整備中です。それで今後、安全性も上がり日本への行き来に利用できることを期待しています。<br />
<br />
気になる料金や荷物の制限などについてもまた調査していきたいと思います。<br />
<br />
<br />Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-73388243747597474522019-05-22T16:56:00.002+09:002021-09-09T12:59:34.108+09:00PHP ファイルの存在確認サーバー内にあるファイルの存在確認方法について書きます。<br />
<br />
<h2>
ファイル存在確認</h2>
ある任意のファイルについて探す場合、<span style="color: #9fc5e8;">file_exists</span>関数を用いることができます。
<pre class="prettyprint lang-php linenums">
if (!file_exists($filepath)) {
echo "以下のファイルが存在しません。 ".$filepath;
} else {
echo "ファイルは存在します。";
}
</pre>
<br />
あるフォルダ内に任意のファイルが存在するか確認する方法では<span style="color: #9fc5e8;">glob</span>関数が便利です。
<pre class="prettyprint lang-php linenums">
//$dir_path内のhtmlファイルの有無を確認
if (count(glob($dir_path."/*.html"))==0) {
echo "処理を中断します。 ".$dir_path."内にhtmlファイルが存在しません。";
}
</pre>
<br />
ついでに上記の例を発展して、あるフォルダ内にあるhtmlファイルを取得する方法も書きます。
<pre class="prettyprint lang-php linenums">
foreach(glob($dir_path."/*.html") as $file) {
echo "ファイル名:".$file;
}
</pre>
$fileにhtmlファイル名(フルパス)が入っています。
<br />
Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-29580144657273679762019-04-15T12:06:00.002+09:002019-04-22T19:04:37.506+09:00建設中の橋が壊れる<h2>
建設中の橋が壊れる(ネパール)</h2>
アンナプルナポストに建設中の橋が壊れたという記事が載っていました。<br />
<a href="http://annapurnapost.com/news/125146">http://annapurnapost.com/news/125146</a><br />
<br />
簡単に訳すと<br />
グルミ郡 ムシコット行政区内の建設中の橋が壊れました。バダガウンとWamitaksarの市場を結ぶ橋で、この事故で工事業者を含め5人が怪我を負ったそうです。原因としては58mの橋の中間に鉄筋が入っておらず、荷重超過で壊れた可能性があるとムシコット行政区長は述べている。
橋は再び設計することによって再び建設されます。<br />
<br />
<h3>
原文
</h3>
<div style="background-color: #555555; border-left: 5px solid lightgrey; margin-left: 20px; padding-left: 10px;">
<br />
गुल्मी : गुल्मीको मुसिकोट नगरपालिकामा बन्दै गरेको पुल भत्किएको छ। शनिबारदेखि ढलान थालिएको पुल आइतबार ढलान गर्दागर्दै भत्किएको हो।
<br />
नगरपालिकाको बडागाउँ र वामीटक्सार बजार जोड्ने पुल भत्किएको हाे । पुल भत्किदा ठेकदारसहित पाँचजना मजदुर घाइते भएका छन्। प्रदेश ५ सरकारले विनियोजन गरेको बजेटबाट पूर्वाधार विकास कार्यालय गुल्मीमार्फत् उक्त पुल निर्माण गर्न लागिएको हो।<br />
<br />
५८ मिटर लामो पुलकोबीच भागमा पिलर उठाइएको छैन। ओभरलोडका कारण पुल भत्किएको हुन सक्ने मुसिकोट नगरपालिकाका नगर प्रमुख सोमनाथ सापकोटाले जानकारी दिए। पुल निर्माणका लागि करिब पाँच करोड बजेट विनियोजन गरिएको साविकको जिल्ला प्राविधिक कार्यालयका इन्जिनियर पारस पन्थीले जानकारी दिए।<br />
<br />
उनका अनुसार उक्त पुल बीचमा पिलर राख्न नपर्ने प्रिटेस्ट डिजाइनको हो। दरमखोलामा पानीको सतह बढेर पुलमुनी राखिएको टेका भासिएकाले पुल भत्किएको हुन सक्ने पन्थीको अनुमान छ। पुल निर्माणको जिम्मा वाईपी जयबुद्ध निर्माण कम्पनी काठमाडौंले लिएको छ।<br />
<br />
पन्थीका अनुसार अब पुन डिजाइन गरेर पुल निर्माण हुनेछ। अघिल्लो वर्षनै निर्माण भइसक्नु पर्ने उक्त पुल डिजाइन फेल हुदा पुन: डिजाइजन गरिएको थियो।<br />
<br /></div>
<br />
よく分からなかったのは、「この橋は、橋の間に鉄筋を入れない、प्रिटेस्ट(プレテスト)デザインだった」と書いてありました。<br />
प्रिटेस्टの意味が分かりませんでした。<br />
試験的なデザインなのでしょうか?そうだとしたら危なすぎますね。それともプレストレス橋という意味なのでしょうか。<br />
<br />
写真をみる限りでは橋脚がない感じです。この長さで橋脚がない場合、橋桁が引っ張り荷重に耐える設計にするか、アーチ橋などにする必要があるのではないかと思いました。最近はネパール各地で橋や道路の建設が行なわれていますが、まだまだ怖いな…と思いました。<br />
<br />Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0tag:blogger.com,1999:blog-3614531302648713425.post-83860365122112605872019-03-25T10:26:00.001+09:002019-03-25T10:26:33.811+09:00MySqlでデーターベースのインポートの際、ファンクションが入らない際の解決方法MySql5.7でエクスポートした、ダンプファイルをMySql8.0でインポートしようとした所、functionが入りませんでした。<br />
<br />
エラー内容<br />
<div style="border-left: 5px solid Lightgrey; padding-left: 10px;">
Error Code: 1419. You do not have the SUPER privilege and binary logging is enabled
</div>
<br />
<a href="https://dev.mysql.com/doc/refman/5.6/ja/stored-programs-logging.html">https://dev.mysql.com/doc/refman/5.6/ja/stored-programs-logging.html</a> に以下の記述がありました。<br />
<div style="border-left: 5px solid Lightgrey; padding-left: 10px;">
関数作成に関する前述の条件 (SUPER 権限を持つ必要があることと、関数が決定的であるか、データを変更しないと宣言する必要があること) を緩和するには、log_bin_trust_function_creators グローバルシステム変数を 1 に設定します。デフォルトでこの変数には 0 の値が設定されていますが、次のように変更できます。<br />
<br />
mysql> SET GLOBAL log_bin_trust_function_creators = 1;<br />
サーバーの起動時に --log-bin-trust-function-creators=1 オプションを使用することによって、この変数を設定することもできます。<br />
<br />
バイナリロギングが有効でない場合、log_bin_trust_function_creators は適用されません。前述のように、関数定義の DEFINER 値が必要としないかぎり、関数の作成に SUPER は必要ありません。
</div>
<br />
インポートの前に、ルート権限で SET GLOBAL log_bin_trust_function_creators = 1; を実行しました。<br />
<br />
その後、インポートすることでエラーなしにすべてインポートすることができました。<br />
<br />Hirohttp://www.blogger.com/profile/11798229443680183105noreply@blogger.com0