久しぶりの PHPネタ

今開発中の Web Applicationではデータ構造が複雑なため、SQLで読み込んだり書き込んだりする時にたくさんのバグが混入しています

特に画面遷移においてデータをどのように受け渡しするか? それが自分の中でも混乱してしまうのです どうすれば良いか? それで考えたのが 以下のような utilityを作ることでした

<?php


function DEBUG_CONT() {
  echo "-----------------------------------------------------------------------<br>";
  if ( !isset( $_POST ) ||empty( $_POST ) ) {
    echo "<strong>POSTは空っぽです</strong><br>";
  } else {
    foreach ( $_POST as $key => $value ) {
      echo '&nbsp;&nbsp;&nbsp;$_POST[' . $key . '] = ';
      if (mb_strlen($value) > 50) {
        echo mb_substr($value, 0, 50).'・・<br>';
      } else {
        echo $value.'<br>';
      }
    }
  }
  echo "-----------------------------------------------------------------------<br>";
  if ( !isset( $_SESSION ) ||empty( $_SESSION ) ) {
    echo "<strong>SESSIONは空っぽです</strong><br>";
  } else {
    foreach ( $_SESSION as $key => $value ) {
      echo '&nbsp;&nbsp;&nbsp;$_SESSION[' . $key . '] = ';
      if (mb_strlen($value) > 50) {
        echo mb_substr($value, 0, 50).'・・<br>';
      } else {
        echo $value.'<br>';
      }
    }
  }
  echo "-----------------------------------------------------------------------<br>";
  return;
}

function DEBUG_STOP() {
  echo "-----------------------------------------------------------------------<br>";
  if ( !isset( $_POST ) ||empty( $_POST ) ) {
    echo "<strong>POSTは空っぽです</strong><br>";
  } else {
    foreach ( $_POST as $key => $value ) {
      echo '&nbsp;&nbsp;&nbsp;$_POST[' . $key . '] = ';
      if (mb_strlen($value) > 50) {
        echo mb_substr($value, 0, 50).'・・<br>';
      } else {
        echo $value.'<br>';
      }
    }
  }
  echo "-----------------------------------------------------------------------<br>";
  if ( !isset( $_SESSION ) ||empty( $_SESSION ) ) {
    echo "<strong>SESSIONは空っぽです</strong><br>";
  } else {
    foreach ( $_SESSION as $key => $value ) {
      echo '&nbsp;&nbsp;&nbsp;$_SESSION[' . $key . '] = ';
      if (mb_strlen($value) > 50) {
        echo mb_substr($value, 0, 50).'・・<br>';
      } else {
        echo $value.'<br>';
      }
    }
  }
  echo "-----------------------------------------------------------------------<br>";
  exit();
}

?>

これで該当するベージに DEBUG_CONT();などとすれば、何の$_SESSIONあるいは $_POSTを保持しているかが分かり データの流れが把握しやすくなりました

ようやくサーバーの混乱が解消か?

先日来、kamakuraheart.orgあるいは tri-international.orgを運用している Zenlogicというサーバーがダウンし、その結果 これらのWeb Siteへの接続や、メール運用が間歇的にしかできなくなっていました

これはもちろん非常に困った状況でしたが、ようやく解決しています その詳細は、運営会社の謝罪と共に、下記にあります

まあ困ったものですが、もとに戻り良かったと思っています

本日は母校大阪大学キャンパスへ

本日はもっとも忙しい月曜日でしたが、公用で大阪大学医学部先端医療イノベーション・センターに出かけました

ぎりぎり 11:30AMまで外来診療し、それから暑い日差しの中、そして海からの強い暑い南風にに逆らって一生懸命自転車で自宅に戻り、それから着替えて、実は普段「短パン+T-shirts」なのですが、この格好では流石に公的な会合には出席できませんので、いちおう半袖シャツと、スラックスに履き替えたのです そして 12:00には自宅近くまである会社のお迎えがあり、そのタクシーに乗り込み、新横浜駅までの道すがら色々な打ち合わせを行いました

そして、13:09新横浜発の「のぞみ」に乗り込み、一人で大阪大学吹田メインキャンパスまで向かったのです やはりこのあたりは学生時代の思い出が残る場所です それは何と 1969年から1975年の間でした あの頃は僕の可能性は  360度拡がり、世界は自分の手の中にありました しかし年齢を重ねるにつれ、自分の可能性の世界はどんどん狭まり、今やそうですねたった一度だけの可能性の拡がりしか残っていません 寂しい 自分がそのようにして社会の中から忘れられていくのでしょう 寂しい あがないたい、でも難しいでしょう

