PHPとVS2015をJSONで連携する。

2015.12.02

Logging

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)
        RichTextBox1.Text = sJson
    End Sub
End Class
<?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);

これで事足りる。ちなみにVB2015からMYSQLに接続する方法とかも有ります。
この頃、VS2015無料版で何かできないかと模索中です。
前回作ったメモった何やら結構ダウンロードしてくれてる
みたいで結構嬉しかったりするのですが・・・
開発に時間もかかってないあんな短いしょぼいアプリでも
使ってもらえるって事は自分が作ったものって
案外需要がないわけではないことが
分かったので、アンドロイドアプリも作るつもりです。
ちなみに折り返しまで作っているのですが
あとAndroidStudio2.0がそろそろリリースされそうなので
リリースされてから、バージョンアップ後、
開発とかしようかなとか考えています。
ちなみに、上記のコードは少しパックってます(´Д`)が!!
何か!?
ちなみにアセンブリをひとつ参照しないといけないので
ご注意をコレ>>system.web.Extensions を参照してくださいな!!
第二弾へ続く{配列化して取得する。}
 

タグ

, AM, AndroidStudio2.0, Content-type, Dim bResult As Byte, Dim objSrializer As JavaScriptSerializer, Dim objWeb As WebClient, Dim sJson As String, Dim sTargetUrl As String, e As EventArgs, Handles Button1.Click, Imports System.Net, Imports System.Text, Imports System.Web.Script.Serialization, New JavaScriptSerializer, New WebClient, objWeb.DownloadData, Private Sub Button1_Click, Public Class Form1, RichTextBox1.Text, sender As Object, System.Text.Encoding.UTF8.GetString, system.web.Extensions, Visual Studio 2015 Windows, VS2015,

レンタルサーバさくらVPSでWEBサーバを構築するメモ書き。

2015.11.19

Logging


レンタルサーバさくらVPSでWEBサーバを構築するメモ書き。

yum -y install httpd
yum -y install php
#iptablesの設定はさくらのサポート等を参照
#mysqlのmariadbはググッてください(下記参照など)。
firewall-cmd --add-service=http
firewall-cmd --permanent --add-service=http
firewall-cmd --add-service=mysql
firewall-cmd --permanent --add-service=mysql
systemctl restart firewalld
systemctl start httpd
systemctl enable httpd

iptablesの設定

https://help.sakura.ad.jp/app/answers/detail/a_id/2423

mysqlのmariadbの設定
http://qiita.com/akito1986/items/98a8430d936b293cb354
これだけでWEBサーバが起動できます。
PHPの拡張をインストールしないといけない場合があります。
その他、rubyやPythonなどもインストールする事は可能です。
 

タグ

--add-service, --permanent, , AM, firewall-cmd, iptables, mariadb, MYSQL, Python, systemctl enable httpd, systemctl restart firewalld, systemctl start httpd, WEBサーバ, y install httpd, y install php, yum, ググッ, メモ書き, レンタルサーバさくらVPS, 下記参照, 拡張, 設定,

googleグラフとPHPでゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)する奴作ってみた。

2015.10.07

Logging


googleグラフとPHPでゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)する奴作ってみた。
ソースとzipファイルを載せときます。ご自由に可変してお使いください。
PHPファイルが3つと保存ファイル(log)が1つできます。
パスワードはご自由にad.phpから変更可能です。
次頁などの機能はつけていません。
あくまでも、自分の体重管理のために作ってみた
ちょっとしたものです。
ちなみに自分、いま結構、デブってます(゚∀゚)
「デブって言わせない!!」
「誰もデブって言ってないよ!!」
「ゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)あぁあああああ」
余談は置いといてメインはnot_fat_admin.phpです。
そちらのソースから追えば何とか読めると思います。
自分の心と同じでソースも汚いです。
コメント一切ないけどごめんね(´Д`)。
尚!!
動いているけど、正しく動いているかは不明。
間違ってたら「((´∀`))ケラケラ」笑いながら
直してお使いください。
あと、隠し要素でGET書き込みができるよ。
バグるけどニヒ。
DEMOサイト:zip358.com/not_fat/not_fat_admin.php
zipDL:not_fat.zip

<html>
  <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width" >
  <title>zip358.com:デブって言わせない!!管理がめん</title>
  <meta name="viewport" content="user-scalable=no,initial-scale = 1.0,maximum-scale = 1.0">
  <link rel="stylesheet" type="text/css" href="topcoat/etc/fonts/stylesheet.css">
  <link rel="stylesheet" type="text/css" href="topcoat/css/topcoat-desktop-dark.css">
  <link rel="stylesheet" type="text/css" href="topcoat/etc/css/main.css">
  <link rel="stylesheet" type="text/css" href="topcoat/etc/css/brackets.css"><!--[if lt IE 9]>
  <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
  </head>
  <body style="margin: 100px;line-height:120%;background-color: #006d9d;color:#fff;">
      <form action ="not_fat_admin.php" method="post" >
          PASSWORD : <input type="password" name="pass" class="topcoat-text-input" placeholder="text"><br><br>
<?php
    $str ="";
    $matubi = array("31","28","31","30","31","30","31","31","30","31","30","31");
    $m = date("m");
    $year = date("Y");
    if(is_numeric($_GET["m"])){$m = htmlspecialchars($_GET["m"]);}
    if(is_numeric($_GET["y"])){$year = htmlspecialchars($_GET["y"]);}
    if ( $year%4 == 0 && $year%100 != 0 || $year%400 == 0 ) {
        $matubi[1] = 29;
    }
    $str.= "$m 月 <select name='day'>";
    for($i=1;$i<=$matubi[$m-1];$i++){
        $str.="<option value=$i>".$i."</option>";
    }
    $str.= "</select>日<br><br>\r\n";
    $str.= '体重 : <input type="text" name="fat"  class="topcoat-text-input" placeholder="text">Kg 例 55.55<br><br>';
    $str.= "<input type=\"hidden\" name=\"m\" value=$m>\r\n";
    $str.= "<input type=\"hidden\" name=\"y\" value=$year>\r\n";
    echo $str;
?>
          <input type="submit"class="topcoat-button--large--cta"  value="体重を記録する。"><br><br>
      </form>
      <iframe src="not_fat.php" style="border: none;" name="not_fat" width="910px" height="510px"></iframe>
<?php
    include 'ad.php';
?>
  </body>
</html>
<html>
  <head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width" >
  <title>zip358.com:デブって言わせない!!</title>
    <script type="text/javascript" src="//www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load("visualization", "1", {packages:["corechart"]});
      google.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['月/日', '体重'],
<?php
$filename = "not_fat".date("Y")."-".date("m").".log";
$fl= fopen($filename, "r");
$pt = ",";
$length = 0;
$str =array();
$i=0;
while ($csv_s = fgetcsv($fl, $length, $pt)){
    if($csv_s[1] == "00.00"){$csv_s[1] =0;}
    $str[]= "['".$csv_s[0]."',".$csv_s[1]."]";
}
$html_data = implode($pt."\r\n", $str);
echo $html_data;
?>
        ]);
        var options = {
          title: 'デブって言わせない!!',
          hAxis: {title: '月/日',  titleTextStyle: {color: '#333'}},
          vAxis: {minValue: 0}
        };
        var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="chart_div" style="width: 900px; height: 500px;"></div>
  </body>
</html>
<?php
//パスワードを任意の文字に変えてください。初期設定pass
$pass_w = "pass";
if($_SERVER["REQUEST_METHOD"] == "POST"){
    $err =null;
   // echo $_POST["y"].":".$_POST["m"].":".$_POST["day"].":".$_POST["fat"].":".$_POST["pass"]."<br>";
    if(!is_numeric($_POST["y"])){$err.= "年が不正です。<br>\r\n";}else{$y=htmlspecialchars($_POST["y"]);}
    if(!is_numeric($_POST["m"])){$err.= "月が不正です。<br>\r\n";}else{$m=htmlspecialchars($_POST["m"]);}
    if(!is_numeric($_POST["day"])){$err.= "日が不正です。<br>\r\n";}else{$day=htmlspecialchars($_POST["day"]);}
    if(!preg_match("/[0-9][0-9]\.[0-9][0-9]/",$_POST["fat"])){$err.= "体重が不正です。<br>\r\n<br>";}else{$fat=htmlspecialchars($_POST["fat"]);}
    if($_POST["pass"] !==$pass_w){$err.= "PASSが不正です。<br>\r\n";}
    echo "<br><br>".$err;
    if(!$err){
        $filename = "not_fat".$y."-".$m.".log";
        $fl= fopen($filename, "r");
        $pt = ",";
        $i=0;
        $length = 0;
        $csv_s_day = array();
        $csv_s_fat = array();
        while (($csv_s = fgetcsv($fl, $length, $pt))){
             $csv_s_day[]=$csv_s[0];
             $csv_s_fat[]=$csv_s[1];
        }
        fclose($fl);
        if ( $y%4 == 0 && $y%100 != 0 || $y%400 == 0 ) {
            $matubi[1] = 29;
        }
        //var_dump($csv_s_day);
        for($i=0;$i<$matubi[$m-1];$i++){
            $c_set[$i] = $m."/".($i+1).",0";
            $L = array_search($m."/".($i+1), $csv_s_day);
            if($L !==false){
                $c_set[$i] = $m."/".($i+1).",".$csv_s_fat[$L];
            }
            if($m."/".($i+1) == $m."/".$day){
                $c_set[$i] = $m."/".($i+1).",".$fat;
            }
        }
        $csv_str = implode("\r\n", $c_set);
        $fl= fopen($filename, "w");
        fwrite($fl, $csv_str);
        fclose($fl);
        $_POST = array();
        chmod($filename, 0666);
    }
}

 

タグ

, AM,

さくらのレンタル―サーバーのCRONでファイルの呼び出し方が

2015.10.06

Logging

/usr/local/bin/php -f /home/xxxxx/www/hoge.php
cd /home/xxxxx/www/;/usr/local/bin/php hoge.php
cd /home/xxxxx/www/ && /usr/local/bin/php hoge.php
cd /home/xxxxx/www/ | /usr/local/bin/php hoge.php

さくらのレンタル―サーバーのCRONでファイルの呼び出し方が変わっていた
今までは一行目の呼び出し方でファイルの実行が可能だったのですが
この頃、仕様が変わったのかは分かりませんが、さくらのヘルプにも書いているように
実行させたいディレクトリまで、まずは移動して
走らせたいファイルを実行するという事を行わないと実行されません。
(※実行される場合もあり?)
二行目から解説すると二行目は、移動できなくても次の処理を実行します。
三行目は移動できたら処理を実行します。
四行目は処理は実行されませんが、こういう書き方もあるよ的な
事で書いてます。「|」この記号で処理と処理を結ぶと
Aの処理で帰ってきた値などをBの処理に引き継ぐことが出来ます。
簡単にいえばパラメータを渡すことが出来ます。
WEBでShellをちょっとしたときに使う場合、上記の方法を
つかう事が多いと思います。
覚えていたら何かと役に立ちますよ!!
 

タグ

AM, bin, cron, home, local, php hoge.php, shell, usr, xxxxx, サーバー, さくら, ディレクトリ, パラメータ, ファイル, ヘルプ, レンタル, 処理, 呼び出し方, 書き方, 記号,

memo_one-メモった―っていう軽量アプリを作ってみた。

2015.09.13

Logging


VisualStudio2015フリー版でmemo_one-メモった―っていう軽量アプリを作ってみた。
只今、ベクターにアプリ申請中ですが、
こちらでも公開します。ちなみにフリーソフトですが寄付は歓迎です的なw、、、。
どういうソフトなのかと言うと、日々のメモを管理するアプリです。
操作に関しては習うより慣れよっていう感じですが・・・。
これを作った経緯は、仕事をしている時にいままでExcelにメモ機能をつけて
管理していたのですがExcelでメモを見るのが見づらくなってしまって
この際、ExcelのVBAで作るのではなくてVSでつくちゃおうと
思って作りました。解像度により見栄えが悪くなる不具合があるかもしれません。
その場合は@zip358comへご連絡ください。
DLはこちらから。https://zip358.com/tool/memo_one.zip

タグ

AM, DL, Excel, memo_one, VBA, VisualStudio2015, VisualStudio2015フリー版, zip358com, アプリ申請中, フリーソフト, ベクター, メモ, メモ機能, 只今, 寄付, 操作, 日々, 管理, 経緯, 見栄え, 解像度, 軽量アプリ,

phpにはstdclassってものが有るだってさ。おそらくjavaにはないよ。

2015.08.25

Logging


phpにはstdclassってものが有る。使い方は下記の通り

$hoge = new stdclass();
$hoge->name = "(~.~)";
echo $hoge->name;

このstdclassってのは普通ならクラスの記述を書かないといけないのだけど、これはPHPの依存のクラスを使用して記述することが出来るらしい。スタンドクラス・・・、ジョジョかよと思いたくなるPHP記述ですね(((((;゚Д゚)))))。スコープとかなら、PHP以外の言語でも有ると思うけど、stdclass(スタンドクラス)は、最近、はじめて知りました。他にもつい最近、知ったPHPの記述方法とかもあります、他の言語でも同じような記述ができるか試してみたいです。この頃、全然 Javaとか触っていないしC系の言語も触っていないのが現状ですと言ってもそちらの言語ができるのかと言えば、う?んと言う回答ですけどね。あとSQLも勉強しなくちゃなと思うこの頃です。

タグ

, AM, echo, hoge, java, name, new stdclass, php, PHP以外, SQL, stdclass, ジョジョ, スコープ, スタンドクラス, 下記, 使い方, 依存, 現状, 言語, 記述, 記述方法, 通り,

Facebookの黒の歴史におらおらして投稿を全削除するソフト。

2015.08.13

Logging


Facebookの黒の歴史におらおらして全削除するソフトを自分のために自前しました。
このソフトの発想のもとはこのサイトです。
http://www.appps.jp/138365/
Facebookの投稿を全自動で削除する方法があったとは思わなかったので目からうろこでした。
コレなら自分でも作れるんじゃねぇとおもい
作ったのがこちらのソフト「Facebookおらおらクリックする」です。
使い方はFacebookのページの中にあるリンク文字をテキストボックスへ入力し
ボタンをクリックするだけで任意の文字をクリックしてくれます。「ニヒ(`・ω・´)」・・。
案外簡単につくれる品物です。ニヒ。
ちなみに動作環境はWindows10(WIN7あたりでは動くでしょう。)です。
Frameworkを導入しないと動きませんのでそちらはご自分でインストールしてください。
ちなみにパッケージかしていないのでウィルスチェック
で除かれる恐れはあります。
あくまでもフリーソフトなのでトラブル等は一切受付ません。
https://zip358.com/tool/フェイスブックをオラオラする.zip

タグ

AM, Facebook, Framework, WIN7あたり, Windows10, ウィルスチェック, うろこ, ご自分, テキストボックス, トラブル, ニヒ, パッケージ, フェイスブック, フリーソフト, ボタン, リンク文字, 使い方, 動作環境, 品物, 歴史, 発想, 自前,

非同期通信の改良版{jsonで非同期}

2015.07.22

Logging


 
つい最近、この方法を知った自分です・・・。それまではこういう方法で返せると思っていなかったというかソコまで考えていなかったです。ちなみに、このjson形式で送信すると複数のデータがやりとりできるので便利です。グーグルでjson形式で非同期受信などとググるとサンプルコードがでてきます。php結構凄いなとかおもいます。おそらく他の言語でも同じようなことが出来るのだと思います。javaとか確実に出来そうな気がします。
日々、他の人が書いたコードを見ることは勉強になります。こんな書き方があるだなとか、ほんと日々、勉強になります。自分の糧にも繋がります。いま自分がもっともコードを書くときに苦戦するのが変数やオブジェクトの名前付け・・・基本的に自分は英語があまりわからないので、すごく勉強していればよかったなと思うわけです。学生時代には一にも二にも勉強だとおもいます。遊びも大事ですけど・・、やはり勉強していると将来の幅が広がることは間違いないです。
 
サンプルサイトはこちら。https://zip358.com/tool/sample-0722/

<?php
$hoge = $_POST['hoge'];
$obj=array();
$obj["hoge"]="urlエンコードされた文字::".urlencode($hoge)."通常文字::".$hoge;
header("Content-Type: application/json; charset=utf-8");
echo json_encode($obj);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:sample-非同期2</title>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(function(){
   $("#textarea-hoge").keyup(function() {
      $.ajax({
         type: "POST",
         url: "sample-0722.php",
         dataType:'json',
         data: {
              "hoge" : $("#textarea-hoge").val()
         },
         success: function(data) {
            $("#hoge2").text(data.hoge);
         },
         error:function(data) {
         }
      });
   });
});
</script>
</head>
<body>
		<br><br>文字をURLエンコード処理して返します。何か入力してください。<br>※非同期通信なので性格に処理してくれるわけではありません。<br><br>
        <textarea id="textarea-hoge" rows="10" cols="100"></textarea>
		<br>
		<div id="hoge2"></div>
</body>
</html>

 

タグ

AM, body&gt, br&gt, code.jquery.com, data.hoge, DOCTYPE html&gt, function, head&gt, hoge2, jquery-1.11.2.min.js, jquery-migrate-1.2.1.min.js, meta charset, sample-0722.php, script src, script&gt, textarea id, textarea-hoge, textarea&gt, title&gt, utf-8, zip358.com,

phpってオブジェクトの継承ができるだって生意気な( ゚д゚ )

2015.06.19

Logging

<?php
class oya{
    private $hogeko;
    private $hogeta;
    function __construct() {
        $this->hogeko="hoge~ko";
    }
    function omake(){
        return $this->hogeko;
    }
    function oyadama($hogeko="hogeko"){
        return $hogeko;
    }
    function oyadako($hogeta="hogeta"){
        return $hogeta;
    }
}
class ko extends oya{
    function koda(){
        return parent::oyadako();
    }
    function  koyo(){
        return parent::oyadama();
    }
}
$oya = new ko();
$ko = new oya();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:大人(親と子)クラス</title>
</head>
<body>
    <p><?=$oya->koda();?></p>
    <p><?=$oya->koyo();?></p>
    <p><?=$ko->omake();?></p>
</body>
</html>

DEMO https://zip358.com/tool/extends.php
phpってオブジェクトの継承ができるだって生意気なんて(笑)。こういうコードを書く必要性を迫られていなければ・・・どこで使用すればよいのかがわからないという事になると思います。自分自身もこういうコードを書くことが無かったので忘れがちになっていました。ちなみにPHPにもコンストラクタ君がつかえるようです。昔は使えなかったことがPHP5ぐらいから使用できるようになったのは、良いことです・・・・。C++とかJavaとかそういう物をPHPも目指しているだと思います。メソッドも増える一方です、自分が知らないメソッドも結構あると思います。PHP公式のリファレンスを覗けって話ですけど仕事して帰ってきてゴトゴトしてたら、勉?する時間がないですね。作れよという話ですが今のところ作れていないのが現状です。

タグ

AM, body&gt, class ko extends oya, class oya, DOCTYPE html&gt, function koda, function omake, function oyadako, function oyadama, head&gt, hogeko, hogeta, html lang, meta charset, new oya, p&gt, return parent, title&gt, zip358.com, オブジェクト,

Functionの引数に初期値を設定するとφ(..)メモメモ。

2015.06.18

Logging

<?php
function memo($gets="メモ",$chk=false){
    if(!$chk)$gets.="った??!";
    return $gets;
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:Fチェック</title>
</head>
<body>
<p><?=memo("テスト",true);?></p>
<p><?=memo("テスト");?></p>
<p><?=memo();?></p>
</body>
</html>

DEMO https://zip358.com/tool/get-p.php
これ、覚えとくと便利な記述です、最初にFunctionの引数に初期値を与えて置けば、引数があるなしで処理を変更することも可能になります。ちょっとした事ですが知っていると知らないとでは差がでます。ちなみにC++でも同じことが出来ます。Javaで同じことが出来るかは未確認です。言語によってできる出来ないとかがあるので、アプリ開発時には注意が必要になります。Javaの場合、同じメソッド名で引数の違うものが作れてしまうのでおそらく、こういう事は出来ないと思います。この頃、知ったことですがVB6やAccessには黄金期があったということを知りました。そういえばVB6を使っていた会社があったなと、いまではVB2005とかにはバージョンアップしていると思います。こういうことを言えば敵をつくりそうですが、昔のほうがコードが見やすかった気がします。いまは、オブジェクト指向を更に良くしようと機能ベタベタ追加しているので、コードがややこしくなってきているように感じます。馬鹿なので人のコードを見るのがかなり、不得意です。
 

タグ

AM, body&gt, C++, chk, DOCTYPE html&gt, function memo, gets, head&gt, html lang, java, meta charset, p&gt, title&gt, utf-8, VB2005, VB6, zip358.com, オブジェクト指向, コード, 初期値, 引数,

jQueryでローディングって検索すると。

2015.05.20

Logging


 
jQueryでローディングって検索すると何やらいろいろヒットしました。なるほど、そういう事なのか、以外にも短いコードで書けるだなということが分かって目から鱗が落ちました。ロードされるまでGif動画を表示させてロード後切り替えているだけなんだ。jQueryってすごいですね。ちなみにjQuery.event.add(window,”load”,function(){…} こう書けばデータが読み込まれた後に処理が実行されます。ちなみにこの場合、HTMLや画像などのデータが読み込まれるまでGif画像を表示させる方法ですが、非同期通信を行っている間、ローディングのGif画像を表示させて普通に切り替える事も可能なんだということで、BBSもどきにその機能をつけてみました。コメントが表示されるまでローディング画像を表示させています。
https://zip358.com/tool/BBS

タグ

AM, BBSもどき, function, Gif動画, Gif画像, html, jQuery.event.add, load, window, コード, コメント, データ, ローディング, ローディング画像, ロード後, 以外, 処理, 方法, 機能, 短いコード, 非同期通信, ,

昨日のつづき、掲示板もどきを作りました。

2015.05.11

Logging


掲示板もどきを作りました。アドレスは下記を参照してください、ちなみに今は、ある名前で更新しないと更新できないように設定を変更しています。プログラムやSQLの説明ですが、まず初期の状態でテーブルにレコードを20件配置しidを1から20を手動で入れ込んでいます。また、cnt.txtはパーティションを変更しています(666)。そして、CSSフレームワークのbootstrap2.3.2を使用しています。これらとPHPファイルで掲示板もどきは機能しています。ちなみに最新のブラウザでしか動きません。動作確認はChrome以外行っていませんので他のブラウザでは未確認です。一応、iPhoneでも表示を確認してみましたが問題はなかったです。
動作は20件のレコードを繰り返し再利用している=過去のデータは消えていく。
※最終的に掲示板もどきから、そのうち・・・掲示板に作りこみます。
※cnt.txtには1という数字を保存しています。
https://zip358.com/tool/BBS/
追記:Twitterツイートをポップアップウィンドウで表示するように変更。

<?php
//session_start();
	if($_SERVER["REQUEST_METHOD"] = "POST" && $_POST["msg"]!="" && $_POST["name"]!=""){
		if (isset($_COOKIE['time'])) {
			setcookie( "time",1, time()+60, "/tool/BBS/","zip358.com",0);
		}else{
			setcookie( "time",1, time()+60, "/tool/BBS/","zip358.com",0);
			put_A(htmlspecialchars($_POST["name"]),htmlspecialchars($_POST["msg"]));
		}
	}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:掲示板もどき</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
function sbmit(){
	$.ajax({
	 type: "POST",
	 url: "index.php",
	 dataType:'html',
	 data: {
		  "name" : $("#tokumei").val(),
		  "msg" : $("#msg").val(),
	 },
	 success: function(data) {
		$("#sbmit").prop("disabled", true);
		$("#chk_put").html("一分後にページを読み込むかCookieを削除してください。そうすることで書き込み可能です。");
		put_B();
	 },
	 error:function(data) {
	 }
	});
}
function put_B(){
	$.ajax({
		 type: "POST",
		 url: "put.php",
		 dataType:'html',
		 data: {
			  "put" : "put//",
		 },
		 success: function(data) {
			$("#putbbs").html(data);
		 },
		 error:function(data) {
		 }
	});
}
$(function(){
	setInterval(function(){
        put_B();
    },2000);
});
function r_l(){
	setTimeout(function(){put_B();}, 3000);
}
</script>
    <!-- Le styles -->
    <link href="./assets/css/bootstrap.css" rel="stylesheet">
    <style type="text/css">
      body {
        padding-top: 20px;
        padding-bottom: 40px;
      }
      /* Custom container */
      .container-narrow {
        margin: 0 auto;
        max-width: 700px;
      }
      .container-narrow > hr {
        margin: 30px 0;
      }
      /* Main marketing message and sign up button */
      .jumbotron {
        margin: 60px 0;
        text-align: center;
      }
      .jumbotron h1 {
        font-size: 72px;
        line-height: 1;
      }
      .jumbotron .btn {
        font-size: 21px;
        padding: 14px 24px;
      }
      /* Supporting marketing content */
      .marketing {
        margin: 60px 0;
      }
      .marketing p + h4 {
        margin-top: 28px;
      }
    </style>
    <link href="./assets/css/bootstrap-responsive.css" rel="stylesheet">
    <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src="./assets/js/html5shiv.js"></script>
    <![endif]-->
    <!-- Fav and touch icons -->
    <link rel="apple-touch-icon-precomposed" sizes="144x144" href="./assets/ico/apple-touch-icon-144-precomposed.png">
    <link rel="apple-touch-icon-precomposed" sizes="114x114" href="./assets/ico/apple-touch-icon-114-precomposed.png">
    <link rel="apple-touch-icon-precomposed" sizes="72x72" href="./assets/ico/apple-touch-icon-72-precomposed.png">
    <link rel="apple-touch-icon-precomposed" href="./assets/ico/apple-touch-icon-57-precomposed.png">
    <link rel="shortcut icon" href="./assets/ico/favicon.png">
  </head>
  <body>
     <div class="container-narrow">
		<div class="masthead">
			<ul class="nav nav-pills pull-right">
			<li class="active"><a href="/tool/BBS/">BBS</a></li>
			</ul>
			<h3 class="muted">BBS:掲示板もどき</h3>
		</div>
			<hr>
		<div class="jumbotron">
			<h1>BBS::About</h1>
			<p>20件の書き込みを表示します→クエリを使いまします。<br>スマホでも動くかもしれませんが・・・<br>最新のブラウザでかつ、JavaScriptがONになっていないと表示されません。</p>
			<p id="chk_put">
			<?php if(isset($_COOKIE['time'])){echo"一分後にページを読み込むかCookieを削除してください。そうすることで書き込み可能です。";} ?>
			</p>
		</div>
		<hr>
		<div class="container">
			<input type="text" name="name" id="tokumei" pattern="^[0-9A-Za-z]+$" maxlength="20">[※Twitterアカウント名で記入すると便利です。]<br>
			<textarea id="msg" style="width:650px;height:200px;" name="msg" maxlength="140"></textarea>[140文字まで]<br><br>
			<input type="button" value="Messageを送信する。" onclick="sbmit();"id="sbmit"/><br>
		</div>
		<hr>
		<div class="container">
			<div id="putbbs"></div>
		</div>
		<hr>
		<div class="footer">
			<p>&copy; Company 2015</p>
		</div>
    </div> <!-- /container -->
    <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="./assets/js/jquery.js"></script>
    <script src="./assets/js/bootstrap-transition.js"></script>
    <script src="./assets/js/bootstrap-alert.js"></script>
    <script src="./assets/js/bootstrap-modal.js"></script>
    <script src="./assets/js/bootstrap-dropdown.js"></script>
    <script src="./assets/js/bootstrap-scrollspy.js"></script>
    <script src="./assets/js/bootstrap-tab.js"></script>
    <script src="./assets/js/bootstrap-tooltip.js"></script>
    <script src="./assets/js/bootstrap-popover.js"></script>
    <script src="./assets/js/bootstrap-button.js"></script>
    <script src="./assets/js/bootstrap-collapse.js"></script>
    <script src="./assets/js/bootstrap-carousel.js"></script>
    <script src="./assets/js/bootstrap-typeahead.js"></script>
  </body>
</html>
  <?php
function put_A($name,$msg){
	if(file_exists("./cnt.txt")){
		$fl = fopen("./cnt.txt", "r");
		$cnt = intval(strval(fgets($fl)));
		fclose($fl);
		$mysqli = new mysqli("host","user","pass","DB");
		if($mysqli->connect_error){
			exit();
		}
		$mysqli->set_charset("utf8");
//echo "insert into bbs (id,name,msg) values ( ".$cnt.",'".$name."','".$msg."') on duplicate key update id = ".$cnt.", name = '".$name."', msg = '".$msg."';";
		$date = new DateTime();
		$mysql_set = $mysqli->prepare("UPDATE bbs SET name ='".$name."', msg ='".$msg."',times ='".$date->format('Y-m-d H:i:s')."' WHERE id = ".$cnt.";");
		$mysql_set->execute();
		$mysqli->close();
		$cnt++;
		if($cnt>20){
			$cnt=1;
		}
		$fl = fopen("./cnt.txt", "w");
		if(flock($fl,LOCK_EX)){
			fputs($fl,$cnt);
			fclose($fl);
		}
	}
	///put
}
?>
<?php
if($_POST["put"]="put//"){
	echo put_B();
}
function put_B(){
		$mysqli = new mysqli("host","user","pass","DB");
		if($mysqli->connect_error){
			exit();
		}
		$result = $mysqli->query("SELECT * FROM bbs ORDER BY times DESC");
		if($result){
		  //1行ずつ取り出し
		  while($row = $result->fetch_object()){
			//エスケープして表示
			$hoge[0] = $row->name;
			$hoge[1] = $row->msg;
			$str.= '<div class="container">';
			$str.= '<table class="table table-striped"><tr><td><button type="button" class="btn">Nmae:'.mb_convert_encoding ($hoge[0],"UTF-8","auto").'さんのコメントを<a onclick="window.open(\'http://twitter.com/share?url=zhttps://zip358.com/tool/BBS/&text='.mb_convert_encoding ($hoge[1],"UTF-8","auto").'&via='.mb_convert_encoding ($hoge[0],"UTF-8","auto").'&related=zip358com&hashtags=掲示板\', \'\', \'width=800,height=250\');">ツイートする</a></button></td></tr><tr><td>'.nl2br(mb_convert_encoding ($hoge[1],"UTF-8","auto")).'</td></tr></table>';
			$str.= '</div>';
		  }
		}
		$mysqli->close();
		return $str;
	///put
}
?>

 

タグ

AM,

使わないうちに書き方が変わっていましたMySQL。

2015.05.10

Logging


MySQLなんて全然、PHPで呼び出すコードをココ数年書かなくても何も困ること無く生きてきた自分です。その間にもPHPのバージョンが更新されていました。最近使わなかったMySQLでも触ってみようかなとググると目から鱗!!。いつの間にか書き方が微妙に変わってましてDBに接続したりクエリを呼び出したりするのが何だか前より楽になっているような気がします。前のことを殆ど忘れてしまったのでどうこう言えないのですが、何だかこの書き方は覚えやすいなと思います。ちなみに自分はいろいろと浅く広くいろいろな言語に手を出しているので・・・これと言って超強みはないのですが、DB周りは本当に触る機会がなくてあんまり無いですが、DBを使ったものをなにか作りたいなと思っています。
 

function selctsql(){
	$mysqli = new mysqli("host","user","pass","DBname");
	if ($mysqli->connect_error){
	  print("接続失敗:" . $mysqli->connect_error);
	  exit();
	}
	$result = $mysqli->query("SELECT * FROM test ORDER BY id DESC");
	if($result){
	  //1行ずつ取り出し
	  while($row = $result->fetch_object()){
		//エスケープして表示
		$hoge[0] = $row->qur1;
		$hoge[1] = $row->qur2;
	  }
	}
	return $hoge;
}

タグ

AM, connect_error, dbname, exit, fetch_object, FROM test ORDER BY id DESC, function selctsql, hoge, mysqli, new mysqli, query, qur1, qur2, result, return, row, select, クエリ, バージョン, 接続失敗, 書き方,

Android開発ふかすぎる、、、結構赤っ恥だ。

2015.05.07

Logging


Android開発ふかすぎる…もろ自分が素人だよと
言わないばかりの内容をアップしていっているだけど、
徐々に進化もしていることは確かです。
今回、anaの旅割計算でカレンダー表示が
出ないよという奴を対応しました。
Android4.2以降なら表示されるはずです。
徐々にどのようにすればそう言う事ができるかも
表面上わかってきました。
いきなり深い事をやったら面食らうので浅いところから
徐々に進めば良いかなと思います。
表面上の話は自分が完璧に理解できるまで
記事としてはアップすることはないです。←たぶん、、、。
追記:
今回修正した箇所は三箇所だけ、あとコードをすこしばかし書き換えました。
そうすることで上手くいきましたが、Versionによってうまく機能するしない
という問題が発生しました。
ある程度、対応したものを作る場合、
オリジナルviewを作らないと駄目だということが
早くもこの段階でわかってしまったので・・・・結構凹んでます。
ということで?使っていただける方は
再度、アンイストールして入れ直してみてください。
https://zip358.com/tool/anatabiwari.apk?[v4.2~v4.4]
https://zip358.com/tool/anatabiwari2.apk[v5~]
onCreateところのPGをこちらに可変しました。

        DatePicker datePicker1 = (DatePicker) findViewById(R.id.datePicker);
        datePicker1.updateDate(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH);
/*Android Version5
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        long time = cal.getTimeInMillis();
        datePicker1.setMinDate(time);
*/
/*        datePicker1.init(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH, new OnDateChangedListener() {

 
追記2:Build.VERSION.SDK_INTでバージョンにより
処理の切り替えるようプログラムを入れましたので、どちらをDLしても問題ありません。

タグ

AM, Android Version5, Android4.2以降, Build.VERSION.SDK, cal.get, cal.getTimeInMillis, cal.set, Calendar cal, Calendar.DAY, Calendar.DAY_OF_MONTH, Calendar.getInstance, Calendar.MONTH, Calendar.YEAR, DatePicker datePicker1, datePicker1.init, datePicker1.setMinDate, datePicker1.updateDate, findViewById, long time, new OnDateChangedListener, R.id.datePicker, アンイストール,

ANA旅割計算の締め切り日表示するアプリを作ってみました。

2015.05.04

Logging


ANA旅割計算の締め切り日表示するアプリを作ってみました。Android4.0以降ならすんなりと動くと思います。ただし実機で確認したところ、上記のような見栄えの良い感じではなかったです。カレンダーが表示されていなくて、SELECTバーでの選択表示でした。ちなみにアプリのコードも貼っときます。まだまだ、改良できそうなんですけどダサいコードだな、どうすれば短いコードになるだろうと思ってます。最初はボタンをクリックしないで動くようにコードを書いていたのですが、実機で確認したら、datepikerのイベントが発生したらalert画面が表示される事になってたのですが、操作性を考慮してButtonに切り替えました。あえて、datepikerのイベントで動くコードもコメントにして残してます。こんなしょぼいアプリを作るのに数時間費やしました。アルゴリズム的には出来るですが、未知の言語は辛いですAndroidのAPI機能が全然わからない感じです・・・・。リファレンスの本を買おうかな。。。
 
今回のアプリは上位機種のAndroidならそれなりの見栄えで表示されると思います。
DLはこちらから、
https://zip358.com/tool/anatabiwari.apk?[v4.2~v4.4]
https://zip358.com/tool/anatabiwari2.apk[v5~]
改正版 追記:ウェブサービス (どちらもショボい(`・ω・´))
http://zip358.com/tool/ANAmobile/?[mobile用]
http://zip358.com/tool/ana_calendar/ [PC用]

package com.example.zip.myapplication4;
import android.content.DialogInterface;
import android.preference.DialogPreference;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.DatePicker;
import android.app.AlertDialog;
import android.widget.DatePicker.OnDateChangedListener;
import java.security.acl.Permission;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DatePicker datePicker1 = (DatePicker) findViewById(R.id.datePicker);
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        long time = cal.getTimeInMillis();
        datePicker1.setMinDate(time);
/*        datePicker1.init(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH, new OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                String str = Integer.toString(year) +"/" + Integer.toString(monthOfYear + 1) + "/" + Integer.toString(dayOfMonth);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
                Date date = null;
                Date date1 = null;
                Calendar cal1 = Calendar.getInstance();
                Calendar cal2 = Calendar.getInstance();
                Calendar cal3 = Calendar.getInstance();
                Calendar cal4 = Calendar.getInstance();
                try {
                    date = sdf.parse(str);
                    cal1.setTime(date);
                    cal1.add(Calendar.DATE, -60);
                    cal2.setTime(date);
                    cal2.add(Calendar.DATE, -45);
                    cal3.setTime(date);
                    cal3.add(Calendar.DATE, -28);
                    cal4.setTime(date);
                    cal4.add(Calendar.DATE, -21);
                    new AlertDialog.Builder(MainActivity.this)
                            .setTitle("ANA旅割締め切り日")
                            .setMessage("旅割60締日"+ String.format("%2d月%2d日", cal1.get(Calendar.MONTH)+1, cal1.get(Calendar.DAY_OF_MONTH))+ "\n" +
                                            "旅割45締日"+ String.format("%2d月%2d日", cal2.get(Calendar.MONTH)+1, cal2.get(Calendar.DAY_OF_MONTH))+ "\n" +
                                            "旅割28締日"+ String.format("%2d月%2d日", cal3.get(Calendar.MONTH)+1, cal3.get(Calendar.DAY_OF_MONTH))+ "\n" +
                                            "旅割21締日"+ String.format("%2d月%2d日", cal4.get(Calendar.MONTH)+1, cal4.get(Calendar.DAY_OF_MONTH))+ "\n"
                            )
                            .setPositiveButton("閉じる", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                }
                            })
                            .show();
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
        });
*/
    }
    public void  anatabi(View v) throws ParseException {
        DatePicker datePicker1 = (DatePicker) findViewById(R.id.datePicker);
        String str = Integer.toString(datePicker1.getYear()) +"/" + Integer.toString(datePicker1.getMonth()+1) + "/" + Integer.toString(datePicker1.getDayOfMonth());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        Date date = null;
        Date date1 = null;
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        Calendar cal3 = Calendar.getInstance();
        Calendar cal4 = Calendar.getInstance();
        date = sdf.parse(str);
        cal1.setTime(date);
        cal1.add(Calendar.DATE, -60);
        cal2.setTime(date);
        cal2.add(Calendar.DATE, -45);
        cal3.setTime(date);
        cal3.add(Calendar.DATE, -28);
        cal4.setTime(date);
        cal4.add(Calendar.DATE, -21);
        new AlertDialog.Builder(MainActivity.this)
                .setTitle("ANA旅割締め切り日")
                .setMessage("旅割60締日" + String.format("%2d月%2d日", cal1.get(Calendar.MONTH) + 1, cal1.get(Calendar.DAY_OF_MONTH)) + "\n" +
                                "旅割45締日" + String.format("%2d月%2d日", cal2.get(Calendar.MONTH) + 1, cal2.get(Calendar.DAY_OF_MONTH)) + "\n" +
                                "旅割28締日" + String.format("%2d月%2d日", cal3.get(Calendar.MONTH) + 1, cal3.get(Calendar.DAY_OF_MONTH)) + "\n" +
                                "旅割21締日" + String.format("%2d月%2d日", cal4.get(Calendar.MONTH) + 1, cal4.get(Calendar.DAY_OF_MONTH)) + "\n"
                )
                .setPositiveButton("閉じる", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                    }
                })
                .show();
    }
}

 

