シンボリックリンクとXサーバ

2017.07.05

Logging

ln -s /var/www/html/hoge.png hoge.png
#unlink hoge.png

シンボリックリンク、リナックス版のショートカットとして
理解しています。正確には違うけれども・・・。
これを使うことにより、同じサーバ間の情報を引っ張ってくる事が
可能になります。1年か2年前に教えてもらったのだけど
使用しないので忘れていた(いままで使用することが無かったので
存在すら記憶から抜けかけていた)。
これを使うだけで表示されるサーバもありますが
サーバの設定によりけりですね(Xサーバ上記の設定だけでOK)。
ちなみに所有者権限を変更してあげないと表示されないサーバも
ありますので注意が必要です。
こんな感じに変更。

chown -h hoge:hoge hoge.png

あと、パーミッションとかの注意も必要です。
 

タグ

AM, B072K1NH76, chown, h hoge, hoge hoge.png, hoge.png hoge.png, unlink hoge.png, Xサーバ, Xサーバ上記, サーバ, ショートカット, シンボリックリンク, パーミッション, よりけり, リナックス版, 所有者権限, 新しいLinux, 注意, 設定,

リクルートの人工知能api(a3rt)で自動記事生成の作り方。

2017.06.10

Logging


AIさえグッと身近に。文章予測AIのAPIでブログを書いてみた。」の記事を読んでLIGさんは
ruby言語で書いている、だったら自分はPHPで同じことをやってみようと
思いたち、PHPでリクルートのAPIを使用して自動記事生成するものを作ってみた。
結果:案外簡単にできてしまったけれど、返ってくる文章予測は
全然、文章としてはハチャメチャなので今のところは
こんなの出来ましたよぐらいですね。
実際、ハチャメチャな文章ですけどAIのプログラムは精度高いと思いますよ。
サンプルサイトとソースを掲載します。
https://zip358.com/tool/aigengo/
),
);
$data = http_build_query($data);
$url = “https://api.a3rt.recruit-tech.co.jp/text_suggest/v1/predict”;
$obj = file_get_contents($url.”?”.$data);
header(‘Content-Type: application/json’);
print($obj);

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>続きは自動生成でAI</title>
    <meta name="viewport" content="user-scalable=no,initial-scale = 1.0,maximum-scale = 1.0">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../topcoat/main/fonts/stylesheet.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/css/topcoat-desktop-dark.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/main.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/brackets.css"><!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script>
$(function () {
    $('#btn').click(function () {
        $.ajax({
            url: 'aibot_text.php',
            type: 'post',
            dataType: 'json',
            data: {
                style:$('#ai_style').val(),
                separation:$('#ai_separation').val(),
                text: $('#text').val()
            }
        })
        .done(function (obj) {
            console.log(obj);
            var str ="";
            for(var i=0;i<obj.suggestion.length;i++){
                str+= obj.suggestion[i]+"<br>";
            }
            $('#kaiwa').html("<br>ひゅうまん語:" + $('#text').val() + "<br>>><br>つづきはAI語:" + str + "<br>");
            $('#text').val("");
        })
        .fail(function (obj) {
            $('#kaiwa').val('失敗');
        });
    });
});
    </script>
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-71682075-1', 'auto');
  ga('send', 'pageview');
</script>
  </head>
  <body class="dark">
      <div id="wrapper">
          <section class="component">
                <h1>リクルートトークンAIで</h1>
                <div>会話の続きを自動生成してみよう。</div>
                <p>
                    文を生成するための入力文を指定:
                    <select id="ai_style">
                        <option value="0">現代文</option>
                        <option value="1">和歌</option>
                        <option value="2">プログラミング言語(Go) </option>
                    </select>
                </p>
                <p>
                    生成する文の長さを指定:
                    <select id="ai_separation">
                        <option value="0">単語</option>
                        <option value="1">フレーズ</option>
                        <option value="2">センテンス </option>
                    </select>
                </p>
                <textarea class="topcoat-textarea" id="text"rows="6" cols="36" placeholder="日本語を入力してください。"></textarea><br>
                <button class="topcoat-button--large--cta" id="btn">Button</button><br>
                <div id="kaiwa"></div>
            </section>
      </div>
  </body>
</html>

 
 
 

タグ

AM,

猫でもできるjsでゴリゴリ

2017.06.10

Logging


有言実行ということで、ゴリゴリJSのサンプル書いてみました。
と言ってもサンプルなので数行だけです。
唯、これを理解すると結構便利です。使い方は人それぞれだと思いますが
簡単に言えばJSのプラグインの考え方と似ていますね。
最初の部分だけ変更すればプラグインになっちゃうからね。
トイウコトでサンプルです。
本当はボタン押しても何も動かない仕様にするつもりでした。
コンソールログから出力した値から導き出して欲しかったけど
いまどきオープンなので・・・。
サンプルサイトとソースを掲載します。
https://zip358.com/tool/ajikan_js/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>猫でもできるjsでゴリゴリ</title>
    <meta name="viewport" content="user-scalable=no,initial-scale = 1.0,maximum-scale = 1.0">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../topcoat/main/fonts/stylesheet.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/css/topcoat-desktop-dark.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/main.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/brackets.css"><!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script>
        $(function(){
            var ajikan  = {
                ajisen:function(){
                    var str = "味せんべい";
                    console.log(str);
                    return str;
                },neko:function(){
                    var str = "猫が";
                    console.log(str);
                    return str;
                },loop:function(obj){
                    var cnt = Number($(obj).val());
                    console.log(cnt);
                    return cnt;
                },taberu:function(ore,str1,str2,cnt){
                    var o = "";
                    for(var i=0;i<cnt;i++){
                        o+=str1;
                    }
                    for(var i=0;i<cnt;i++){
                        o+=str2;
                    }
                    o+="たべる?";
                    $(ore).html(o);
                    return;
                }
            };
            $("#ore").click(function(){
                  console.log("oioioi・・投資信託");
                  var e  =  ajikan;
                  e.taberu("#obj",e.neko(),e.ajisen(),e.loop("#cnt"));
            });
        });
    </script>
  </head>
  <body class="dark">
      <div id="wrapper">
          <section class="component">
              <input type="text" value="" id="cnt">
              <input type="button" value="お!!" id="ore">
              <div id="obj">
              </div>
            </section>
      </div>
  </body>
</html>

 

タグ

, ajax.googleapis.com, AM, console.log, div id, div&gt, DOCTYPE html&gt, head&gt, html5shiv.googlecode.com, input type, link rel, meta http-equiv, return str, script src, script&gt, str1, stylesheet, title&gt, topcoat-desktop-dark.css, var ajikan, var str,

機械学習:ディープラーニング(TensorFlow)をインストールしてみた。

2017.03.24

Logging

yum -y install python
yum -y install python-pip python-dev python-virtualenv
export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.11.0-cp27-none-linux_x86_64.whl
pip install --upgrade $TF_BINARY_URL
python -m tensorflow.models.image.mnist.convolutional

https://www.tensorflow.org/versions/r0.11/get_started/os_setup#using-pip
上記を参照に機械学習:ディープラーニング(TensorFlow)をインストールしてみてください。
試しにイメージ学習(数字)をさせます。最初はエラー率が高いのですが徐々にエラー率が減っていきます。
自分はあまりメモリもCPUも積んでいない仮想サーバでしたが、何とか動きましたが
本気で機械学習をさせたい場合などは、それなりにCPUとメモリを積んでいないと
レンタルサーバー会社からサーバ負荷のため、停止させられる可能性がありますので
注意しないといけない点かもしれません。
学習後、数字の画像を与えるとで詰まるという方は、いろいろな本が出ているので
片っ端から読破するか、Netで調べるかになります。ちなみに今、じぶんは
片っ端から読破する方法を選びました。そこで気づいたのは、Pythonの言語を理解したほうが
良いということです。ノードが機械学習をする上で鍵になります!!
ということで?
時期を置いて続きを別記事として公開しますね。
!!(T_T)
https://github.com/tensorflow

タグ

AM, B01IT509EY, export TF_BINARY_URL, m tensorflow.models.image.mnist.convolutional, NextPublishing, pip install, y install python-pip python-dev python-virtualenv, yum, エラー率, サーバ負荷, ディープラーニング, ノード, メモリ, レンタルサーバー会社, 仮想サーバ, 別記事, 数字, 最新Googleマシンラーニング, 機械学習, 片っ端,

リクルートの人工知能API(A3rt)でトークボットを作ってみた。

