カテゴリー
Laravel PHP SQL ただの現状記述 (Daily Activities) インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

Laravelのmodelingで作成した MySQL tableの変更をするには

>php artisan migrate

で migrationを一旦行った MySQLテーブルはそのままだと migrationコマンドを用いても変更不可能です

実際に Web siteを作っている時にこれは不便です 途中で databaseの構造を変更することはよくありますので・・・

そこで検索すると出てきましたね こことか、こことか

>composer require doctrine/dbal

要するに composerを用いて dbalというものをインストールすれば可能になるそうです 忘れないようにここに記しておきました

カテゴリー
Laravel Mac PHP ただの現状記述 (Daily Activities) インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

色々な情報

この MAMP/MySQL/Laravelでの接続不良で随分と調べました。日にちを数えてみたのですが、正解が出てくるまでに、結局約2週間を費やしました。その中で、色々なサイトから貴重な情報を得ることができました。たとえばこのサイトからは、MySQLの password形式について学びました。

MySQLユーザー認証方式変更
MySQLユーザー認証方式変更

結局これが原因の本筋ではありませんでしたが、貴重な情報提供に感謝感謝です。

カテゴリー
SQL インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

MAMPで mysqlをターミナルから動作させるには?

さて、Laravel 6.x or 7.xが何となく走り出しました 通常僕の Macでは local環境では MAMPにより LAMPを実現しています。

もちろん、こんなことしないでも Homebrewで最新の apach, php, mysqlなど走らせてそれで LAMPとするのが本道でしょうが、なかなか自分にはそこまでのスキルがありませんので、ついつい MAMP/XAMPPを頼ってしまいます。

さて、Laravelを走らせて早速つまづいたのが、どうやってMAMPでの mysqlをターミナルで走らせるか? です。

色々調べましたが、MAMPの中の mysql実行ファイルは僕の場合、/Application/MAMP/Library/bin/の中にあることが分かりました。

そこで、

$ ./Application/Library/bin/mysql -u -p

とすることにより動作させることができる筈なのですが、エラーが出るのです

これに対しては、ここで解決しました 良かった良かった

カテゴリー
Python インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

Windows10 Anaconda Spyderの upgradeに失敗する

MacBook Proで走らせている Parallels – Windows10上で、Anacondaをインストールしたのですが、Pythonは最新version 3.7.xがインストールされてご機嫌でしたが、Spyderが3のままであり、どうしても4にupgradeされませんでした。3と4の違いは、4で dark modeに対応して見てくれ気持ちいいのです。そのupgrade内容の詳細に踏み込むことができるほどには、僕の Python愛は足りません。

AnacondaをWindows10にインストールすると、conda promptというターミナル様の端末ができます。この上で、

(base)C:¥Users¥******>

という部分にコマンドである

(base)C:¥Users¥******.conda install spyder=4.01

と打ち込めば upgradeすると書いてあります。しかし、このようにしても、エラーの列が膨大に出て途中でCtrl-Cで止めないと30分かかり、挙句の果てに失敗するのです。

そうそう、その前に Anaconda Navigator、あの例の緑色の輪っかのアイコンのものが、いくらやっても立ち上がらないのです。まあ、立ち上がらんでも conda promptで例えば spyderとか jupyter notebookとか打ち込めでそれらのアプリは立ち上がるのですが、気分良くありません。

これに対しては、ここで見つけたのですが

(base)C:¥Users¥******>anaconda-navigator --reset

と打ち込めば解決してくれました。

それでは、spyderのupgradeはどうすれば良いか?と云えば、これも conda promptで次のように

(base)C:¥Users¥******>conda update -n conda

として、condaコマンドそのものを新しくしてから

(base)C:¥Users¥******>conda update --all

として全てのパッケージを更新し、さらに追い打ちで

(base)C:¥Users¥******>conda update spyder

とすれば、無事現在(2020/FEB/10)の最新版である4.01にupgradeされました。めでたし目出度し

さあこれで、MacOSと Windows10と全く同じ環境の下で Pythonプログラミング、そして将来的に機械学習の勉強可能となりました 素晴らしい世界が広がりそうです

カテゴリー
PHP SQL ただの現状記述 (Daily Activities) インターネット一般 (Internet General) プログラミング (Programming)

昨日よりぶったまげました

いやあ 昨日この現象に気づきました 原因精査にもう一杯一杯となってしまったのです 色々な懸案事項をそっちのけで原因究明に身も心も取られてしまいました

しかし、突然閃きが起こり全て解決しました。それは西暦年号が当然ながら現在は 2020年であり、2019年ではないからだったのです。

現在、鎌倉ライブデモンストレーションの Home Pageにアクセスして例えばコメディカル・セッションを覗いて下さい

そうするとこんなふうにもぬけの殻状態のページが見えるでしょう

もぬけの殻のページ
もぬけの殻のページ

我ながら最初にこの画面見た時、「あーっ、とてつもなく良くないことが起こっている、ページを乗っ取られたのかな」と頭の中が真っ白でした。冷静になり、local serverで動かしても同様なのです。これはおかしい、サーバーを乗っ取られたのであれば、ローカルでも同じ現象が出るのはおかしい、そのように考えました。

そして今朝、シンガポールでコーヒーを飲みながらテストしていて気が付きました。それは kamakuralive.net全体の設定ページに仕込んである次の一文です

$this_year = date('Y');

これにより例えば 次のSQL文が発行され、データベースからデータを読み込むのです