新大阪駅で下車し、少し時間に余裕があったので、北大阪急行 これは地下鉄御堂筋線の延長です それに乗り換え、終点の千里中央駅に行きました 学生時代から何度この駅を使ったことでしょう 妙に感傷的になります

そして、これは生涯で初めてと思うのですが、大阪モノレールに乗り換え、かつての大阪万博跡地の大阪万博公園の周りを回って大阪大学医学部付属病院駅で降りました まだ時間に余裕があったため、病院内の Subwayには入、アイスコーヒーを飲みました そう言えば最近は大阪でもアイスコーヒーのことをアイスコーヒーと言いますね でも僕が学生の頃は、大阪の喫茶店で「アイスコーヒー」と言っても店員さんは「何?」と全く理解できませんでした 大阪では正統派的呼び名は「レイコー」か、うーん忘れてしまいましたが、もう一つ呼び名があったような・・・ もちろんレイコーというのは、冷コーヒーのことなのです

まあ、今はアイスコーヒーで大阪じゅう通用しますし、大阪の若い人たちも レイコーという言葉は知らないかも知れませんね

それで、会議は 17:00よりその先端なんとかの7階で開催されました それはそれはお偉い先生方がお集まりとなり、僕は小さくなっていました そして会は 18:40頃まで続き終了しました 戻りは再び一人でモノレール – 地下鉄 と乗り継ぎ、そして現在は新幹線「のぞみ」で途中駅名古屋に停車中です

あー疲れた 自宅に到着は 23:00は軽く回るでしょう 明朝はまた 7:00AMには病院に到着してそれからTAVIと MitraClipです 大変ですね

それはそうと本日午後はこの kamakuraheart.orgのサーバーがダウンして全く通じませんでした これも大変でしたよ

本日は日曜日 ブックスペース栄和堂

本日は久しぶりの日曜日です 12時開店のブックスペース栄和堂で3.5時間ぐらい一杯のコーヒーでまったりとした時間を過ごしています

ここは電源とインターネットフリーなのでプログラミングするにはとても良い環境なのです 本日は珍しくお客さん少なく僕以外にはこれまで3名のみであり、しかも何れも1時間ぐらいで出ていきました

例の学会演題プログラムに関しては、共同演者登録の部分でデータベース構造を根本的に変更し、それに伴いプログラムも大幅に書き換えているのです なかなか基本的な構想がまとまらないのでプログラム書きながら変更しながらの作業です それでもローカル Web上ですぐに検証できるのでとても良いですね これがコンパイラーによる作業であればこうはいきませんよね

それにしても僕の持っている武器は PHP/jQuer/Bootstrap/MySQL/htmlぐらいの乏しいものですのでなかなか思いどおりには行きません 新しい世界観 たとえば今注目しているのは Vue.jsですが、これなんか多分永久に届かない世界かも知れません やはり圧倒的に新しい物に取り組む勢いが年齢と共に低下しているのを感じます そんなことに負けたくはないのですが、現実も見ねばならないでしょう どこかで妥協して結果的に自分の能力を最大限に引き出す戦略が必要なのかも です

でも、救いの一つは、本日も Airさんとやり取りしていて新たな世界の入り口に片足の足首だけ入れることができました ありがとうございます

あーん あーん

まさしく「あーん あーん」です

自分の能力が低下しています これまでは自分でも「僕って天才」と思えることがいくつもありました でも 最近は無いのです 無いのは未だいい 問題は 明らかに自分の能力が低下しているのでは? と思うのです

これまで、僕の最大の能力は Typing speedでした 何故か 何故ならば僕は日本語入力の時には「かな漢字」変換を行い、アルファベットを打つ時には、自動的にANSII Key Boardの配列になるのです そのように自分を 30年ぐらい前に訓練したのです この結果、自分の Typing speedは理論的に日本語入力の時に、ローマ字カナ変換に比較してほぼ倍のスピードになるのです

これスピードだけの問題ではなく、自分の思考がタイピングにより制約されないことを意味し、その結果頭脳の空間が拡大するのです

それに疑問を挟むようなことが最近あるのです 歳か? あるいは頭脳の病気か?

まあやれるところまでやらざるを得ません それで答えが出てくるでしょう

何れにしても現在は僕は未だまだ元気であり頭脳も明晰です 今も phpで画像 uploadの部分の勉強しながらプログラム書いています JTVT2019のプログラムは自分の尊厳を賭けて仕上げるつもりです

gitの upgrade