2017.03.19

Logging


リクルートが提供している無料の人工知能APIを作ってみた
なんか「簡単に出来上がってしまった!!」ので
ソースを公開しますね。
こんなの誰でも出来るよ・・・。
みんなBOT使いになっちゃうよ・・・。
ホント、便利な世の中ですね。
この元を作るのは大変なのに、APIっていうのは
本当に楽ですね、リスクとしては提供元がAPIを無料から
有料にするとか、APIの廃止するとか
そういうリスクはありますよね・・・。
DEMOサイト
https://zip358.com/tool/aibot/
リクルート人工知能API提供サイト(A3rt)
https://a3rt.recruit-tech.co.jp/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>かいわ??</title>
    <meta name="viewport" content="user-scalable=no,initial-scale = 1.0,maximum-scale = 1.0">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../topcoat/main/fonts/stylesheet.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/css/topcoat-desktop-dark.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/main.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/brackets.css"><!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script>
$(function () {
    $('#btn').click(function () {
        $.ajax({
            url: 'aibot.php',
            type: 'post',
            dataType: 'json',
            data: {
                texts: $('#texts').val()
            }
        })
        .done(function (obj) {
            $('#kaiwa').html("<br>ひゅーまん:" + $('#texts').val() + "<br>>><br>BOT:" + obj.kaiwa + "<br>");
            $('#texts').val("");
        })
        .fail(function () {
            $('#kaiwa').val('失敗');
        });
    });
});
    </script>
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-71682075-1', 'auto');
  ga('send', 'pageview');
</script>
  </head>
  <body class="dark">
      <div id="wrapper">
          <section class="component">
                <h1>リクルートトークンBOTで</h1>
                <div>会話してみた。</div>
                <textarea class="topcoat-textarea" id="texts"rows="6" cols="36" placeholder="日本語を入力してください。"></textarea><br>
                <button class="topcoat-button--large--cta" id="btn">Button</button><br>
                <div id="kaiwa"></div>
            </section>
      </div>
  </body>
</html>
<?php
//POSTデータ
$data = array(
    "apikey"=>"えーぴーあいきー",
    //"callback"=>"application/json",
    "query"=> htmlspecialchars_decode($_POST["texts"])
);
$data = http_build_query($data);
$header = array(
    "Content-Type: application/x-www-form-urlencoded",
    "Content-Length: ".strlen($data)
);
$context = array(
        "http" => array(
        "method"  => "POST",
        "header"  => implode("\r\n", $header),
        "content" => $data
    )
);
$url = "https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk";
$res = new stdClass();
$res = json_decode(file_get_contents($url, false, stream_context_create($context)));
//print_r($res);
//echo $res->message."\n";
if($res->message == "ok"){
    $obj["kaiwa"] = $res->results[0]->reply."\n";
}else{
    $obj["kaiwa"] = $res->message."\n";
}
echo json_encode($obj);

タグ

AM,

某検索サイトの電卓もどきの作り方!!

2017.02.24

Logging


某検索サイトの電卓の作り方!!
某検索サイトのウェブ電卓は・・・全角を入力しても
半角になり表示されます。
こんな事当たり前には出来ない・・・。
出来ない理由はjavascriptでは文字を入力時に全角の文字が
入力されても同じkeycodeしか返してくれないです。
だったら文字が入力されたらその都度、文字を
変換すれば『良いじゃね』と思うかもしれませんが
実はこれも全てのブラウザに対応するのは難しい
何故なら文字を数文字入れた後、文字の間に再度文字を
入れたりすると・・・。ちなみにユニコードから
文字の置き換えは可能ですが・・・一度、文字を
分解し再度組み立てるという事を行わなければ駄目なんですね。
そうすると凄く重くなります。そして全てのブラウザに
対応するには至難です。
それを解決したサンプルサイトを載せときます。
ちなみに、全角文字を半角にしないといけないという
事が仕事で発生したので夜な夜な調べてました。
その時に某検索サイトの電卓のことを思い出したわけです。
今回はこの方法を使うことは無くなったので
こちらで紹介します。ソースが読めるひとは
ソースを読んでみてください。
ちなみにこんな事は検索しても出てきません。
某検索サイトのソースコードから導き出しました。
某検索サイトのソースは難読化していますが
Chromeブラウザを使うと難読化を正規化した状態に
してくれます(つい最近知りました)。
某検索サイトさんは、かなり太っ腹です。
いろいろなコードをオープンソースで提供しているのですから
ホント、凄いなと思います。
https://zip358.com/tool/suu.php?(現在:Chromeブラウザのみ対応)

<html>
    <head>
        <meta charset="EUC-JP">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script>
        $(function(){
            $("#num_in").keyup(function(e){
                num_in(e.keyCode);
            });
            $("#num_in2").keyup(function(e){
                var str = $(this).val();
                $("#keycode").html("keycode=" + e.keyCode);
                if(str.length>=1){
                   console.log(str.charCodeAt(str.length - 1));
                }
            });
            function num_in(in_str){
                var num = [[],[]];
                num[0] = [96,96,48,48,96];//0
                num[1] = [97,97,49,49,97];//1
                num[2] = [98,98,50,50,98];//2
                num[3] = [99,99,51,51,99];//3
                num[4] = [100,100,52,52,100];//4
                num[5] = [101,101,53,53,101];//5
                num[6] = [102,102,54,54,102];//6
                num[7] = [103,103,55,55,103];//7
                num[8] = [104,104,56,56,104];//8
                num[9] = [105,105,57,57,105];//9
                num[10] = [8,8,8,8,8];//backspace
                num[11] = [46,46,46,46,46];//delete
                for(var i=0;i<12;i++){
                    for(var ii=0;ii<5;ii++){
                        if(i<=9){
                            if(num[i][ii]==in_str){
                                $("#num_in").html($("#num_in").html() + i);
                                break;
                            }
                        }else{
                            if(num[i][ii]==in_str){
                                var str =$("#num_in").html();
                                str = str.substr(0,str.length - 1) ;
                                $("#num_in").html(str);
                                break;
                            }
                        }
                    }
                }
            }
        });
        </script>
    </head>
    <body>
        全角無効で入力する方法。スマホは非対応。黒い枠に数字を入力してみてください。
        <div style="width: 200px;height: 20px;font-size: 16px;background-color: #000;color: #fff;"  type="text" id="num_in" tabindex="1"></div><br>
        半角英数字のkeycodeを知りたい場合はこちらで入力ください。<br>
        <input  type="text" id="num_in2" >
        <div id="keycode"></div>
    </body>
</html>

 

タグ

AM,

PHPで自前の関数をガッと放り込むとjquery…!!

2017.02.16

Logging


デモサイトはこちらから。
https://zip358.com/tool/kansuu.php
実際、関数を引数に放り込む機会はあまりないかなと思いますが
こういう使い方もできると言う事を覚えておくと便利かなと思います。
この頃jQueryを使うことが多くなってきているのですが
使っているうちにライブラリの作り方がなんとなく理解してきましたので
オリジナルライブラリ(プラグイン)を作ってみようかなと思います。
ちなみにプラグインの作り方を紹介しているサイトがググると
結構あります。たとえば、こちらガッツリと解説しているので
こちらを参考に皆さんもオリジナルプラグインを提供してみてはどうでしょうか?
http://qiita.com/k4zzk/items/11e5dbd53cb93edb8b4d
jqueryは結構好きですが全然というほど書き方やメソッドをしらないですね。
一度、どこかでメソッドに関してはリファレンスなどに目を通しておかないと
いけないなと思う今日このごろです。
リファレンスはこちらから。
http://semooh.jp/jquery/

<?php
function kansuu(){
    return "un!<br>";
}
function ui($f){
  echo $f;
  echo $f;
}
echo 'ui(kansuu());<br>';
ui(kansuu());
class un{
    function kansuu(){
        return "un!<br>";
    }
    function ui($f){
        echo $f;
        echo $f;
    }
    function d($f){
        echo $f->kansuu();
    }
}
$un = new un();
echo '$un->ui($un->kansuu());<br>';
$un->ui($un->kansuu());
echo '$un->d($un);<br>';
$un->d($un);

タグ

AM, br&gt, class un, echo, function d, function kansuu, function ui, jquery, new un, return, UI, un, オリジナルプラグイン, オリジナルライブラリ, プラグイン, メソッド, リファレンス, 今日このごろ, 作り方, 関数,

画面キャプチャのフリーソフトに目からウロコ、自作してみた。

