スマート駄目リーマンの忘備録

旅行記、キャリア論、世相分析など思ったことを書き連ねます

データテーブル名にハイフンはNG(VB.netでmdbのデータベースへ書き込み)

Dドライブ直下のtest.mdbにデータを書き込む

worker-1のデータテーブルにデータを書き込もう

 worker-1のtelのコラムID2番の鈴木さんのtelのコラムに電話番号を挿入します。

 フォームを起動して、データベース書き込みをぽちり!

残念ながら、エラーとなってしまいました。

VB.NETでMDBにアクセスする方法は下記のリンクをご参照下さい。

www.umayadia.com

ameblo.jp

データテーブル名にハイフンはNG

 文法的には何も問題無いはずなのにどうして?と半日調べた結果、どうやらデータベースのデータテーブル名にハイフンを挿入するのはNGであることが判明しました。

ハイフンをアンダーバーに修正

 テータテーブルのハイフンをアンダーバーにして、worker-1→worker_1に修正します。プログラムのデータテーブル名の指定も書き換えます。

成功

 今回は無事に成功しました。ネットでも巷の参考書でもアンダーバーでテーブル名を記載していますが、ハイフンはNGという注意書きありません。初心者がmdbに書き込む際の落とし穴になっているのでご注意あれ。

 

 

 

 

バッチファイルのドラック&ドロップでファイルを起動


ドラック&ドロップ

 ドラック&ドロップで、コマンドプロンプトにファイルパスを表示してファイルを起動するバッチファイルの紹介です。
そんなのファイルをダブルクリックすれば良いじゃんと突っ込まれる所ですが、アプリのバージョンを分けて起動したい時などにこの手法が重宝します。


バッチファイルの作り方

下記をご参照下さい。
nw-engineer.work

バッチファイルの中身

今回は、中身におはようと書かれたメモ帳をドラック&ドロップで起動するバッチファイルのコードを紹介します。
下記のコードをバッチファイル内にコピペすれば簡単に作成出来ます。
jj-blues.com

%1はファイルパスを参照する第一引数です。

@echo off
rem メッセージを表示
echo あなたの投げ込んだファイルは 「%1」 です。
start "" "%1"
PAUSE

失敗するアンケートフォーム

アンケートの有効性

 google formが一般に浸透した事もあり、自社で独自にアンケートフォームを作成することも増えて来ました。

 特にオンラインセミナーなどで効率的に自社製品やサービスに対する意見を収集出来れば、今後の営業戦略の大きな判断材料となります。

 お客様自身、営業マンと対面下では言いにくいことでも、匿名のwebアンケートならば本音をはっきりと伝えてくれる可能性も高いです。

アンケートが集まらない

 しかし、実際に会社の広報担当者、営業窓口、社内SE担当者の頭を悩ませているのが、アンケート結果が想定以上に集まりにくいということです。

 私の経験に照らすと、せっかくアンケートフォームを用意したのに、アンケートの集計結果がゼロ件という残念過ぎる結果に陥ったこともあります。これではアンケートを準備する手間だけが無駄にかかったことになります。そこで、アンケートが集まらない原因を分析して、皆さんに共有したいと思います。

アンケートが集まらない要因

告知のタイミングが遅い

 基本的にセミナーなどではセミナー終了当日、最悪翌日までにアンケートフォームを配信しないと、参加者も内容を忘れてしまい、アンケ―を書きようにも書けない状況に陥ってしまいます。

自由記入欄が多すぎ

 アンケートはあくまでもお客様の善意に甘えて、情報を提供して頂く機会なので、お客様の負担となる、自由記入欄が多すぎるとお客様の精神的な負担が高くなってしまいます。アンケートでは多肢選択式を中心に自由記入欄は一つに留めるのがお勧めです。

お客様の個人情報をやたら要求する

 営業の意見としては少しでも多くお客様の情報を収集して、営業攻勢に出たい思いは痛いほど分かりますが、これもお客様の精神的な負担になります。アンケートを回答したらしつこい営業電話が来るのではないかと危惧されて、アンケートに回答して貰えなければ元も子もありません。

 私個人の意見としては、メールアドレスのみで良いと思います。これ以上の個人情報はお客様の精神的な負担となりますし、匿名アンケートのメリットが活かせなくなります。