タグ

AM,

Tera TermのマクロTTLを使用して自動ログインする方法はこんな感じ。

2015.05.02

Logging


UTF-8形式のファイルを作成して下記のコードを記載します。そして任意のファイル名をつけて拡張子TTLで保存します。その後、任意のファイルをダブルクリックします。この際、ファイルの関連付けがされていなければTera Termのexeファイルが保存されている場所にttpmacro.exeが存在しますので、そちらと関連付けを行います。
Tera Termが保存されている階層→”C:\Program Files\teraterm\”

HOSTADDR = ‘255.255.255.255’
USERNAME = ‘USERNAME’
PASSWORD = ‘PASSWORD’
COMMAND = HOSTADDR
strconcat COMMAND ‘:22 /ssh /2 /auth=password /user=’
strconcat COMMAND USERNAME
strconcat COMMAND ‘ /passwd=’
strconcat COMMAND PASSWORD
connect COMMAND
wait ‘#’
sendln ‘ls’
sendln ‘cd /var/www/html’

上記の記述してあるホスト名、ユーザー名、パスワードを変更することでLinuxサーバにログインすることが可能です。また、waitと言うのは文字待ち(ここでは#待ち)。sendlnは文字を自動的に送信します。要するに自動でコマンドを打つ事が可能なので、WEBサーバやDBサーバを自動で構築することも不可能ではないですが、若干面倒くさいです・・・。Tera Termのマクロコマンドを知っていなくても、sendlnなどを使用してLinuxコマンドで処理する事も可能ですしマクロと組み合わせるともっと便利になるかもしれません。Tera Termのマクロの存在は知っていましたが使う機会が全然なかったので自分はコレぐらいのことしか知りません。

タグ

AM, connect COMMAND, HOSTADDR, Linuxコマンド, ls, passwd, password, Program Filesteraterm, sendln, strconcat COMMAND PASSWORD, strconcat COMMAND USERNAME, ttpmacro.exe, username, UTF-8形式, ダブルクリック, ファイル, マクロコマンド, めちゃくちゃ, リズム, 拡張子TTL, 関連付け,

Androidアプリを若干修正しました。勤務時間計算。

2015.04.29

Logging


勤務時間の計算ができるアプリを若干修正しました。実機で操作してみた結果、Buttonを押して計算するのは無いなと思ってきたので次回、作りなおすときはButtonは削除します。今回の修正点は背景の色を変えたところとか、メニューバーを削除したところやアプリ名をMyApplicationから勤怠計算と名前を変えたところなのです。( ´・ω・`)< ショボいアプリをますます、しょぼくしていた要素を排除しました。あとはビジュアル面なんです。これが今のところ自分ではうまく変えれないですね。xml部分を変えれば簡単に変更できるのかなぁ・・・・とか思ったけどどうも無理(´∀`*)ポッい、まだまだ市販のアプリには程遠いような気がします。しかし千里の道も一歩からと言いますから、作れば作るほど進化していくと思います。
習うより慣れよです!!
追記
今後、このしょぼい勤怠計算にDBとか使用して月の労働合計時間とか取れるようにしたり‥という案も考えていますので・・・・暫しお待ち下さい。勤怠計算で徐々に機能を追加して勉強していきます。ビジュアル部分も完璧になればリリースしても良いかなと思っていますが、かなり道のりは遠そうです。たぶん、AndroidアプリとかJAVAの知識がレベル5ぐらいです、このレベルをレベル80ぐらいに上げないとリリースは無理だと思ってます。なので、いつの日かリリースします(´Д`)。
https://zip358.com/tool/kintai.apk?※ダウンロードしてインストールすればAndroid4.2以降なら動作します、尚、インストールしている方は以前のアプリをアンインストールして再度、インストールしてください。
 

タグ

AM, Android4.2以降, Androidアプリ, button, java, MyApplication, xml部分, かなり道のり, ショボいアプリ, しょぼい勤怠計算, ところ, ビジュアル部分, ビジュアル面, メニューバー, リリース, 修正点, 労働合計時間, 勤務時間計算, 千里, 実機, 若干,

Android4.0アプリを作ってみて自配布してみた。( ´・ω・`)< ショボいな。

2015.04.04

Logging


 
Android4.0以降ならうごくアプリを作ってみました、かなりしょぼいものですが案外簡単に制作できることが分かって目からうろこです。ただしjavaがあまりわかっていないので、もっとコード短くて良いはずだけど、若干無駄なコードを書いてしまってすこし萎えた。このアプリは単なる勤務時間の計算しているだけなので然程、難しい処理をしていないけど、こうして配布できるのはAndroidの良さだ。審査いらずで自前、配布できるのは便利だ。このごろ、iosも正規ルート以外でも配布可能だと知ったんだけど若干面倒くさいので今のところ、iosのアプリは作るつもりはないけど・・・・。Androidはなんか、こんなしょぼい数行のコードでも実機で動くと楽しいとしったので、また、何か思いつけば配布します。
ちなみにダウンロードしたものをインストールすればAndroid4.0以降の端末なら動作します。
https://zip358.com/tool/kintai.apk?(なんか、計算あっての?古いのはあってないぽっいな。嘘!)
←エミュレータで動かした画像。( ´・ω・`)< ショボいな

タグ

AM, Android4.0, Android4.0アプリ, Android4.0以降, iOS, java, いな, うろこ, エミュレータ, かなりしょぼいもの, コード, しょぼい数行, すこし, 実機, 審査, 正規ルート以外, 端末, 自前, 若干, 配布, 難しい処理,

#サンプルコード 極力おなじコードを書かないようにする方法2。

2015.03.13

Logging


極力おなじコードを書かないようにする方法のつづき、明日、VS2013で作成したコードをうっぷすると記載しましたが、本日の暇な時間を使って作成しました。コードは下記のとおりです。上記の画像と同じオブジェクト(Button)を作成して下記のコードを貼り付けるとExcelのサンプルコードと同様の処理をします。今回のコードに関してはzipでの配布はしない事にしました。このコードを動かすためにはVisual Studio Community & Express 2013を使用しています(無償版)。ダウンロードしてインストールして動かしてみてください。なお、マイクロソフトにアカウント登録を行わないといけません。MSNメッセンジャーなどを昔使用していた方などは、再度登録する必要はありません。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        bt_ck(sender, 1)
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        bt_ck(sender, 2)
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        bt_ck(sender, 3)
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim bt_ary() As Button = {Me.Button1, Me.Button2, Me.Button3}
        For i As Integer = 0 To bt_ary.Count
            bt_ary(i).Text = ""
        Next
    End Sub
    Sub bt_ck(obj As Object, i As Integer)
        If obj.text = "(^_^)v " & i Then
            obj.text = "(^_^)g " & i
        Else
            obj.text = "(^_^)v " & i
        End If
    End Sub
End Class

 

タグ

AM, e As EventArgs, End Sub, For i As Integer, Handles Button1.Click, Handles Button2.Click, Handles Button3.Click, Handles Me.Load, If obj.text, Me.Button1, Me.Button2, Me.Button3, obj As Object, Private Sub, Private Sub Button1_Click, Private Sub Button2_Click, Private Sub Button3_Click, Private Sub Form1_Load, Public Class Form1, sender As Object, Visual Studio Community,

#サンプルコード 極力おなじコードを書かないようにする方法。

2015.03.13

Logging


極力おなじコードを書かないようにする方法。同じオブジェクトを複数配置する場合、クリックした時の処理も同じだったりします。そういう時に同じ処理を何回も書くのはちょっと手間だったりします。オブジェクト名が違うだけのために同様の処理コードを何度も書かなくてはならないなど、面倒くさいので自分は下記のようなコードを書いて同じコードを書かないようにしています。これは例えばの例ですので、他の方法もあると思います。Excelじゃなければもっと大雑把な方法で書くことも可能です。
明日、VSのフリーを使用して同じようなコードなど記載します。もしかすると路線を変更して何かのツールを作るかもしれません(´Д`)。この頃、VSもまともに使用していないので覚えてません・・・・と言うより、感覚的にあれあったなで覚えていますのでググりながらコードを書いてます。スランプ8年目ぐらいになります。もともとスランプでしたのであまり変わらないですね。「えっはい」(゚Д゚)
このコードちょっと意地悪なコードです。(´・ω・`)わかるひとがみると斜め向いたコードだと理解するでしょう(ニヒ、旭化成)
サンプルコードも置いときます。ご自由にお使いください。https://zip358.com/tool/hogeta.zip[DL]

Private Sub CommandButton1_Click()
    cmd_ck CommandButton1, 1
End Sub
Private Sub CommandButton2_Click()
    cmd_ck CommandButton2, 2
End Sub
Private Sub CommandButton3_Click()
    cmd_ck CommandButton3, 3
End Sub
Sub cmd_ck(obj As MSForms.CommandButton, i As Integer)
Dim obj_cmd As MSForms.CommandButton
Set obj_cmd = obj
If obj.Caption = "(-.-)v " & i Then
    obj.Caption = "(-.-)g " & i
Else
    obj.Caption = "(-.-)v " & i
End If
Set obj_cmd = Nothing
End Sub
Private Sub UserForm_Initialize()
Dim cmd As MSForms.CommandButton
Dim ary_cmd As Variant
Dim i As Integer
ary_cmd = Array(CommandButton1, CommandButton2, CommandButton3)
For i = 0 To UBound(ary_cmd)
    Set cmd = ary_cmd(i)
    cmd.Caption = ""
    Set cmd = Nothing
Next
End Sub

タグ

0 To UBound, AM, cmd_ck CommandButton1, cmd_ck CommandButton2, cmd_ck CommandButton3, cmd.Caption, Dim ary_cmd As Variant, Dim cmd As MSForms.CommandButton, Dim i As Integer, Dim obj_cmd As MSForms.CommandButton, End Sub, If obj.Caption, obj As MSForms.CommandButton, Private Sub CommandButton1_Click, Private Sub CommandButton2_Click, Private Sub CommandButton3_Click, Private Sub UserForm_Initialize, Set cmd, Set obj_cmd, オブジェクト, スランプ,

#プログラムサンプル ブログパーツは検索して出てくるのでうっぷします。

2015.03.11

Logging


ブログパーツの簡素な仕組みをUPします。基本はこれだけです。基本はこれだけですけど応用すると少々面倒くさいのでそこら辺はご想像におまかせします。これを基にして正規に配布する状態にするには、サーバの負荷の事やセキュリティとかそういう事まで考えなくてはならないので少々面倒くさいです。特にIDを発行して配布する場合などは結構、コードを書かないといけないです。また、悪意のあるユーザーがサーバに負荷をかけれる要因にもなりますので、安易にブログパーツを提供するのはオススメできません。ちなみに自分のブログパーツ用のJSを貼り付けても動作はしません(ファイルがないので)。ただ、下記のサンプルコードを自分自身のサーバ上に設置し、設置したURL(任意のURL)をJSで呼び出すと動作し、それを配布することも可能です。
PHPファイル

<?php
header("Content-type: application/javascript");
$str = htmlspecialchars($_GET["hoge"]);
if($str!=""){
	echo "document.write($str);";
}else{
	echo "document.write('hoge!?');";
}
?>

JS貼付け用。

<script src="https://zip358.com/tool/sample-tool/sample-blogtool.php?hoge='こんにちは'" language="JavaScript" charset="utf-8"></script>

タグ

AM, charset, Content-type, document.write, echo, header, hoge, htmlspecialchars, javascript, JS貼付け用, script src, script&gt, STR, utf-8, これだけ, ご想像, サーバ, セキュリティ, そこら辺, プログラムサンプル ブログパーツ, 負荷,

( #PHPサンプル )非同期通信のPHPサンプルコードを作ってみましたのでどうぞ。

2015.03.01

Logging


非同期通信で入力した文字をURLエンコード して返す、コードを書いてみましたのでどうぞ。お使いください。ただし、この処理には欠陥があって処理に負荷がかかると上手く結果を返してくれない恐れがあります。非同期処理なので処理するプログラムにばんばんと値を投げますが、返答を待たずに次の処理を投げるので、どの処理が最初に返ってくるのかは、わからないのです。一見、うまく動いてそうですけどただ、処理に負荷がかかっていないのでうまく処理された状態になっているだけです。なので、非同期処理を使う場合は、投げる値にID(順番)を付与して処理しないといけないです。
トイウコトデ、サンプルコードを置いときますのでお使いください。(デモサイトこちら
https://zip358.com/tool/sample-0301.zip(DL)
ソースは下記参照
HTML側(JQuery側)のソース=処理を投げる側=処理された結果を出力する側。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:sample-非同期</title>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(function(){
   $("#textarea-hoge").keyup(function() {
      $.ajax({
         type: "POST",
         url: "sample-0301.php",
         dataType:'html',
         data: {
              "hoge" : $("#textarea-hoge").val(),
         },
         success: function(data) {
            $("#hoge2").text(data);
         },
         error:function(data) {
         }
      });
   });
});
</script>
</head>
<body>
		<br><br>文字をURLエンコード処理して返します。何か入力してください。<br>※非同期通信なので性格に処理してくれるわけではありません。<br><br>
        <textarea id="textarea-hoge" rows="10" cols="100"></textarea>
		<br>
		<div id="hoge2"></div>
</body>
</html>

PHP側のソース=処理する側。

<?php
$hoge = $_POST['hoge'];
echo "urlエンコードされた文字::".urlencode($hoge)."通常文字::".$hoge;
?>

タグ

AM, body&gt, br&gt, code.jquery.com, DOCTYPE html&gt, function, head&gt, hoge2, html lang, jquery-1.11.2.min.js, jquery-migrate-1.2.1.min.js, meta charset, sample-0301.php, script src, script&gt, textarea id, textarea-hoge, textarea&gt, title&gt, zip358.com, トイウコトデ,

PHP学習サイトでレベル20の問題をごねってみた。ゴネゴネ(´Д`)m

2015.01.24

Logging


 
前回の記事で紹介したPHP学習サイトでレベル20の問題を解いてみました。実際、学習サイトでは解かなかったのですが一応、サンプルサイトを作ってみました(※最新のブラウザでしか表示されません)。作るにあたって苦になった所はゼロです(ΦωΦ)フフフ…。HTML5のFormタグ書いてゴニョゴニョ…(ノ゚д゚(; ̄Д ̄)。して送信しています。POSTで送信して自分自身でキャチした値を表示しています。かなり文字などは見えにくいですが、お遊びで作ったのでユーザー側の操作性などは知らんぷりです。送信ボタン押下後、一回ページが再度読み込まれたり違うページが読み込まれて処理される処理のことを同期処理といいます。じゃ非同期処理はどんなのっていうのを、今度、サンプルサイトを作ってみることにします。今回、重要なポイントはformタグ部分とPHPの処理部分です。その他はおまけです。※今回のサンプルコードで見て欲しかったのは、送信した時にHTMLタグなど記入されていたら変換している事とtextareaに改行コードが入っていたら改行して表示させているトコロがポイントです。あとの背景に動画流しているとか、そういうのはε-(´∀`*)ホッといてください自己満足の世界ですから・・・。
サンプルサイトを貼っときます。
https://zip358.com/tool/sample-echo/index.php
必要なファイル
同じ階層に必要なファイルindex.php,vide01.mp4(フリーの動画を引っ張ってきました(^^))
index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:sample-echo?</title>
<style>
video {
    position: fixed;
    right: 0;
    bottom: 0;
    min-width: 100%;
    min-height: 100%;
    width: auto;
    height: auto;
    z-index: -100;
    background-size: cover;
}
textarea{
	width:250px;
	height:300px;
}
#main{
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	margin: auto;
	width:650px;
	height:600px;
	background:#556B2F;
    filter:alpha(opacity=40);
    -moz-opacity: 0.4;
    opacity: 0.4;
    -webkit-border-top-left-radius: 10px;
    -webkit-border-top-right-radius: 20px;
    -webkit-border-bottom-right-radius: 30px;
    -webkit-border-bottom-left-radius: 40px;
    -moz-border-radius-topleft: 10px;
    -moz-border-radius-topright: 20px;
    -moz-border-radius-bottomright: 30px;
    -moz-border-radius-bottomleft: 40px;
}
#sub{
	width:250px;
	height:400px;
	overflow: scroll;
    filter:alpha(opacity=80);
    -moz-opacity: 0.8;
    opacity: 0.8;
	background:#fff;
	color:#DC143C;
	font-size:16px;
}
form{
	margin: 50px;
}
input,textarea{
	filter:alpha(opacity=80);
    -moz-opacity: 0.8;
    opacity: 0.8;
	color:#DC143C;
}
</style>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php
?>
<video autoplay="" loop="" >
    <source src="./vide01.mp4" type="video/mp4">
</video>
<div id="main">
<table>
<tr>
<td>
<form action="./index.php" method="post">
<input type="text" / name="name"><br><br>
<textarea name="msg"></textarea><br><br>
<input type="submit" /><br>
</div>
</form>
</td>
<td>
<div id="sub">
<?php
	echo htmlspecialchars($_POST["name"])."<br><br>".nl2br(htmlspecialchars($_POST["msg"]));
?>
</td>
</tr>
</div>
</body>
</html>

タグ

AM,

WordPressの擬似URLの仕組みってこれだけだと思います( ´д)ヒソ(´д`)ヒソ(д` )

2015.01.23

Logging


 
WordPressの擬似URLの仕組みってこれだけだと思います。自分の記事は静的なアドレス(擬似)になっていると思います。これはWordPressの設定のパーマリンク設定を/%postname%.htmlこういうふうに設定しているからhtmlファイルで作ったようなURLで表示されているわけです。ちなみに公開途中でURLの表示設定をいじくると今まで検索で表示されていたものが全部飛んじゃうでSEO的にオススメできません。じゃ動的URLってなにかと言えば、zip358.com?p=1とか言うアドレスでページが表示されるURLを動的URLって言います。話し戻しまして、これってどういう仕組みで動いているのかと言う疑問符が付くと思います。答えはこういう感じ、あるURLを入力するとDBにそのURLは存在するかと言う問い合わせを検索かけます、検索を結果が有れば表示するという事をしているだけです。ちなみに.htaccessとphpの合わせ技になります。.htaccessに、あるURLが飛んできたらこのPHPを見てねという処理をしてあげれば良いわけです。.htaccessはURLを偽造できます。(ΦωΦ)フフフ…。
今回はDB処理検索を除いたサンプルサイトを作りましたのでご覧ください。
https://zip358.com/tool/sample-x/あいうえお.htmlこのサイトURLの日本語を変更しても拡張子を変更してもサイトが表示されます(※https://zip358.com/tool/sample-x/の移行URL変更だったらhttps://zip358.com/tool/sample-x/あいうえお/wawa.htmlでも同じサイトが表示されます。:存在しないURL以外、同じサイトを表示(ΦωΦ)フフフ…ヤバイか?)。
https://zip358.com/tool/sample-x/の配下に.htaccessファイルとindex.phpを置いています。
.htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /tool/sample-x/index.php [L]

index.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>zip358.com:sample-x</title>
<link rel="stylesheet" type="text/css" href="css/html5reset.css"  />
<style>
iframe { width: 95%; height: 95%; position: absolute; margin: 0; }
body{font-size:16pt;overflow:hidden;}
</style>
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php
 echo '<a href="http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"].'">http://'.$_SERVER["HTTP_HOST"] .htmlspecialchars(urldecode ($_SERVER["REQUEST_URI"])).'</a>というアドレスを打ちましたね<br><br>';
?>
<iframe src="/tool/sample-x/html5up-twenty/index.html"  marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0" scrolling="auto">
</body>
</html>

タグ

AM, body&gt, br&gt, DOCTYPE html&gt, head&gt, htaccess, html5reset.css, html5up-twenty, if lt IE 9, iframe src, index.html, index.php, meta charset, RewriteCond, sample-x, sample-x&lt, script&gt, style&gt, title&gt, wawa.html, zip358.com, ,

び?え?てぃ?バッチ処理、えぇもう披露困憊です(´Д`)。

2015.01.21

Logging


 
バッチ処理ってモノは自分苦手です。生まれてこの方、バッチなんてものを触る機会がなかったのえぇもう披露困憊ですって言うのは嘘ですが、はっきり言って使い分けがイマイチなんですね。この頃、バッチ処理で出来ることはバッチで投げてあるべきだと言う事を認識しました。その方が処理が早いですからね。昨日、バッチ処理のボットさんと一悶着あったので綴ります。ボットと言っている割にはボットサービスを使ったボットかよ!とツッコミどころがありましたが、質問しているとそれなりにバッチ処理を理解しているかなと思ったので深く質問しているうちに自分の書いたバッチ処理が間違いに気づきました。
家に帰ってバッチ処理を見てみると案の定、javascriptの関数名をバッチ処理に書いていたというオチです。まさに何やっているだという感じです。
こういうのあまり参考にならないかもしれませんが掲載しておきます。あるホームページをIEブラウザを開いてある処理を実行したあとブラウザで閉じるというバッチです、今回はある処理に関してのコードは記載しません。尚、ブラウザを開いてから処理が終わるまでの感覚を5秒とします。
 

start "C:Program FilesInternet Exploreriexplore.exe" "https://google.co.jp"
timeout /t 5
taskkill /f /im iexplore.exe
exit

※デフォルトでIEが開く状態になっていないとブラウザは閉じません(´Д`)ので注意してください。
 

タグ

AM, exit, IEブラウザ, im iexplore.exe, javascript, Program FilesInternet Exploreriexplore.exe, t 5, taskkill, timeout, えぇもう披露, えぇもう披露困憊, ツッコミどころ, デフォルト, バッチ処理, ブラウザ, ホームページ, ボット, ボットサービス, 一悶着, , 使い分け, 関数名,