2016.11.25

Logging


画面キャプチャのフリーソフトに目からウロコ、自分も自作してみた。
作った経緯は、会社で画面キャプチャのフリーソフトを
教えてもらったのがキッカケです。
こんなのあるだ、凄く便利、おそらく自分が自作した
モノより安定して動くと思います。
(なんか自分でも作れそうという思いにかられ作りました。)
ちなみに自分の画面保存のフリーソフトは
Windows10でしか動作を検証していません。
あと、動かないという方はソースコードを公開しますので
自分で作り直してください。
本当はもっと良いものを作りたかったのですが・・・
透過する処理(this.TransparencyKey)を追加するとマウスイベントが
うまく制御できなかったので、手っ取り早い対応で
乗り切ったのですが・・・。
直したい気持ちが強いです(無駄多し)。
ダウンロードはこちらから→zip358.com/tool/gamen.zip
トイウコトデC#でのソースコードを貼っときます。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 画面キャプチャ
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //透明を指定する
            this.TransparencyKey = this.BackColor;
        }
        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
        }
        private void jPGToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string strMyDoc;
            string dname;
            // 画像のサイズを指定し、Bitmapオブジェクトのインスタンスを作成
            Bitmap bm = new Bitmap(this.Width-16, this.Height-66);
            // Graphicsオブジェクトのインスタンスを作成
            Graphics gr = Graphics.FromImage(bm);
            strMyDoc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            DateTime dt = DateTime.Now;
            dname = dt.ToString("yyyy-MM-dd-HH_mm_ss");
            if (toolStripTextBox1.TextLength>0){
                dname = toolStripTextBox1.Text;
            }
            gr.CopyFromScreen(new Point(this.Location.X+8, this.Location.Y+58), new Point(0, 0), bm.Size);
            // JPGで保存
            bm.Save(strMyDoc + "\\" + dname + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            gr.Dispose();
            MessageBox.Show("ドキュメントに「" + dname + ".jpg」の名前で保存しました");
        }
        private void pNGToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string strMyDoc;
            string dname;
            // 画像のサイズを指定し、Bitmapオブジェクトのインスタンスを作成
            Bitmap bm = new Bitmap(this.Width - 16, this.Height - 66);
            // Graphicsオブジェクトのインスタンスを作成
            Graphics gr = Graphics.FromImage(bm);
            strMyDoc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            DateTime dt = DateTime.Now;
            dname = dt.ToString("yyyy-MM-dd-HH_mm_ss");
            if (toolStripTextBox1.TextLength > 0)
            {
                dname = toolStripTextBox1.Text;
            }
            gr.CopyFromScreen(new Point(this.Location.X + 8, this.Location.Y + 58), new Point(0, 0), bm.Size);
            // PNGで保存
            bm.Save(strMyDoc + "\\" + dname + ".png", System.Drawing.Imaging.ImageFormat.Png);
            gr.Dispose();
            MessageBox.Show("ドキュメントに「" + dname + ".png」の名前で保存しました");
        }
        private void bMPToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string strMyDoc;
            string dname;
            // 画像のサイズを指定し、Bitmapオブジェクトのインスタンスを作成
            Bitmap bm = new Bitmap(this.Width - 16, this.Height - 66);
            // Graphicsオブジェクトのインスタンスを作成
            Graphics gr = Graphics.FromImage(bm);
            strMyDoc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            DateTime dt = DateTime.Now;
            dname = dt.ToString("yyyy-MM-dd-HH_mm_ss");
            if (toolStripTextBox1.TextLength > 0)
            {
                dname = toolStripTextBox1.Text;
            }
            gr.CopyFromScreen(new Point(this.Location.X + 8, this.Location.Y + 58), new Point(0, 0), bm.Size);
            // BMPで保存
            bm.Save(strMyDoc + "\\" + dname + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
            gr.Dispose();
            MessageBox.Show("ドキュメントに「" + dname + ".bmp」の名前で保存しました");
        }
        private void gifToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string strMyDoc;
            string dname;
            // 画像のサイズを指定し、Bitmapオブジェクトのインスタンスを作成
            Bitmap bm = new Bitmap(this.Width - 16, this.Height - 66);
            // Graphicsオブジェクトのインスタンスを作成
            Graphics gr = Graphics.FromImage(bm);
            strMyDoc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            DateTime dt = DateTime.Now;
            dname = dt.ToString("yyyy-MM-dd-HH_mm_ss");
            if (toolStripTextBox1.TextLength > 0)
            {
                dname = toolStripTextBox1.Text;
            }
            gr.CopyFromScreen(new Point(this.Location.X + 8, this.Location.Y + 58), new Point(0, 0), bm.Size);
            // gifで保存
            bm.Save(strMyDoc + "\\" + dname + ".gif", System.Drawing.Imaging.ImageFormat.Gif);
            gr.Dispose();
            MessageBox.Show("ドキュメントに「" + dname + ".gif」の名前で保存しました");
        }
        private void toolStripTextBox1_Click(object sender, EventArgs e)
        {
        }
    }
}

 
 

タグ

AM,

HTML5のCanvasをトライ。

2016.10.19

Logging


会社でCanvasのことを聞かれたのだけど
さっぱりだったので触ってみた。
分かったことは、なぁなぁやなって事ぐらい。
3日ぐらい歩けば、考え方以外は「すっ」と頭から
抜けていくのだろうけれど・・・。
サンプルを載せときます・・・ちょっと誤作動します。
(ヒント、文字を入力しクリアにチェック)
https://zip358.com/tool/loop/ [サンプル]

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script>
        var cs = new Array();
        var ctx = new Array();
        var s1 = new Array();
        var s2 = new Array();
            $(function(){
                $("#RPlus").click(function(){
                    $("#LoopI").append('<input type="text" class="Ltext">\n\
                                        <input type="hidden" class="Lx" value="10">\n\
                                        <input type="hidden" class="Ly" value="5">\n\
                                        <input type="hidden" class="Lxziku" value="1">\n\
                                        <input type="hidden" class="Lyziku" value="1">\n\
                                        <br>');
                });
                $(".Ltext").keypress(function(){
                    htm_dousa();
                });
                $("#NOBJ").click(function(){
                    if($("#NOBJ:checked").val()){
                        htm_dousa();
                    }
                });
                $("#cls").click(function(){
                    if($("#cls:checked").val()){
                        htm_dousa();
                    }
                });
            });
            function htm_dousa(){
                $(".Ltext").each(function(i) {
                    RaLeRt(this,i);
                });
            }
            function RaLeRt(obj,i){
                DRAW_mycan($(obj).val(),i);
            }
            function DRAW_mycan(mystr,i){
                if($("#NOBJ:checked").val()){
                     clearInterval(s1[i]);
                     clearInterval(s2[i]);
                     cs[i]  = null;
                     ctx[i] = null;
                     return;
                }else{
                    cs[i] = document.getElementById('mycan');
                    ctx[i] = cs[i].getContext("2d");
                    var w = cs[i].width;
                    var h = cs[i].height;
                    ctx[i].clearRect(0, 0, w, h);
                    clearInterval(s1[i]);
                    clearInterval(s2[i]);
                    s1[i] =setInterval( function(){xyz(cs[i],ctx[i],mystr,i);},1);
                    s2[i] =setInterval( function(){DRW_CLS(cs[i],ctx[i],w, h);},100);
                }
            }
            function xyz(cs,ctx,mystr,i){
                var x=0;
                var y=0;
                var x_a = 0;
                var y_a = 0;
                var xziku=0;
                var yziku=0;
                if($(".Lx").eq(i).val() < 0  || $(".Lx").eq(i).val() > 900 ){xziku = parseInt($(".Lxziku").eq(i).val()) * -1;}else{xziku = parseInt($(".Lxziku").eq(i).val());}
                if($(".Ly").eq(i).val() < 0 || $(".Ly").eq(i).val() > 700){yziku = parseInt($(".Lyziku").eq(i).val()) * -1;}else{yziku = parseInt($(".Lyziku").eq(i).val());}
                x = parseInt($(".Lx").eq(i).val()) + (10*xziku);
                y = parseInt($(".Ly").eq(i).val()) + (5*yziku);
                x_a = parseInt(x+(Math.sin(x)*100));
                y_a = parseInt(y+(Math.cos(y)*100));
                if(ctx){
                    ctx.beginPath();
                    ctx.font =  Math.floor( Math.random() * 35 ) + "px 'Hiragino Mincho Pro','MS Mincho','TakaoMincho'";
                    ctx.fillStyle = 'rgba(' + Math.floor( Math.random() * 255 ) + ','+ Math.floor( Math.random() * 255 ) +',' + Math.floor( Math.random() * 255 ) + ',0.7)';
                    ctx.fillText(mystr, x_a, y_a);
                    ctx.fill();
                }
                $(".Lx").eq(i).val(x);
                $(".Ly").eq(i).val(y);
                $(".Lxziku").eq(i).val(xziku);
                $(".Lyziku").eq(i).val(yziku);
            }
            function DRW_CLS(obj,obj2,w, h){
                if($("#cls:checked").val()){
                    if(obj2){
                        obj2.clearRect(0, 0, w, h);
                    }
                }
            }
        </script>
    </head>
    <body>
        <div id="LoopI">
            <input type="text" class="Ltext"><input type="button" value="項目を増やす" id="RPlus">クリアする<input id="cls" type="checkbox" >オブジェクトNEW<input id="NOBJ" type="checkbox" ><br>
            <input type="hidden" class="Lx" value="10"><input type="hidden" class="Ly" value="5">
            <input type="hidden" class="Lxziku" value="1"><input type="hidden" class="Lyziku" value="1">
        </div>
        <div id="wrapper">
            <canvas id="mycan" width="900" height="700"></canvas>
        </div>
    </body>