$stmt = $pdo->prepare( "SELECT * FROM `session_tbls2019` WHERE `class` = 'com' AND `year` = '" . $this_year . "' ORDER BY `sessionNo` ASC;" );

要するに、プログラムを時間経過から独立させるために、わざわざ $this_yearという変数を設定し、それを用いているのです。

当然のことながら、現在の date(‘Y’); という文は、’2020’を返します。従って、それに従う SQL文ではデータが無く、空白となるのでした。つまり年号が 2019年から 2020年に変わった途端に見かけ上データが表示されなくなるのでした。でもこれっていいことですね。昔のページが自動的に消失するに等しいのですから・・・

カテゴリー
PHP ただの現状記述 (Daily Activities) インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

知らなかった

さて、MySQL databaseより UTF-8で文字コード化されているデータを取得し、それを .csv形式で出力するこにより、Excelで読み込みたいと思っているのです。

しかし、先日 uploadしたようにこれはなかなかの難物なのです。普通にやれば必ず激しい文字化けで使い物になりません。ようやく、local database/serverで走らせて文字化けしないようになりましたが、これを Internet Serverに uploadして走らせると、HTTP ERROR: 500という訳の分からないエラーが出て走らないのです。

そこで検索して、かろうじてこのページにヒットしました。これによれば、サーバー処理で時間がかかったりメモリーを消費したりしてエラーが出るようです。ここに書いているように

set_time_limit(600); 
ini_set('memory_limit', '2048M');

この二行を書き加えることにより見事に解決しました。

カテゴリー
Ajax インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming) 日本国内 (Japan Domestic) 神戸 (KOBE)

Ajax synchronousの威力

先週木曜日から土曜日と神戸国際会議場および展示場において、CCT 2019が開催されました。あいにくの雨でしたが、企業協賛がありそれなりに人は集まっていました。

その初日夜に、さくら会 高橋病院において鎌倉ライブ臨時実行委員会を開催しました。ここで、例の Ajax async: false を実際に多量データ入力で用いたのです。まるて field testingでした。

結果は? ばっちりでした。やはり僕の予想したように、これまでのつまづきは、Web Browserが非同期で動作していたからなのです。ここでの「非同期」の意味は、Browserの main threadが、各プログラム単位の関数の戻り値を待たずに、その要求を Queに置くだけで、さっさとプログラムを次のものに変更していく、そんな意味です。これは見かけは turn overが早く、ユーザーは待たされません。

しかしながら、必要なデータを受け取らずに次のプログラムユニットに移行してしまう、ということなので、databaseより適切なデータもらう場合にはまずいことになるのです。そこで、同期が必要なのです。つまりmSec単位で戻り値を待つのです。

これを行ったところ、懸案の web databaseとのやりとりでのデータ欠損問題は全て解決しました。ものすごい威力です。データ入力が本当にスムーズに動作するようになったのです。

カテゴリー
Ajax Javascript インターネット一般 (Internet General) プログラミング (Programming)

並列処理と並行処理

何となくもやっとしていたのが今朝このブログを読んで少し理解しました いやあ難しいですね非同期処理は

カテゴリー
Javascript jQuery PHP インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

jQuery libraryの読み込み判定

jQueryや bootstrapは CDNよりそのソースコードを読み込むのが常道です。これには理由があり、まず CDNはライブラリ読み込みに最適化されているので、自分のサーバーから読み込むよりも早い、そしてCDNより読み込めば プログラムの置かれている階層によらず読み込み先を変更する必要が無い、というものです。

ただ、localhostでインターネット接続せずにプログラムを書いていると CDNから読み込めずにプログラムが作動しなくなることもあります。localhostで開発している時にはこれでは困ります。そんな時に、インターネット接続しているか否かで自動判定すれば助かります。そのコードとしては、

 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>if (jQuery) document.write('<script src="lib/jquery.js"><\/script>');</script>

としたり、あるいは jQueryが既に読み込まれているか否かの判定として以下のようにするか

<script>window.jQuery||document.write('<script src="lib/jquery.js"><\/script>');</script><

とするか、あるいは phpを走らせて

<?php
  if ($_SERVER['SERVER_NAME'] === 'locallhost'
?>

として localhostかどうかを判定する、という方法がありますね

カテゴリー
SQL インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

MySQLで DateTime fieldにおいて、年と日付のみ変更する方法

さてそろそろ鎌倉ライブの Web Siteを更新せねばなりません 結構なプログラムが仕込んでありますが、鎌倉ライブのプログラム(予定表)そのものが非常に flexibleですので、Web programmingも結構苦労するのです

2018年のデータを活用するつもりなのですが、これは MySQL databaseに取り込まれている2018年のデータをコピーすれば良いのですが、そこで フト悩んだことが

session_tbls2019の中のbeginTimeというDateTime fieldにコピーされた 2018年データ:: つまりは、”2018-12-15 09:30:00″というようなデータをどうやって2019年データ::つまりは、”2019-12-14 09:30:00″という本年の正しいデータに変換すれば良いのか? これってなかなか難しいですね でも調べました、その結果はこうです SQL文で以下のようにするのです

UPDATE `session_tbls2019` SET `beginDate` = (`beginDate` + INTERVAL -1 DAY);
UPDATE `session_tbls2019` SET `beginDate` = (`beginDate` + INTERVAL +1 YEAR);

これで年と日付が更新されました 便利ですねえっ