営業からの連絡を希望するor希望しない

 どうしても営業活動のフックとしてアンケートを活用したい場合には、アンケートの最初に営業からの連絡を希望するor希望しないのチェックボックスを設けて、営業からの連絡を希望しないお客様に対して、心理的な安心感を提供すると良いと思います。

まとめ

 あくまでもアンケートはお客様の善意に依る部分が大きいです。まずは、お客様にご協力いただいている、情報を提供いただいているという謙虚な姿勢が重要であると思います。

  アンケートの回答がきっかけで、商談に繋がったらラッキーくらいの姿勢が、圧迫感を与えず、丁度良いと思います。

 

 

 

 

 

PHPフレームワークの理解

フレームワーク

 PHPプログラマーの求人を覗くとLartavel、Fuel PHPなどのフレームワーク使用の経験が要求されることが大半です。むしろフレームワークを使えないと門前払いにもなりかねません。

 しかしながら、コードをやっとこさ書けるるようになったphpプログラミングの初学者がフレームワークと聞くと面食らうでしょう。

参考書で調べてみても

 私もフレームワークとは何なのかさっぱり分かりませんでした。参考書を数冊買って読んでみても、開発環境の構築の説明の後にいきなりMVCモデルの話に飛躍し、何故フレームワークが必要なのか、そもそもフレームワークとは何なのかさっぱり理解出来ませんでした。

フレームワークとは何ぞや?

 webサイトではデータを入力してそれを次のページに受け渡す、さらにそれをデータベースに受け渡す。データベースから情報を引っ張って表示する。といった機能を実装すると思います。

 コーディングすると入力機能とその表示、データの受け渡しと一つのページに様々な機能が混在し、大規模な開発になると機能分担が分かりにくくなります。

 また、実はwebプログラミングは機能が似通っていて、同じコードを何ページにもコピペしていたりします。例えば、ページのヘッダーは常に同じ出ることがほとんどなので、その表示機能だけを保持して、それを常に参照させればコピペは不要です。

 そこで、データの受け渡し機能、データの表示機能、どのページを表示するか判定する機能といった機能ごとに切り分けて、分かりやすくしようという目的でフレームワークが生まれました。

 こうすることで、複数人で開発する際もAさんは表示機能を作成して下さい、Bさんはデータの受け渡し機能を作成して下さいといったように役割分担が容易になります。それをフレームワークではディレクトリ毎に分けて管理します。

 さらにヘッダーに記載したタイトルに変更があっても、そこを参照する部分だけを修正するだけで済みます。これがコピペだと複数ページ全部にコピペで反映させなければなりません。

お勧め参考書

 このようなフレームワークの誕生の背景を丁寧に解説してくれた本が、パーフェクトPHPです。


パーフェクトPHP

 ちょっと分厚くて面食らうかもしれませんが、phpの基本的な文法を理解して簡単なサイトが作れるようになった人が、フレームワークなどの次のステップに進む橋渡しをしてくれる絶好の参考書です。

 その上で、下記のLaravelの入門書を読むと理解がグッと深くなります。


Laravelの教科書 バージョン10対応【電子書籍】[ 加藤じゅんこ ]

フレームワークは適材適所

 以上から、通販サイト、旅行申し込みサイトなどは大規模で複数人が開発に携わるので、フレームワークが必須です。

 しかしながら、個人商店や従業員が数十人規模で社内SEがホームページを手掛けているような会社であれば、正直フレームワークは不要だと思います。

まとめ

 まずは、自分がどのような規模の開発に取り組むのか(取り組みたいのか)を見極めることが大切です。その上で、フレームワークが必要ならば、パーフェクトphpをしっかり読み込んでみてください。私も、この本でフレームワークの何たるかがきちんと理解出来ました。

 

 

ヤバい営業(システム屋)

プログラムを書いたことが無い

 時々、受託開発でプログラムを書いたことも無い、プログラムを全く知らない営業さんからお仕事を頂くことがあります。エクセルマクロすら使ったことも無い人も多いです。

そもそもプログラムやシステムに興味が無い

 私がシステム屋の営業ならば、自分の知らないことを開発者に依頼する場合には最低限の知識を習得した上で開発者に依頼します。

 しかし、そうした事を自分で全く勉強しようともしないで、営業をやり続けている人が結構存在します。ちょっと信じられないですね。