特に Web開発では compilerでなく script言語を使用することが多いので、プログラムの更新にあたっては更新ログを記録し、いざとなれば元にもどせるようにするために gitを用いることが一般的ですね

gitはもう何年間も使用しているのですが、未だに使いこなしているとは言い難いものがあります そもそも gitはコマンドラインでのコマンドの一つですが、web serviceと連携してそのデータベースが無料の Web databaseにも記録されます そのようなサービスを提供している有名なものとして githubそして sourcetreeがありますね

前者は自分のソースコードを公開するならば無償で uploadできますが、後者はソースコードを公開しなくても無償で uploadできます

何れにしても使いこなしてなんぼ の世界ですが・・・・

さて、最近その git commandに非常に危険な脆弱性が発見されたらしいのです それで git commandの upgradeを試みました 自分の MacBook Pro OSX High Sierraに入っているgitは Apple gitでありシステムに最初から入っているものでした

$git –version

とすると git version 2.7.1と大分古いバージョン番号が戻ってきました

それを upgradeするためには、git commandをreplaceせねばなりません それで調べました もちろん homebrewを用いるのです ありましたね ここです

いやあ助かりました これで僕の gitは version 2.17.1とずいぶんと上がりました

何と

今朝は早朝より悩みました

 

<?php
ini_set(‘allow_url_fopen’, 0);

これがエラーとなるのです そのエラーは何やら constantがどうのこうのというものでした

結局 stackoverflowを検索した所、 「おまえさん、それは quotationが間違っているよ」というものでした

つまり

<?php
ini_set('allow_url_fopen', 0);