</html>
<?php

 

タグ

AM,

機械学習で地震に関する文章なのか判断するコード。

2016.09.06

Logging


機械学習で地震に関する文章なのか判断するコード。
機械学習のライブラリに文章を放り込むだけで地震に関するものなのか
判断してくれます。文章が増えれば増えるほど、精度が下がる可能性あり。
何故なら、誤りを学習する機能を付けていない為。
文章をmecabで分離したかったのだけど
XServerはどうもmecabのインストールが出来ないみたいです。
なので、Yahooの日本語形態素解析APIを使用しました。
機械学習のライブラリのインストール等はご自分で調べてみてください。
ちなみにXサーバだと、composerは最初から入っているので
ライブラリのfieg/bayesだけインストールするればOKです。
今回の機械学習は教師ありの機械学習法です。最初に
地震である文章かどうかをある程度、学習させてから出ないと
判別はできません。機械学習の最初の段階は
半手動になります。
ソースは下記より参照してください。
DEMO:http://zip358.com/tool/jishinkita/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>地震キタ━(゚∀゚)━!くるな</title>
    <meta name="viewport" content="user-scalable=no,initial-scale = 1.0,maximum-scale = 1.0">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../topcoat/main/fonts/stylesheet.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/css/topcoat-desktop-dark.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/main.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/brackets.css"><!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script>
$(function () {
    $('#btn').click(function () {
        $.ajax({
            url: 'jishin.php',
            type: 'post',
            dataType: 'json',
            data: {
                texts: $('#texts').val()
            }
        })
        .done(function (obj) {
            var jishin  = floatFormat((obj.jishin * 100),3);
            var not_jishin  = floatFormat((obj.not_jishin) * 100,3);
            $('#jishin').html($('#texts').val() + "<br><br>地震のつぶやきである可能性:" + jishin + "%<br>" + "地震のつぶやきでない可能性:" + not_jishin + "%<br>");
            $('#texts').val("");
        })
        .fail(function () {
            $('#jishin').val('失敗');
        });
    });
});
function floatFormat( number, n ) {
	var _pow = Math.pow( 10 , n ) ;
	return Math.round( number * _pow ) / _pow ;
}
    </script>
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-71682075-1', 'auto');
  ga('send', 'pageview');
</script>
  </head>
  <body class="dark">
      <div id="wrapper">
          <section class="component">
                <h1>地震キタ━(゚∀゚)━!くるな取り扱い説明書</h1>
                <div>地震に関する文章なのか機械学習を使用して調べます。</div>
                <textarea class="topcoat-textarea" id="texts"rows="6" cols="36" placeholder="日本語を入力してください。"></textarea><br>
                <button class="topcoat-button--large--cta" id="btn">Button</button><br>
                <div id="jishin"></div>
            </section>
      </div>
  </body>
</html>
<?php
require '/vendor/autoload.php';
use Fieg\Bayes\Classifier;
use Fieg\Bayes\Tokenizer\WhitespaceAndPunctuationTokenizer;
$text = $_POST["texts"];
$token =  new WhitespaceAndPunctuationTokenizer();
$Classifier = new Classifier($token);
$ret = sqlpdo("SELECT * FROM xxxxx");
for($i=0;$i<count($ret,0);$i++){
    $Classifier->train($ret[$i]["cate"],$ret[$i]["tango"]);
}
$ans=[];
if($text){
    $tango = nihongo($text);
    $ans = $Classifier->classify($tango);
    if($ans["地震"]>0.6){
        sqlpdo("INSERT INTO `xxxxx`(xxxx,`xxxx`, `xxxx`, `edate`, `xxxx`) VALUES (xxx,'地震','$tango',now(),0)");
    }else{
        sqlpdo("INSERT INTO `xxxxx`(xxxx,`xxxx`, `xxxxx`, `edate`, `xxxx`) VALUES (xxxx,'地震ではない','$tango',now(),0)");
    }
}
$obj["not_jishin"] = $ans["地震ではない"];
$obj["jishin"] = $ans["地震"];
echo json_encode($obj);
function nihongo($word){
//アプリケーションIDのセット
$id = "";
//URLの組み立て
$url = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=" . $id . "&results=ma&sentence=" . urlencode($word);
//戻り値をパースする
$parse = simplexml_load_file($url);
//戻り値(オブジェクト)からループでデータを取得する
foreach($parse->ma_result->word_list->word as $value){
    $str[] = $value->surface;
}
    $tango = implode(" ", $str);
    return $tango;
}
function sqlpdo($sql){
    $user="";
    $pass="";
    $ret= [];
    $i=0;
    try {
        $dbh = new PDO('mysql:host=xserver.jp;dbname=xxxxx', $user, $pass);
        foreach($dbh->query($sql) as $row) {
           $ret[$i++] = $row;
       }
        $dbh = null;
    } catch (PDOException $e) {
        $ret = "エラー!: " . $e->getMessage() . "<br/>";
        die();
    }
        return $ret;
}

タグ

AM,

MySQL知っている人にはとっては常識的なことだけど初心者は知らないこと。

2016.08.26

Logging


MySQL知っている人にはとっては常識的なことだけど初心者は知らないこと。
ググればあるレベルなことを書いてみることにする。
アップデートやインサートをする場合、デリートもそうだけど
自分自身(テーブル)を呼び出せない罠・・・・。
すこし考えれば当たり前だけど、初心者はどうして出来ないかと
悩んでしまう人も中に入ると思います。
なぜ、出来ないかというと今からアップデートやインサートを
するテーブルに問い合わせするということは、矛盾することになるから
そういう事は出来ないようにMYSQLはなっています。
もしそういう事をしたいのならテンポラリテーブルを作って
そのテーブルを呼び出して処理することをお勧めします。
じゃ他のテーブルなら呼び出せるのという問いですが
呼び出すことは可能です。MYSQL5以上なら
サブクエリー(副問合せ)が可能です。
自分がやっていることが副問合せになっているかどうか
コレが副問合せということかは分かりませんが
呼び出すことが可能ですw
こんな感じでUpdateやInsertが可能です。

update tbl set hoge=(select hogeko from tbl2 where hogeko=1) where hoge>7;

タグ

AM, Insert, MYSQL, MYSQL5以上, select hogeko from tbl2 where hogeko, update tbl set hoge, where hoge&gt, アップデート, インサート, サブクエリー, すこし, デリート, テンポラリテーブル, 初心者, 副問合せ, 問い, 基礎, 改訂版,