開発者からの質問も上の空

 特に零細企業のシステム屋だと開発はアルバイトや業務委託に丸投げなんてもこともザラにあります。

 開発者が仕様について質問するも、このような意識の低い営業は何を質問されているかが、そもそも理解できず、質問内容のメモをとって、それを発注元に投げるだけ。

 システムを稼働させるために、ここの仕様を詰める必要があるから、お客様に確認しましょうと熱意を持って伝えても、暖簾に腕押し状態。

正社員だよね?!

 そもそも営業などの役職に関係なく、正社員なんだからアルバイトや委託先に責任を持って指示しなくちゃいけません。

 営業だから分かりませんと開き直る。請負先やアルバイトさんに指示を請うことに申し訳なさとか何も感じないのでしょうか?!

 しかもZOOM会議で、ZOOMの画面共有すら出来ませんでした。

(マジで大丈夫か?!)

取り扱っている商品に関心を持とう

 やっぱり営業ならば自社の商品や技術に関心を持ち、最低限の勉強はしてもらいたいですよね。さらにシステム屋の営業ならば基本的なIT機器の使い方には習熟しておく必要がありますね。(ZOOMの画面共有が出来ないとかマジ論外)

そもそも何故システム屋に入った?!

 これ、メーカーの事務員さんにも言えるんですけど、そもそもなんでその会社に入ったのっていう。

 扱っている製品とかサービスなんてどうでもよくて、とりあえずオフィスワークで専門知識も必要とされない楽そうな事務や営業を選んだのかなって、正直勘ぐりたくなりますね。

 それと同時にそんな甘い覚悟ならば、会社辞めたらって言いたいです。申し訳ないんですけど、自分が直接営業窓口の仕事も行って、仕様考えて、コード書いた方が速いなって思うんです。営業の存在が足かせなんです。

まとめ

 メーカーやシステム屋の営業窓口とか事務員さんの一部に製品やサービスに対する知識が著しく欠けており、そうした人の存在は開発者の役に立たないばかりか往々にして足かせになってしまいます。

 真面目にやらないと将来的にリストラされちゃいますよ。

 

 

 

 

VB.netのFormデザイン画面を編集出来ない時の解決方法

 

 

 

Formデザイン画面が無い

 複数人の共同開発で、VBのFormアプリケーションを組み込む時に、受領したFormアプリのデザイン画面が起動しないトラブルが稀にあります。

 Formのコードをコピーして、スタートボタンを押すと下記のようにFormアプリは起動するのですが、この画面をデザイン画面で編集出来ません。非常に困ります。

右クリック→デザイナーの表示

 From1.vbの右クリック→デザイナーの表示で解決することが多いです。

それでも駄目なら

→新しくFormアプリケーションを作り直す

 上記の様な場合は新しくFormアプリケーションを作り直すのが得策です。

rucio.o.oo7.jp

 

 上記のリンクに従ってFormアプリケーションを作り直した後に移植元のプロジェクトフォルダ内のFom1.vbとForm1.Designer.vbを新しいフォームアプリケーションのプロジェクトフォルダ内のFom1.vbとForm1.Designer.vbにコピペで上書きします。

 そうすることで、Form画面を完全に再現出来ます。その上で、今までのプログラムを追加で実装した方が、結果的に速い場合が多いです。

 

 

reCAPCHAを簡単に実装したい

お問い合わせフォームの攻撃対策

 企業の情報システム担当者さんを悩ます、お問い合わせフォームへの攻撃(意味不明な単語を機械で打ち込んで、何度も送信)

→まともなお問い合わせが、攻撃に埋もれてしまい、非常に厄介です。

Googleのロボット/人間判定プログラムで、攻撃をブロック

 ついこの間までは、下記のようにイラストを選択して、送信することで、人間と機械を見分けていました。

難易度が高い

 しかし、上記の写真判定って分かりにくいし、人間でも間違えちゃいますよね。しかもお問い合わせフォームで間違えると、せっかく自社に興味を持っていただいたのが、台無しになることも。(写真判定が面倒だから、問い合わせもいいやって、諦められちゃうことも)

最新版

 最新版では、こうした煩雑な判定動作が無くなり、フォームに文字を入力する時間間隔やパターン認識で、ロボットか人間かを判定することが出来るようになりました。これによって、フォーム入力者のストレスが一気に軽減されました。