とすれば良いのでした 当たり前のことですね でもついついこの英語Keyboad上では、日本語配列では「や」にあたる’と「@」にあたる`というのは見てくれが似ているけど意味が全く異なるので間違えますね

特に SQL文を php scriptの中に埋め込む時などにとてもややこしいです 今回もそのような一例でした

Slender Clubライブ一例目終了

昨日は湘南鎌倉総合病院から品川プランスホテルで開催されている Slender Club Tokyo in 2018へのライブ症例中継の日です

これまで僕自身はこの病院からもたくさんのライブを全世界に向けて飛ばしてきましたので、特に緊張することも慌てることもありません そういう意味では、よく議論になっているライブ中継の欠点、つまり — 術者やスタッフが緊張してしまい、普段の実力を出せなくなり、その結果、患者さんに不利益となる — ということからは僕自身そしてコメディカルも含めたスタッフは無縁です

逆にこのようなライブでは会場におられるたくさんの全世界の expertsの貴重な意見を真摯に聞ける、その結果 より良い治療を行える可能性が高まる、そのような利点が際立ってきます

まあそんなこんなで自分の割当分の患者さんは無事成功裏に二例治療することができました 特に一例目の方は非常に危険が予想される患者さんであり、あまり調子に乗って(つまりライブという環境の中で他の人の行け、行けという意見に押されて)攻めすぎると危険な事態に陥る、そのようなことが僕の誰よりも多くPCIをしてきた人生の経験から感じていました 結果は、押しすぎずある妥協点で終了し、手技は成功し、治療の目的は達成し、かつ無事に終了しました

ここいら辺のPCIというかどんな治療にも共通するであろう真実をどれぐらいの人々、特に若い先生方に理解して頂けるは? 言葉では伝えにくいものがありますね もうかれこれ 30年ぐらい前になりますが、そう昭和の終わりに、日本のとても偉い方が腹部臓器の悪性腫瘍となられ、某国立有名大学の外科の教授が根治手術をされたのですが、明らかにその手術は限界を越えたものだったと思います もちろん僕は腹部外科手術に詳しくありませんので、間違っていたらばすみません 何れにしてもその方は手術を契機に亡くなられました そんなことをどうしても思い出します

さてさてそんなことを考えながら本日は朝から昼のdutyまで懸案のプログラミングにとりかかっています 昨日来「あれ? 何で?」ということがあり、その疑問にすっかり取り憑かれ、どうすればこの疑問を解消できるか? そんなことに悩みながら座長をしたりしていたのです

結果的に解決しました これまであまり深く考えずに慣習に則ってやってきたからこんな事態に直面したのですね 反省です こんなことはこれまで jQueryを使い始めてから、ですから 10年ぐらい前から何回も何回も知っている筈のことだったのです 分かりやすくプログラムで書きますね

<!doctype html>
<html>
  <head>
    <title>TEST PROGRAM</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
  </head> 
<body> 
<form action="http://www.kamakuraheart.org/wordpress/" method="post"> 
<button type="submit" id="btn">ブログに飛ぶ</button> 
</form> 
<script> 
$('#btn').on('click', function() { 
    if (!confirm('本当にブログに飛びますか?')) { 
        return false; 
    } else { 
        location.href='http://www.kamakuraheart.org/wordpress/'; 
    } 
}); 
</script>
</body> 
</html>

これは勿論動作します しかし、次のプログラムは動作しません

<!doctype html>
<html>
  <head>
    <title>TEST PROGRAM</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<script> 
$('#btn').on('click', function() { 
    if (!confirm('本当にブログに飛びますか?')) { 
        return false; 
    } else { 
        location.href='http://www.kamakuraheart.org/wordpress/'; 
    } 
}); 
</script>
  </head> 
<body> 
<form action="http://www.kamakuraheart.org/wordpress/" method="post"> 
<button type="submit" id="btn">ブログに飛ぶ</button> 
</form> 

</body> 
</html>

何故でしょうか <script></script>の位置に注目して下さい jQueryが対象としているオブジェクトは ‘#btn’ですが、それは DOMでは <button></button>の中で id = ‘btn’として指示されているものです

つまり、この作動しないプログラムでは、jQueryが id = ‘btn’というオブジェクトを探しに行っても、未だ DOMの中に読み込まれていないので、jQueryは分からないのです もちろんhtmlも上から順番に読み込まれます

では次のプログラムはどうでしょうか?

<!doctype html>
<html>
  <head>
    <title>TEST PROGRAM</title>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<script> 
jQuery(document).ready(function() {
  $('#btn').on('click', function() { 
      if (!confirm('本当にブログに飛びますか?')) { 
          return false; 
      } else { 
          location.href='http://www.kamakuraheart.org/wordpress/'; 
      } 
  });
}); 
</script>
  </head> 
<body> 
<form action="http://www.kamakuraheart.org/wordpress/" method="post"> 
<button type="submit" id="btn">ブログに飛ぶ</button> 
</form> 

</body> 
</html>

これはきちんと作動します 何が変わったのでしょうか? jQueryによるプログラム(スクリプト)全体が jQuery(document).ready(function() {})で括られていますね これが意味するところは、htmlのプログラム全体が読み込まれて DOM解析が終了するまで jQueryに待ちなさい、ということを指示しているのです

実はこんなこと jQueryを使うに際しては当たり前のことです ですから、いちいち jQuery(document).ready(function() {})でくくるのは面倒なので </body>タグの直前に jQueryスクリプトを書くように推奨されているのです こんなことすっかり忘れてしまい、これまで慣習で</body>タグの直前に jQueryスクリプトを書いてきたのですが、それを<head></head>に書いた所、プログラムが動作しなくなり、とても焦ったのです 全く何やっているのだか 解決に数時間を要しました こんなことだから時間がいくらあっても足りませんね

行きつけのカフェで

本日は土曜日 午前中にカテ二件に参加し、12:30自転車で病院の裏側に向かいました ここは「藤沢市村岡」という地名ですが、とにかく長い上り坂が続きます

頑張って登りきり、いつも遠くから見ていた小高い林の場所まで登りました そこた誰も居ない場所ですが、なかなか良い見晴らしでした

しばし休んでから今度は下り坂を自転車飛ばしました そして 13:00に行きつけの「深沢」にある「栄和堂」というブック・カフェに入りました 頼んだのはコーヒー一杯のみ

そして、MacBook Proを開いて JTVT2019のプログラムに取り掛かりました 色々なことがありなかなか取り組めないでここまで時間が過ぎてしまいました もう本気にならないとやばいのです

しかし、またまた訳の分からないエラーに1.5時間悩まされました それは画面の切り替えにおいて、セッション変数が保持されない、というエラーです 原因は2つ以上ありそうなのですが、やっと一つを潰し、変則手で一つ何とかしました 最初の 1.5時間悩んだエラーの原因は、session_start()を最初に書かなかったからであり、これは僕のミスです

しかし、変則手の方は未だに良く分かりません $_SESSION変数に書き込んこだものの一部しか次のページに引き継がれないのです 今までこんなこと見たことありません ブラウザの問題かと色々なブラウザ試みたのですがどうもそうではありません $_SESSION変数の容量の問題でしょうか? でもそんなに大きなデータをセッションに溜め込んではいません 未だに分かりません原因が

変則手で解決したのは仕方なく $_POSTで渡し、渡されたページでは再度 MySQLを起動してデータをデータベースから読み込むというものです まあこれで動作するので良いと言えば良いのですが・・・

何だかすっきりしませんねえ