いらない自作アプリ(個人用)苦笑交じり(´・ω・`)

2016.08.07

Logging


いらない自作アプリをVC#で作りました(´・ω・`)。
殆どの人がいらないと思うアプリですが
自分にとっては、結構重宝するアプリだったりします。
ちなみにプロセスの管理とかしていないので
エラーで落ちちゃう恐れとかあります。
そこはご愛嬌でよろしくお願いします。
中身のコードは少し他人のコードを
コピペで使わさせてもらっている所ありです。
また、解像度によりうまく表示されない事もあります。
まさに、自分だけのためのアプリなのです。
(そんな場合は最大化www)
これで何が出来るのかといえば・・・
httpd.confのバーチャルホスト設定のファイル作成を
自動で吐き出してくれます。ついでにhostsファイルも
吐き出します。
コードはこんな感じ。
DLしたい奇特な方用:https://zip358.com/tool/httpconf.zip

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace httpdconf
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void make_btn_Click(object sender, EventArgs e)
        {
            Boolean flg_1;
            Boolean flg_2;
            Boolean flg_3;
            string conf_str;
            string stCurrentDir = System.Environment.CurrentDirectory;
            flg_1 = chk_text(host_name.Text);
            flg_2 = chk_text(ip_address.Text);
            flg_3 = chk_text(dc_root.Text);
            if (flg_1 && flg_2 && flg_3) {
                conf_str = @"
<VirtualHost *:80>
DocumentRoot " + dc_root.Text + host_name.Text + @"
ServerName " + host_name.Text + @"
" + option_text.Text + @"
ErrorLog logs/virtual.host-" + host_name.Text + @"-error_log
CustomLog logs/virtual.host-access-" + host_name.Text + @"_log combined
</VirtualHost>";
                midashi.Text = conf_str;
                IPAD.Text = ip_address.Text + " " + host_name.Text;
                wte(stCurrentDir, "/vhost-" + host_name.Text, midashi, "conf");
                wte(stCurrentDir, "/hosts_win_" + host_name.Text, IPAD, "txt");
                System.Diagnostics.Process.Start(stCurrentDir);
            }
        }
        public Boolean chk_text(string str) {
            if (str == "") {
                return (false);
            }
            return (true);
        }
        public void wte(string dir, string fname, TextBox txt_str, string ext)
        {
            System.IO.StreamWriter sw = new System.IO.StreamWriter(
                dir + fname + "." + ext,
                false,
                System.Text.Encoding.GetEncoding("utf-8"));
            foreach (string line in txt_str.Lines)
            {
                sw.Write(line + sw.NewLine);
            }
            sw.Close();
        }
        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            linkLabel1.LinkVisited = true;
            System.Diagnostics.Process.Start("https://twitter.com/zip358com");
        }
    }
}

動作画面

タグ

AM, Boolean flg, host_name.Text, LinkLabelLinkClickedEventArgs e, namespace httpdconf, new System.IO.StreamWriter, object sender, private void linkLabel1_LinkClicked, public partial class Form1, stCurrentDir, string stCurrentDir, System.Diagnostics.Process.Start, System.Environment.CurrentDirectory, System.IO.StreamWriter sw, System.Text.Encoding.GetEncoding, using System.Collections.Generic, using System.ComponentModel, using System.Drawing, using System.Threading.Tasks, using System.Windows.Forms, virtual.host,

WordPressテンプレートのSSL対応の勘所を教えます。

2016.07.25

Logging


全国的にかわかりませんが、花火大会やお祭りって7月の終わりから
8月の中頃までしかないですよね。高知県はそんな感じです。
(自分が学生の頃、8月の終わりごろに有れば良いのにと思ってました。)
今日のお題は「WordPressテンプレートのSSL対応の勘所を教えます。」です。
この頃、有料テンプレートに変えたのですが、そのままでは
デザインが崩れて全然使いものにならないので、自分で対応を行いました。
勘所はこれだけ、URLの出力する所を抑えるべしです。
なので、例えば下記のような記述が書かれている所などを
書き換えを行います。
※メソッドにはパターン2つあって、echoなどで既に出力されているメソッドと
文字列を返却してくれるメソッドです。それにより置き換え方法が変わります。

<?php
//パターン? get_sidebar();
        ob_start();
        get_sidebar();
        $get_sidebar = ob_get_clean();
        $get_sidebar = str_replace('http://', '//',$get_sidebar);
        echo($get_sidebar);
//パターン?,home_url()
        $str = "<a href="'. str_replace('http://', '//',home_url()) .'/">";
        echo str_replace('http://', '//',home_url());
?>

上記のようにすることで、SSLで対応は行えます。
SSL未対応のワードプレスをSSL対応にする場合は
まずはじめに、いままでの自サイトURL、全てのデータを
SSL化しないと駄目なので、MYSQLで文字の置換を
行なってください。もしくは、データを一度、エクスポートして
テキストエディタで置換し再度、インポートして
あげる事でも対応可能です。エクスポートする際は
UPDATE形式でエクスポートすることをお忘れなく。
後は、テンプレート側にSSL対応するだけで
ほぼ見栄え良く見えるはずです。
管理画面へログイン出来なくなると言った事象が
起こる場合は、若干、WordPressの設定を
修正しないといけなくなります。

タグ

$get_sidebar, a href, AM, echo str_replace, home_url, PHP 7+MySQL, SSL対応, UPDATE形式, WordPressテンプレート, データ, テキストエディタ, テンプレート側, パターン, メソッド, ワードプレス, 使いもの, 勘所, 書き換え, 有料テンプレート, 置換,

ポケモンGO、GitHubに続々現れているAPIとかでてるよ。

2016.07.24

Logging


昨日、新婚ホヤホヤみたいな夫がPokémon Go(ポケモンGO)をしているのを
電気店で見かけました。
今日のお題は「ポケモンGO、GitHubに続々現れているAPIとかでてるよ。」です。
自分はポケモン世代ではないので、どうしても抵抗感があります。
つまらないか面白いかなんてのはプレイしてないので
今の段階ではわかりません。
そんなこんなで、ポケモンGOのアプリを入れてませんが、
ポケモンの販売元の株価には興味がありますし、一度、アプリをDLして
試してみようかなという考えはあります(評価は書かないとは思います)。
そんなポケモンGOですが、早くもGitHubでは
ポケモンGOのアプリを解析しようと言う強者が現れています。
いわゆる逆コンパイルという事です。解析されるのも時間の問題かと
思いますが、この手のゲームは純粋にプレイして
楽しむことが主だと思うので、どうだろうかなと思うわけです。
解析するのは楽しそうですけどね。
全部解析して理解してしまうと、その頃には
飽きてしまっている気がします。
こういうチートツールを使って自動で
捕まえてしまう人もいると思います、そうなると
このゲームの趣旨に反するわけです・・・・。
引きこもりが外に出たとか言う朗報も出てきたのに
チートツールが完成してしまうと
元に戻ってしまいそうな気がします。
ズル行為をしてポケモンモンスターを
収取が出来るようになれば、任天堂さんが対策を
打ち出すでしょうから、そうなれば・・・
イタチごっこの始まりになるでしょうけどね。
そのうち、ポケモンBOTアプリが登場する
のも間近かもしれませんね
もっと知りたい方はGitHubで
pokemon goなどで検索してみてください。
追記:対策を打ち出したみたいです。
チートツールなどを使っていることが判明したら
アカウント永久停止になります。
 

タグ

AM, API, github, pokemon go, Pythonスタートブック, アカウント永久停止, イタチごっこ, ゲーム, ズル行為, チートツール, ポケモンBOTアプリ, ポケモンGO, ポケモンモンスター, ポケモン世代, 任天堂, 抵抗感, 昨日, 販売元, 逆コンパイル, 電気店,

PHPとVS2015をJSONで連携する。第二弾

2016.06.18

Logging


VB2015側

Imports System.Net
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim sTargetUrl As String = "http://zip358.com/tool/2015-12-01-smp/index.php"
        Dim objWeb As WebClient = New WebClient()
        Dim bResult As Byte() = objWeb.DownloadData(sTargetUrl)
        Dim sJson As String = System.Text.Encoding.UTF8.GetString(bResult)
        Dim json_obj As Object = JsonConvert.DeserializeObject(sJson)
        RichTextBox1.Text = json_obj("1")("id") & json_obj("1")("name")
    End Sub
End Class

PHP側

<?php
$hoge = array();
$a = 'jsonキタ━(゚∀゚)━!name';
for ($i = 1; $i < 100; $i++)$hoge[$i] = array("id"=>$i,"name"=>$a);
//echo $hoge[$i]["name"];}
header('Content-type: application/json;charset=UTF-8');
echo json_encode($hoge, JSON_UNESCAPED_UNICODE);

以前、PHPとVS2015をJSONで連携する。という記事を
掲載したと思いますが、第二弾として、配列化して取得する方法を
記載したいと思います。
今回使う吐き出し側は以前と変わっていませんが
取り出し側が以前と少し変わってStringで返ってきたjsonデータを
デシリアライズしてから、Objectに流し込んでます。
下記のような結果が得られます。(画像参照)

タグ