自社サイトのお問い合わせフォームにも設置

 こうして、いざ設置という段になりますが、きちんと動作させるためにはフロントエンドとバックエンドの両方の知識が必要です。特に中小企業の一人情シスの方の頭を意外と悩ませます。

 かくいう私も、メイン業務と並行で自社の一人情シスを担っているのですが、実装までに四苦八苦しました。今回は四苦八苦した結果を踏まえて、一人情報シスの方になるべく分かりやすく実装方法を伝授したいと思います。

Googleアカウントの取得

 とりあえず、Googleアカウントを保持していないと何も始まりません。アカウントを持っていない人は下記のサイトを参考にアカウントを取得して下さい。
gmotech.jp

ドメインの取得

 自社サイトでは、おそらくドメインを取得していると思いますが、ドメインが無い場合にはドメインの取得が必要です。

blog-bootcamp.jp

Google recapcha管理画面でサイトキーとシークレットキーを取得

 Google reCAPCHA管理画面にアクセスして、Googleからサイトキーとシークレットキーを入手して、ページに埋め込む必要があります。それについては下記のサイトの(1)の項目を参照して下さい。

 入手したサイトキーとシークレットキーはメモ帳にコピペして、大切に保存して下さい。

office-obata.com

お問い合わせフォーム(フロントエンド)に実装

項目最後にフロントエンドのコード全文を掲載しているので、必要な部分をコピペして下さい。

 

ヘッダー

 まずはヘッダーと言われる部分

<head></head>

<script src="https://www.google.com/recaptcha/api.js"></script>

を追記します。
(下記の赤枠部分 7行目)

フォームメソッド

 idを追記します。ここでは、id="myform"としました。(下記の赤枠24行目)

送信ボタン

 フォームメソッドでid="myform"と設定した人は下記43行目~53行目までを丸ごとコピペします。44行目のdata-sitekeyを各自が入手したサイトキーに書き換えて下さい。ここではダミーのaaaaaaaaaaaaaaaaaaaaaaaを入力しています。

 また、idを別の名前で設定した人は、51行目の"myform"を各自で設定した名前に書き換えて下さい。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>セミナー申し込み</title>
<link rel="stylesheet" href="css/style.css">
<script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body>

<div class="wrapper">
    <header class="header">

        <nav class="nav">
            <ul>
                <li><img src="../_img/Logo_A.png"   alt="company"width="25%"  height="auto"  min-width="10%"></a></li>
            </ul>
        </nav>
    

    </header>


<form method="post" action="seminar_apply_check5.php" id="myform">
会社名の入力をお願いします。(必須)<br/>
<input name="company_name" type="text" required style="width:200px" ><br/>
部署名の入力をお願いします。<br/>
<input name="company_department" type="text" required style="width:100px"><br/>
お名前の入力をお願いします。(必須)<br/>
<input name="nick_name" type="text" required style="width:100px"><br/>
メールアドレスの入力をお願いします。(必須)<br/>
<input name="email" type="text" required style="width:200px"><br/>
電話番号の入力をお願いします。(必須)<br/>
<input name="tel" type="text" required style="width:200px"><br/>
ご住所をの入力をお願いします。(必須)<br/>
<input name="address" type="text" required style="width:200px"><br/>




<br/>

<button class="g-recaptcha"
        data-sitekey="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        data-callback='onSubmit'
    style="width:100px;height:50px"
        data-action='submit'>送信</button>

<script>
   function onSubmit(token) {
     document.getElementById("myform").submit();
   }
 </script>


<br/>

</form>

    <footer class="footer">
     <p>All Right Reserved.</p>
    </footer>


</div>


</body>
</html>

バックエンドに実装

 php文の冒頭に以下のコードをコピペして下さい。bbbbbbbbbbbbbbbbbbbはダミーなので各自で入手したシークレットキーに書き換えて下さい。


$recap_response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&response=' . $_POST['g-recaptcha-response']);

$recap_response = json_decode($recap_response);

判定の結果、ロボットでは無い場合(if($recap_response->success == true))の処理の処理とそうでない場合の処理を以下のif分をコピペして、それぞれ記載して下さい。

if($recap_response->success == true)

{

// 判定がOKの場合の処理を記載

}

else

{ 

//判定がNGの場合の処理を記載

}

まとめ

 うまく実装出来れば、下記の絵がサイトの右下に表示されるはずです。今回0から1の間のスコアで、0.5より大きければ人間(true)、それより小さければロボットと判定(false)しています。もちろんスコアの閾値を調整して、判定条件を厳しくすることも可能です。興味がある人は他の資料やサイトを調べてみてください。