AM, Content-type, Dim bResult As Byte, Dim json_obj As Object, Dim objWeb As WebClient, Dim sJson As String, Dim sTargetUrl As String, e As EventArgs, echo json_encode, End Class, Handles Button1.Click, Imports System.Net, JsonConvert.DeserializeObject, New WebClient, objWeb.DownloadData, Private Sub Button1_Click, Public Class Form1, RichTextBox1.Text, sender As Object, System.Text.Encoding.UTF8.GetString, VS2015, デシリアライズ,

PHP失恋再帰処理:会いたい、会いたい、会えない(´Д`)。

2016.06.02

Logging


PHP失恋再帰処理:会いたい、会いたい、会えない(´Д`)。
こんな未練タラタラしてはいけません。
とくに男は未練タラタラになりやすいので・・・・。
トイウコトデ
このループを抜け出すには7にならないと
抜けだせません。
なので、このプログラムには欠陥があります。
値を変えると無限ループに陥るのです(´Д`)(´Д`)えぇぇ?
 

<?php
$n["0"] = "会いたい";
$n["1"] = "会いたい";
$n["2"] = "会いたい";
$n["3"] = "会いたい";
$n["4"] = "会いたい";
$n["5"] = "会いたい";
$n["6"] = "会えない";
$str = aenai($n);
echo "(´Д`)デブオなんかにあうかよ!"."\n";
print_r($str);
function aenai($n=array(),$no=0,$str_n=array(),$str_no=0){
    if(mb_strlen($n[$no])<16 && (mb_strlen($n[$no]) + mb_strlen($str_n[$str_no])<16) && $no <7){
        $str_n[$str_no] .= $n[$no];
        echo "A:str_n_mozi:".mb_strlen($str_n[$str_no])."str_no:".$str_no.$str_n[$str_no]."\n";
        $no++;
    }elseif(mb_strlen($n[$no])<16 && (mb_strlen($n[$no]) + mb_strlen($str_n[++$str_no])<16) && $no <7){
        $str_n[$str_no] .= $n[$no];
        echo "B:str_n_mozi:".mb_strlen($str_n[$str_no])."str_no:".$str_no.$str_n[$str_no]."\n";
        $no++;
    }
    if($no==7){
        echo "(´Д`)このデブが";
        print_r($str_n);
        return $str_n;
    }else{
        return aenai($n,$no,$str_n,$str_no);
    }
}

 

タグ

$str_no, AM, array, echo, elseif, function aenai, mb_strlen, no, PHP失恋再帰処理, print_r, return aenai, str_n_mozi, デブオ, トイウコトデ, プログラム, ループ, 欠陥, 無限ループ, ,

ドコモのデベロッパーサービスの雑談対話APIを使ってみた。

2016.05.28

Logging

ドコモのデベロッパーサービスの雑談対話APIを使ってみた。
結果から言うと機械学習アルゴリズムではないぽっいので
会話がいまいち成り立たないという結果かな。
ドコモが提供しているAIのrepl-aiという物もあるのですが
文字をいまのAPIサービスだと投げれないという
事なので…。ボットを楽しむには良いかもしれませんが、
APIとしては使えないので
雑談対話APIで作ってみた感じです。
やはり機械学習でないとスムーズな会話は
出来ないのかも・・・・そろそろりんなAPI RINNAとして
提供されそうなのでソチラを試してみたいなと思っています。
今回作ったAPIのソースを載せときます。ご自由にお使いください(´Д`)。

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>zip358.com:雑談API{ドコモ}</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=10.0, user-scalable=yes">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <style>
    .balloon {
      position: relative;
      width: 200px;
      height: 30px;
      background-color: #ccc;
      text-align: center;
    }
    .balloon:before {
      content: "";
      position: absolute;
      bottom: -10px;
      left: 50%;
      margin-left: -10px;
      width: 0;
      height: 0;
      border-top: 10px solid #ccc;
      border-left: 10px solid transparent;
      border-right: 10px solid transparent;
    }
  </style>
   <script>
  $(function() {
    $( "#msg_set" ).click(function() {
       $("#msg_ai").html("");
       $.ajax({
            type: "POST",
            url: "json.php",
            data:{
                msg:$("#msg_human").val()
            },
            dataType: 'json',
            success: function(obj){
              //alert(obj.txt);
              $("#msg_ai").html(obj.aiman);
            }
        });
    });
  });
  </script>
  <script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-71682075-1', 'auto');
  ga('send', 'pageview');
</script>
  <style>
      table, td, th { border: 2px #808080 solid; }
  </style>
</head>
<body>
<h2>雑談APIです。なんでも語りかけてください。</h2>
<div  class="balloon">
  <p id="msg_ai">......</p>
</div>
<p><br><input type="text" id="msg_human"><input id="msg_set" type="button" value="送信"></p>
</body>
</html>
<?php
include './aiman.php';
$text = urldecode($_POST["msg"]);
$aiman = new aiman();
$msg["aiman"] = $aiman->ai_msg($text);
$msg["txt"] = $text;
$json = json_encode($msg);
echo $json;
<?php
//ドコモ:雑談対話API
class aiman{
    var $apikey ="ドコモで取得したAPIKEY";
    function ai_msg($text="おはよう"){
        $url = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY='.$this->apikey;
        $headers = array(
            'Content-Type: application/json; charset=UTF-8',
        );
        $data = array(
            'utt' => $text
        );
        $options = array('http' => array(
            'method' => 'POST',
            'header' => implode("\r\n", $headers),
            'content' => json_encode($data)
        ));
        $context = stream_context_create($options);
        $response = file_get_contents($url, false, $context);
        $res = json_decode($response);
        return $res->utt;
    }
}

 

タグ

AM,

これを使うと面白いことが出来る出来そう。file_get_contents('php://input');

2016.05.07

Logging


これを使うと面白いことが出来る出来そう。
file_get_contents(‘php://input’);を使用すると面白いことが
PHPで出来るかもしれない。
file_get_contents(‘php://input’);って何かというとPOSTしたデータの
生データを取ってくるというものです。
ちなみに最近LINE BOTを作っている人のソースコードを
見て知りました。
生データではなくPOSTのデータを
取りたい場合は下記のように記述することで
ガガッとデータを取ることも出来ますよ。

    $hoge = array();
    foreach ($_POST as $key => $value) {
        $hoge[$key] = $value;
    }

また、巷ではチャットBOTが流行中ですけど
正直なところ、あまり興味がわかないです。
プログラムの記述はやはりAPIなので
最終的に投げたり、返ってきたデータを
ゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)したりするという
物なので・・・。
出来たら自分の場合、飽きちゃうですよね。
APIでも難しそうな人工知能APIも
基本的には同じ原理かなと思ってますが
ハードルが少し高いですね。
そんなのより、実はmailとShell+PHPで
ゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)するのが
なんだか楽しいかもと思ってます。
mailで投げたらTwitterに投稿するとか、
mailでキーワード投げたら検索結果が返ってくるとか、
そういう何とも無駄なものを作りたい欲求が
高まってます。
 
 

タグ

$_POST as, AM, file_get_contents, foreach, hoge, input, key, LINE BOT, mail, php, value, ガガッとデータ, ゴニョゴニョ, ソースコード, チャットBOT, ハードル, 人工知能API, 生データ, 面白いこと,

2桁になると数字と文字でバグる非同期通信の穴。MYSQLめ!!

2016.03.19

Logging

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>2桁になると数字と文字でバグる非同期通信の穴。MYSQLめ!!</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=10.0, user-scalable=yes">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/i18n/jquery-ui-i18n.min.js"></script>
   <script>
  $(function() {
        hoge(0);
  });
  function hoge(cnt){
    $.ajax({
       type: "POST",
       url: "json.php",
       data:{
           cnt:cnt
       },
       dataType: 'json',
       success: function(obj){
           var cnt = Number(obj.cnt);
           var id_name = obj.id_name;
           $("#id_no").html(cnt);
           $("#id_name").html(id_name);
            if(id_name!=""){
                 hoge(++cnt);
             }else{
                 alert("もうねぇよ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!")
             }
       }
    });
  }
  </script>
</head>
<body>
No:<span id="id_no"></span>ID:NAME:<span id="id_name"></span>
</body>
</html>
<?php
//json.php
$cnt = $_POST["cnt"];
$link = mysql_connect('localhost', 'user', 'pass');
if (!$link) {
    die('接続失敗です。'.mysql_error());
}
$db_selected = mysql_select_db('database_name_hoge', $link);
if (!$db_selected){
    die('データベース選択失敗です。'.mysql_error());
}
//$result = mysql_query('SELECT * FROM where id_no =' . $cnt);
$result = mysql_query('SELECT * FROM where id_no =' . intval($cnt));
if (!$result) {
    die('クエリーが失敗しました。'.mysql_error());
}
$row = mysql_fetch_assoc($result);
$obj["id_name"] = $row['id_name'];
$obj["cnt"] = $cnt;
$json = json_encode($obj);
echo $json;

上記のソースはおそらく正しく動くであろうコードです。
このコードで何がしたいのかを解説していきます。
このHTML(index.html)が呼ばれたら(表示されたら)、
再帰処理がかかりPHPが動作してデータベースのテーブルから
主キーのid_no(int型)を検索しid_name(text型)を参照し
jsonで値を返して、受け取り表示するというものです。
簡単なプログラムですが、MYSQLに問い合わせをするときに
ちゃんとint型に変換してあげないと2桁なるとバグるという
問題が発生します!!
要するに0?9の間は参照してくれるのに
10になるとアレ・・・??
ってなり、参照してくれなくなるという
問題が発生します。
トイウコトデ・・・。
PHPやJQは案外いい加減な振る舞いをしてくれるけど
MYSQLは型の設定通り動作してくれるという
事なので注意が必要です。
ちなみに上記のコードが動作するかは未検証です(´Д`)

タグ

ajax.googleapis.com, AM, body&gt, code.jquery.com, datepicker.regional, datepicker.setDefaults, DOCTYPE html&gt, FROM where id_no, function hoge, head&gt, jquery-1.10.2.js, jquery-ui-i18n.min.js, jquery-ui.css, json.php, meta charset, MYSQL, script src, script&gt, select, span id, span&gt, title&gt,

ANA旅割逆算日導きサービスを作りました。単純なものなので公開。

2016.03.16

Logging

ANA旅割逆算日導きサービスを作りました。単純なものなので公開します。
帰宅後、ゴニョゴニョして作りました。
いままでANA旅割アプリは公開していたのですが
今回のはWEBで同じことが出来ちゃうというものです。
簡単にいえばWEBサービスですね。
簡易なものなのですが、結構便利かと思います。
是非、お使いください。
コードも公開してます、下記のコードを記載すれば
PHP5.Xとjqueryが動作可能な環境であれば動作します。
尚、デザイン等などは配慮していません。
また基本的にPC環境であれば動作します。スマホ対応は
簡易的な対応しか行なっていません。
URL:http://zip358.com/tool/ana_calendar/index.php
改正版 追記:ウェブサービス (どちらもショボい(`・ω・´))
http://zip358.com/tool/ANAmobile/?[mobile用]
http://zip358.com/tool/ana_calendar/ [PC用]

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>zip358.com:ANA旅割逆算日導きサービス</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=10.0, user-scalable=yes">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/i18n/jquery-ui-i18n.min.js"></script>
   <script>
  $(function() {
    $.datepicker.setDefaults($.datepicker.regional['ja']);
    $( "#datepicker" ).datepicker();
    $( "#datepicker" ).change(function() {
       //alert($( "#datepicker" ).val());
       $.ajax({
            type: "POST",
            url: "json.php",
            data:{
                day:$("#datepicker").val()
            },
            dataType: 'json',
            success: function(msg){
              var str ="より前の日に予約を行なってください。";
              $("#msg_ana75").html(msg.day75 + str);
              $("#msg_ana55").html(msg.day55 + str);
              $("#msg_ana45").html(msg.day45 + str);
              $("#msg_ana28").html(msg.day28 + str);
              $("#msg_ana21").html(msg.day21 + str);
            }
        });
    });
  });
  </script>
  <style>
      table, td, th { border: 2px #808080 solid; }
  </style>
</head>
<body>
<h2>ANAの旅割逆算日を求めます。</h2>
<p>出発日を入力してください。<br><input type="text" id="datepicker"></p>
<table>
    <tr>
        <td>75日前</td><td><span id="msg_ana75"></span></td>
    </tr>
    <tr>
        <td>55日前</td><td><span id="msg_ana55"></span></td>
    </tr>
    <tr>
        <td>45日前</td><td><span id="msg_ana45"></span></td>
    </tr>
    <tr>
        <td>28日前</td><td><span id="msg_ana28"></span></td>
    </tr>
    <tr>
        <td>21日前</td><td><span id="msg_ana21"></span></td>
    </tr>
</table>
</body>
</html>
<?php
$ana_day = $_POST["day"];
$ary_ana_day = explode("/", $ana_day);
$date75 = new DateTime($ary_ana_day[0]."-".$ary_ana_day[1]."-".$ary_ana_day[2]);
$date55 = new DateTime($ary_ana_day[0]."-".$ary_ana_day[1]."-".$ary_ana_day[2]);
$date45 = new DateTime($ary_ana_day[0]."-".$ary_ana_day[1]."-".$ary_ana_day[2]);
$date28 = new DateTime($ary_ana_day[0]."-".$ary_ana_day[1]."-".$ary_ana_day[2]);
$date21 = new DateTime($ary_ana_day[0]."-".$ary_ana_day[1]."-".$ary_ana_day[2]);
 $msg["day75"]= $date75->modify('-75 days')->format('Y/m/d');
 $msg["day55"]= $date55->modify('-55 days')->format('Y/m/d');
 $msg["day45"]= $date45->modify('-45 days')->format('Y/m/d');
 $msg["day28"]= $date28->modify('-28 days')->format('Y/m/d');
 $msg["day21"]= $date21->modify('-21 days')->format('Y/m/d');
$json = json_encode($msg);
echo $json;

タグ

AM,

phpでXMLファイルのデータを取得し、配列に変換する方法

2016.03.06

Logging

$hoge = simplexml_load_file($xml);
$res = get_object_vars($hoge);

phpでXMLファイルのデータを取得し、配列に変換する方法は
上記の方法でOKです。
foreachで流し込むよりこちらの方が
断然楽ですね。この方法を知らない時は
わざわざforeachを使って配列に流し込んでいました。
こんな便利な関数があるなんて知らなかった。
PHPって結構べんりな関数が用意されているなと
思います。ちなみにこの頃、覚えたプログラム用語は
トレイトです。

トレイトは、PHP のような単一継承言語でコードを再利用するための仕組みのひとつです。 トレイトは、単一継承の制約を減らすために作られたもので、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにします。

PHPリファレンス引用
いろいろと知らないことだらけです。
奥が深い、すべての関数を覚えるのは
至難の業ですけど、こんな関数が用意されているなど
と覚えていたら良いかもしれませんね。

タグ

AM, B00DIM63US, hoge, PHPリファレンス引用, simplexml_load_file, XMLファイル, クラス階層, データ, トレイト, プログラム用語, べんりな関数, メソッド群, わざわざforeach, 単一継承, 単一継承言語, 方法, 独習PHP, 配列, 関数,

PHP 型の変換 – javaぽっい書き方で型キャストが出来ちゃう(`・ω・´)

2016.02.21

Logging


PHP 型の変換 – javaぽっい書き方で型キャストが出来ちゃう(`・ω・´)
こういう書き方なんか、カッコイイななんて的な書き方で
尚且つ、覚えやすい。int型やstring型などに変換する
関数もあるのですが、こちらの書き方を覚えておいたほうが
楽かなと自分は思っています。
PHPで開発する人達は
こちらを使っている人のほうが多そうな
気がします。多言語にまたがって開発する場合は
こちらの方がわかりやすいのかなとも
感じます。いろいろと言語をまたがると
書き方や構文に悩まされたりします。
完璧に覚えている方なら
全然だと思いますが、自分みたいな
軽く覚えているタイプは多言語にまたがると
構文ミスなどで時間をロスしてしまいます。
型キャスト例

<?php
//bool,unset,array,object等など 型キャスト可能。
$re = (int)$hoge;
$re2 = (string)$hoge;
?>

タグ

$re2, , AM, bool, hoge, int, javaぽっい書き方, object, PHPプログラミング教室, string, unset, キャスト, キャスト例, 変換, 多言語, 楽かなと自分, 構文, 構文ミス, 短期集中講座, 関数,

WordPressのプラグインを自作してみた。Twitterへ投稿するよ。

2016.02.13

Logging


WordPressのプラグインを自作してみた。
Twitterへ投稿するよ。
コードは下記です、まだコードは途中段階ですので自分のファイルは
更新していきますが、その前にソースを公開しちゃいます。
尚、認証設定はまえ段階で行っているものとします。
プログラマーさんよりのコードですが任意のapiキーなどを
ウェブで取り込んでいればプログラマーさん以外でも
使用可能です。
※まえ段階の認証方法と手順↓
https://syncer.jp/twitter-api-matome?←こちらのサイトを
参考に必要になる全てのキーを取得してください。
その後、zipファイルを解凍しWordPressのプラグイン置き場に
ファイルをアップロードしてください。
アップロードする場所はこちら、ルート/wp-content/pluginsに
解凍したフォルダごと(twitter-api-phz.)アップロード。
アップロード後、WordPressのメニューバーのTwitterAPI設定から
取得した任意のキーを入力してください。
入力が正しければTwitterに記事が更新時に投稿されます。
※何度も投稿されます。更新ボタンを押すと(*^^)ニヒ{間隔があけば}
そこらへんはカスタマイズを行ってください。
あくまでもサンプルコードですので・・・。
サンプルコードプラグインファイル(twitter-api-phz.zip

<?php
/**
 * @package twitter-api-phz
 * @version 1.0.0
 */
/*
Plugin Name: twitter-api-phz
Plugin URI:  http://zip358.com/tool/twitter-api-phz.zip
Description: twitter Posting
Version:     1.0.0
Author:      zip358.com
Author URI:  https://zip358.com/
License:     MIT
Text Domain: zip358.com
*/
require(dirname(__FILE__) .'/twitteroauth/autoload.php');
use Abraham\TwitterOAuth\TwitterOAuth;
add_action('publish_post','twitter_api_phz');
add_action('admin_menu','twitter_api_phz_menu');
add_action("admin_init","twitter_api_phz_menu_init");
function twitter_api_phz($post_id){
    $post = get_post($post_id);
    if($post->post_status == "publish"){
        $str = $post->post_title." ".$post->guid;
        msg_run($str);
    }
}
function msg_run($str) {
            $to = new TwitterOAuth(esc_attr(get_option("phz_consumerKey")),
                    esc_attr(get_option("phz_consumerSecret")),
                    esc_attr(get_option("phz_accessToken")),
                    esc_attr(get_option("phz_accessTokenSecret")));
            $content = $to->post("statuses/update",array("status"=>$str));
}
function twitter_api_phz_menu(){
    add_menu_page("Twitter自動投稿設定", "TwitterAPI設定",10,"twitter_api_phz_menu_page","twitter_api_phz_menu_page");
}
function twitter_api_phz_menu_page(){
    ?>
<form method="post" action="">
    <?php
    wp_nonce_field('my-nonce-key','twitter-api-phz-menu-key');
    ?>
    ●consumerKey<input type="password" name="phz_consumerKey" value="<?=esc_attr(get_option("phz_consumerKey"));?>"><br />
    ●consumerSecret<input type="password" name="phz_consumerSecret" value="<?=esc_attr(get_option("phz_consumerSecret"));?>"><br />
    ●accessToken<input type="password" name="phz_accessToken" value="<?=esc_attr(get_option("phz_accessToken"));?>"><br />
    ●accessTokenSecret<input type="password" name="phz_accessTokenSecret" value="<?=esc_attr(get_option("phz_accessTokenSecret"));?>"><br />
    <input type="submit" value="<?='登録する';?>">
</form>
    <?php
}
function twitter_api_phz_menu_init(){
    if(isset($_POST["twitter-api-phz-menu-key"]) && $_POST["twitter-api-phz-menu-key"]){
        if(check_admin_referer("my-nonce-key","twitter-api-phz-menu-key")){
            foreach ($_POST as $key=>$val) {
                    if(isset($_POST[$key]) && $_POST[$key]){
                        if($key !="twitter-api-phz-menu-key"){
                            update_option($key, $val);
                        }
                    }
            }
            wp_safe_redirect(menu_page_url("twitter_api_phz_menu_page",false));
        }
    }
}
?>

 

タグ

AM,

さくらレンタルサーバでC言語をコンパイルして動かす方法(^@^)!!

2016.01.26

Logging


さくらレンタルサーバでC言語をコンパイルして動かす方法。
テキストエディタなどでC言語を記述しFTPでファイルを
任意のディレクトリへアップロードします。
次にアップロードした任意のファイルをコンパイルすれば
コンパイルされたファイルが生成されます。
手順は下記です。
1.サンプルプログラム&ファイル(hoge.c)を作成。

#include <stdio.h>
int main(void)
{
	int i;
	for(i=0;i<7;i++){
		printf("HELLO %d.\n", i);
	}
	return i;
}

2.FTPソフトでさくらレンタルサーバへアップロード(スタンダード以下だと機能せず!?)
3.アップロードした任意のファイル場所まで移動する。(pwdコマンドやcdコマンドを活用)
4.コンパイルする。

gcc -g hoge.c -o hoge

 
5.コンパイルしたファイルを実行。

./hoge

追記:コンパイル等はTera Termなどを使いコンパイルを行ってください。

タグ

$i&lt, AM, C言語, g hoge.c, gccプログラミング, int i, int main, Linuxプログラミング, printf, pwdコマンド, return i, stdio.h&gt, アップロード, コンパイル, さくらレンタルサーバ, サンプルプログラム&ファイル, ディレクトリ, テキストエディタ, ファイル, めちゃくちゃ,

日本語解体:Yahoo! JAPANが提供するテキスト解析WebAPIを使ってゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)

2016.01.03

Logging


日本語解体:Yahoo! JAPANが提供するテキスト解析WebAPIを使ってゴニョゴニョしてみました。
今回は触りだけです。非同期で文字を投げて解析結果を表示するものです。
これで何が出来るかと言えば、一昔前に流行した圧縮新聞とかが作れたりします。
ほかには人様のブログなどから情報を収集してちょっと可笑しなブログ記事生成ものを
つくり上げることも可能です。
アイデア次第でいろいろと面白いことが出来るだと思いますが
YahooのAPIって若干こわいですよね。
Yahooに限らずAPIは提供先が停止しようと思ったら
停止できるので・・・・。特にYahooはデベロッパーに厳しいのか
社長が変わってからいろいろなサービスが停止されました。
どうなる事やらって奴ですが、テキスト解析WebAPIは
意外と需要が高いのかなと思っています。
なので、当分は停止されることはないかなぁと思っています。
ソースコードは下記です。{ぷぅ本当はもっと簡略化できます_φ(゚∀゚ )アヒャ*更新::2016/01/03:13時41分}
サンプルサイト:https://zip358.com/tool/nihongo/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>日本語たんご</title>
    <meta name="viewport" content="user-scalable=no,initial-scale = 1.0,maximum-scale = 1.0">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="../topcoat/main/fonts/stylesheet.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/css/topcoat-desktop-dark.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/main.css">
    <link rel="stylesheet" type="text/css" href="../topcoat/main/css/brackets.css"><!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script>
$(function () {
    $('#btn').click(function () {
        $.ajax({
            url: 'tango.php',
            type: 'post',
            dataType: 'json',
            data: {
                nihongo: $('#nihongo').val()
            }
        })
        .done(function (obj) {
            var str ="";
            for(var i = 0; i < obj.cnt["0"]; i++){
                str +=obj.surface[i]["0"] + ",";
            }
            $('#tango').html(str);
        })
        .fail(function () {
            $('#tango').val('失敗');
        });
    });
});
    </script>
  </head>
  <body class="dark">
      <div id="wrapper">
          <section class="component">
                <textarea class="topcoat-textarea" id="nihongo"rows="6" cols="36" placeholder="日本語を入力してください。"></textarea><br>
                <button class="topcoat-button--large--cta" id="btn">Button</button><br>
                <div id="tango"></div>
            </section>
      </div>
  </body>
</html>
<?php
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
$appid ='ヤフーAPI ID';
$tango = htmlspecialchars($_POST["nihongo"]);
$output = "xml";
$request  = "http://jlp.yahooapis.jp/MAService/V1/parse?";
$request .= "appid=".$appid."&results=ma,uniq&sentence=".urlencode($tango);
$i = 0;
$responsexml = simplexml_load_file($request);
$ret = $responsexml->ma_result->word_list->word;
foreach ($ret as $value) {
    foreach($value as $key=>$val){
        if($key == "surface")
        $obj[$key][]  = $val;
    }
}
$obj["cnt"] = $responsexml->ma_result->filtered_count;
echo json_encode($obj);

タグ

AM,