PHPのインターフェイスとやら簡単に言えば。

2019.02.16

Logging

インターフェイスとはなんぞや?
簡単に言えばこのメソッド名は必ず使えです。
無ければエラーになります。
大規模な開発から中規模な開発時には一応必要かな?
 

<?php
interface  test1{
    public function test_11(int $val=1);
    public function test_12(string $val="000");
}
class demo implements test1{
    public function demo1(int $val=0){
        return $this->test_11($val);
    }
    public function test_11(int $val=1){
        return $val;
    }
    public function test_12(string $val=""){
        return $val;
    }
}
$demo = new demo();
print $demo->demo1(111);

 

タグ

0, 000, , 11, class, demo, function, gt, implements, int, interface, lt, nbsp, php, public, return, string, test, this, val, インターフェイス, エラー, メソッド, 大規模, 必要, 簡単, 規模, 開発,

Gmail未読一括既読、最終形態みたいなものです。

2018.07.15

Logging


Gmail未読一括既読、最終形態みたいなものです。
どうぞ、お使いください。
前回のプログラムをトリガー呼び出すと下記のエラーが表示されますが
今回のコードを実行してもプログラムエラーは表示されません。
よって未読メールから既読メールになります。

[object Object] を (class) に変換できません。

前回のコードはこちらです。
見比べてみると違いがわかると思います、
ちなみにエラーで落ちていた所は、3行目になります。

function gmailbat () {
  gm = GmailApp.search("is:unread");
  if(gm.length){
    gm.forEach(function(m,i,a){
      if(m.isUnread()){
        m.markRead();
      }
    });
  }
  if(gm.length){
      return gmailbat();
  }
  return true;
}

タグ

class, function, function gmailbat, gm, gm.forEach, gm.length, GmailApp.search, Gmail未読一括既読, if, is, m.isUnread, m.markRead, object Object, quot, return gmailbat, return true, unread&quot, エラー, トリガー, 既読メール,

「jetpack」と「Japanese AutoTag」の相性が悪くて公開及び更新出来なくなる不具合について

2017.12.21

Logging


jetpack」と「Japanese AutoTag」の相性が悪くて公開及び更新出来なくなる
不具合について対応を行ったので対応を記載します。
このファイルの52行目、53行目あたりでエラー表示される、
wp-content\plugins\jetpack\sync\class.jetpack-sync-queue.php
エラー内容は下記の通りです。

Uncaught exception ‘Exception’ with message ‘Serialization of ‘SimpleXMLElement’ is not allowed’

このエラーが表示されて困ったので対応してみた。
対応したソースはこちら::エラーが出現している部分に型のキャストしてあげると
エラーが出なくなります、これが正しい対応かどうかは分かりませんが
エラーが出なくなったのでひとまずこれで自分は運用していきます。

	function add( $item ) {
		global $wpdb;
		$added = false;
		// this basically tries to add the option until enough time has elapsed that
		// it has a unique (microtime-based) option key
		while ( ! $added ) {
			$rows_added = $wpdb->query( $wpdb->prepare(
				"INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES (%s, %s,%s)",
				(string)$this->get_next_data_row_option_name(),
				serialize((string)$item),
				'no'
			) );
			$added      = ( 0 !== $rows_added );
		}
	}

 

タグ

'Serialization, 'SimpleXMLElement', $rows_added, $wpdb, autoload, exception, function add, INSERT INTO, is not allowed', it has a unique, Japanese AutoTag, microtime-based, option key, serialize, string, this basically tries to add the option, Uncaught exception, with message, wp-contentpluginsjetpacksync, エラー,

テンソルフロー的な画像解析。

2017.09.03

Logging


Tensorflow(テンソルフロー)的な画像解析をやってみました。
コードはオープンで公開する程のものではないので仕組みだけ説明します。

python classify_image.py --image_file test11.jpg

Pythonのモジュールの上記(classify_image.py)のファイルをパラメータ渡しでキックしているだけです。
モジュールはグーグルさんが書いているのを貰ってきただけです、何とも簡単に
画像を解析してくれます。ここまでたどり着くまでには長い道のりがありましたが
手順を教えます。
まず、Tensorflowをインストールして置きます。これはググれば見つかります。
TensorBoardで可視化とかしていませんので割愛します。インストールして
任意の場所に下記のモジュール(models repo)をダウンロードします。
https://www.tensorflow.org/versions/master/tutorials/image_recognition

ダウンロードしたファイルを配下に画像を置けばおわり、その名前と共にファイルをキックして
あげるだけでOKのはずが・・・・。OKじゃねぇ、そう何か動かない。
構文間違っているじゃねぇみたいなエラーを吐くのでファイルを修正します。

この配下に「classify_image.py」ファイルがありますのでこちらを修正します。
紫で囲っている部分を削除してしまいましょう。実際、自分は削除はしませんでした。
あまりPythonの構文を分かっていないので、コマンドラインからは不必要かもしれないけれど・・・。
WEB上で動かす(呼び出す)際は必要かもしれないのでコピってコメントアウトしてます。
コメントアウト後、PHPの関数、execを使い外部コマンドでPythonを実行してみると動きます。
動いた時は感動します。ひとりニヤニヤしてました。
返却されたものを表示しているだけ・・・なんですけどね。
https://www.youtube.com/watch?v=96-5oYVi4Pg
サンプルサイトはこちらです。
http://zip358.site/labo/

タグ

AM, exec, image_file test11.jpg, models repo, python classify_image.py, TensorBoard, tensorflow, エラー, グーグル, コマンドライン, サンプルサイト, テンソルフロー, テンソルフロー的, パラメータ渡し, ファイル, モジュール, 下記, 外部コマンド, 構文, 画像解析, 配下, 関数,

C#に限らずだけどいろいろ出来ることを知り楽しい。

2016.12.08

Logging


C#に限らずだけどいろいろ出来ることを知り楽しい。
VisualStudio2015の無料版でいろいろ作れることが楽しい。
そして販売可能だから尚更、楽しいですね。
https://www.visualstudio.com/ja/vs/ide/
無償版でパッケージとして提供できるので
はっきり言って、昔のVisual Studio使っている人は
乗り換えたほうが良いと思います。
ちなみに無償版をDLするときに全部DLしておいたほうが
後々、楽です。もし全ダウンロードしていない場合は
コンパネ、プログラムと機能からVisualStudioを選択して
右クリックをすると変更という項目が出てくるので
クリックして後からダウンロードすることも可能です。
尚、パッケージ化する場合に必要な拡張項目があるので
全部の項目を落とすとエラーなどは出なくなります。

タグ

autoplay, bandicam-2016-12-06-07-01-52-207.mp4, C#プログラミング, preload, true, uploads, video width, Visual Studio, VisualStudio2015, wp-content, zip358.com, エラー, コンパネ, パッケージ, プログラム, 拡張項目, 無償版, 無料版,

クローラーするサービスの基礎。

2016.11.19

Logging

クローラーするサービスの基礎のソースを載せときます。殆どサイボウズ・ラボの人が書いたコードです。
このサンプルソースをそのまま貼り付けても一階層のリンクしか取得できません。
再帰処理の部分をコメントアウトしているからです。ちなみにコメントアウトを外してもメモリオーバーでおそらく
大体のサーバでエラーが出力されます。どうしたら良いのかといえば、DBに1階層目のリンクデータ、2階層目のリンクデータという様に保存する機能を施す。次にajaxで階層を受け渡しながら、再帰処理を行う。
再帰処理が終わる要素はそれ以上、下階層がないことを判断する。そのためには保存したデータを検索することが重要になる。=(イコール)
新規にデータを登録しているうちは、再帰処理を終わらせないようにすることが大事になる。
これの機能を加えることで巡回する事が可能になる。ここで注意しないといけないのが、外部リンクを保存しないことです。外部リンクまで保存していると巡回は永遠に終わらないでしょう・・・。
トイウコトデ
ほぼ??コピペソースを貼っときます。

<?php
echo json_encode($obj);
exit;
function get_linkarray($link)
{
	$context = stream_context_create(array("http" => array("method" => "GET", "header" => "User-Agent: simplecrawler.library.php 0.0.1")));
	$resultR = array();
	$resultS = simplecrawler($context, $link, $link, parse_url($link));
	foreach ($resultS as $k => $v) {
		$resultR[] = $v;
	}
	return $resultR;
}
function simplecrawler($context, $link, $burl, $base, $linkArrayDat = array())
{
	$linkArrayPre = crawler_link(crawler_page($link, $burl, $base, $context), $link, parse_url($link));
	foreach ($linkArrayPre as $k => $v) {
		if (!isset($linkArrayDat[$v])) {
			$linkArrayDat[$v] = $v;
			//$linkArrayDat = array_merge($linkArrayDat, simplecrawler($context, $v, $burl, $base, $linkArrayDat));
		}
	}
	return $linkArrayDat;
}
function crawler_page($link, $burl, $base, $context)
{
	if (strpos($link, $burl) === 0) {
		$page = @file_get_contents($link, false, $context);
		return $page === FALSE ? null : $page;
	} else {
		return null;
	}
}
function crawler_link($page, $burl, $base)
{
	$linkArray = array();
	if ($page === null) {
		return $linkArray;
	}
	preg_match_all("/[\s\n\t]+href\s?=\s?”(.*?)”/i", $page, $href);
	for ($i = 0; $i < count($href[1]); $i++) {
		$link = $href[1][$i];
		if (preg_match("/^http(s)*\:\/\//", $link)) {
			$result = $link;
		} elseif (preg_match("/^\/.+$/", $link)) {
			$result = $base["scheme"] . "://" . $base["host"] . $link;
		} else {
			// echo $base["path"] . “\n”;
			$b = preg_split("/\//", dirname($base["path"]));
			$t = preg_split("/\//", $link);
			foreach ($t as $v) {
				$l = $v === "." ? true : ($v === ".." ? array_pop($b) : array_push($b, $v));
			}
			$result = $base["scheme"] . "://" . $base["host"] . join("/", $b);
		}
		$linkArray[$result] = $result;
	}
	return $linkArray;
}

タグ

, 2, ajax, db, アウト, イコール, うち, エラー, オーバー, クローラー, コード, ここ, こと, コメント, これ, サーバ, サービス, サイボウズ, サンプル, ソース, それ, ため, データ, トイウ, メモリ, ラボ, リンク, , , , , 保存, 再帰, 処理, 出力, 判断, 取得, 可能, 基礎, 外部, 大事, 大体, 巡回, 新規, 検索, 機能, 殆ど, 永遠, 注意, 登録, 要素, 部分, 重要, 階層,

コーディング:プログラムコードを書くこと。

2016.07.03

Logging


コーディング:プログラムコードを書くこと。
誰でもプログラムは書くことは出来るのだけど、出来の良いコードが書けるかどうかは、センスとかやる気にも値するし 経験もモノを言う。
例えば、文字を出力する場合、一括出力するのが 大体、シンプルだと言えるけど、前職で働いていた時見たコードの 中には、その時その時に出力する方法で書いた。
これが悪いかどうかと言えば悪くはない。
何故なら、別にエラーを吐き出しているわけでもないのだから悪いコードでもない。ただ、玄人から見れば素人よりな書き方だねと思われるだけ。
ただ、それだけの事だけど書いている本人に 基本的に指摘しないのだ。
その人がナンセンスとは思わない、むしろ、自分は指導しない上司はナンセンスだと思うわけです。
基本的に自分の部下だったら、技は基本的に惜しみなく教えてあげるタイプです。
ちなみにプログラムの勘所は、全体を処理を理解して処理を分割する考え方が必要になります。
それが出来るか出来ないかは、少しセンスが必要になったり、経験が必要になったりします。
[画像提供元]フリー写真素材ぱくたそ

タグ

エラー, コーディング, コード, センス, たそ, プログラム, プログラムコード, 一括出力, 上司, 全体, 処理, 前職, 勘所, 少しセンス, 悪いコード, , 本人, 玄人, 素人, 部下,

誰もSEOについて語らなくなってきている。

2016.06.12

Logging


誰もSEOについて語らなくなってきている。
SEOの攻略法って基本的にソーシャルメディア以外なし。
もうひとつ付け加えるとするならば、今までのアクセス数はそのサイトの信用となりうるという事です。
ドメインも買えないならば、日々、記事を書き続けることにしか、チャンスはないとも言える。
自分が出した、いまの結論です。
簡単にいえば、サイトの構造というのは意味をなさない。javascriptのエラーが吐かれていないかとかは、注意はした
方が良いですが・・・。
※昔からあるサイト構造をガラッと変えるのはリスクを伴います。
YOUTUBEなどを貼り付けてたら、JSエラーを吐き出したりしますが、さほど、影響はないに等しいです。
そんな事より、サイトの中身を充実させたほうが今は良いんですね。どこから訪問者が来たか、検索キーワードが
何なのか分からなくなってきている中で、どうすればアクセス数が増えるかなど分かりづらくなっています。
アクセス数は百の壁、千の壁、1万の壁という様に壁があります。凡人が超えれる壁は千の壁までだと自分は
思っています。日に1000人のアクセス数を出すことは不可能ではないです。ただ、1万の壁を超えるのは難しい。
その壁を超えるには広告やメディア戦略が必須となります。なのでお金もかけないでアクセス数をUPするには
ソーシャルメディアを活用することをオススメします。
[余談]
なぜ、昔からのサイト構造を一気に変更するのにはリスクを伴うのか?
答えは簡単で、クローラーが今まで見に行っていたURLが急に見えなくなると、このサイトは移転した可能性があるという判断をするため、急激に検索順位が下がっていく可能性あります。
検索アルゴリズムは移転という可能性を排除しないからです。
なので文言や旧ファイルは残しておく事が一般的です。
?

タグ

, javascript, JS, SEO, youtube, アクセス, いま, エラー, キーワード, こと, サイト, ソーシャル, チャンス, どこ, ドメイン, メディア, もうひとつ, リスク, , , 中身, , , , 信用, 充実, , , 影響, 意味, 攻略, , 日々, , 検索, 構造, 注意, , 簡単, 結論, 自分, 記事, 訪問者, ,

WEBセキュリティと人為的なバグ。

2015.12.06

Logging


先日、人為的なミス(コードミス)のため、何度かテスト用のファイルなどが
WEB上から吹っ飛んで消えちゃったっていう事象が発生した。
原因は自分のコードの書き方のミスだった・・・。
それに気付くまで謎の事象だった。
最初に自分がまず疑ったのがハッキングだったが
サーバ会社からの返答は侵入した痕跡がないとの事で
疑わしきは実行ファイルということだった。
結果、調べていくと実行ファイルのメソッドに
値が入っていなかったため一部のディレクトリを
消して良い所を全部ディレクトリが一括で消していた。
書いたのは自分です。
大体、バグっていうのは書いた本人は気づきにくいもの。
特にエラーがないバグはテストを行った時に出現したりして
そのバグ取りに大体、必死になることが多い。
結局、原因を見つけたのは社長だったという話ですが
今回のことで自社のサーバを持つことになったのが
何とも言えないのだ。
今回の原因は過信と浅いネットワーク知識やWEB知識が
問題になったんだろうと思う。そういう事もあって
WEBセキュリティ教室という本を購入したが・・・
これが今までのsqlインジェクションとかよりも深い内容の
攻撃手法が書かれていて正直、いまの自分には
半分程度の理解しか得れなかった。
 

タグ

sqlインジェクション, Webセキュリティ教室, エラー, サーバ, サーバ会社, バグ, バグ取り, メソッド, 事象, 何度かテスト用, 全部ディレクトリ, 原因, 実行ファイル, 徳丸浩, 書き方, 浅いネットワーク知識, 痕跡, 過信,

httpingのインストール方法。centOS7

2015.07.26

Logging

httpingのインストール方法ですけど。wgetを使用してダウンロードしインストールするだけでOKです。しかし、gccがインストールされていないとエラーが出てしまいますのでgccもインストールしないといけないです。まず、gccをインストールします。その後、httpingをインストールするとすんなりとインストール出来るはずです。

yum -y install gcc
wget http://www.vanheusden.com/httping/httping-2.3.4.tgz
tar xfz httping-2.3.4.tgz
cd httping-2.3.4
make install
httping https://www.google.co.jp

ちなみにwgetがインストールされていないとダウンロードすることが出来ませんのでこちらもインストールする事もお忘れなく。

yum -y install wget

タグ

-y, 2.3.4, 7, cd, centOS, com, gcc, http, httping, install, Make, OK, tar, tgz, vanheusden, wget, www, xfz, yum, インストール, エラー, こちら, こと, ダウンロード, パス, , 使用, , 方法,

WordPressを別のURLへ移行する方法。

2015.07.08

Logging


WordPressを別のURLへ移行する方法ですが、いろいろと巷では、WordPressのPHPを修正すれば良いよとか記載していますが、本当はこれだけで良いはずです。WordPressが保管されているデータベースのデータの任意のURLを全て置換するという方法です。そうすればエラーなどもなく移行することが可能ですが、ただ、データが多いと結構、大変な作業です。全てのURLを直さなくて良い場合などは・・・大変な作業になることは間違いないです。ほぼ、人力ですね。一括置換で良さそうな場合はすごく手間がかかりません。下記の方法がよく見かける方法ですが・・・おそらく上手くいきませんという場合が多いです。

WordPressのindex.phpの中の
require(‘./wp-blog-header.php’);

require(‘./wordpress/wp-blog-header.php’);に変更。

タグ

index.php, require, url, WordPress, wp-blog-header.php', エラー, これだけ, データベース, 一括置換, 下記, 人力, 作業, 全て, 変更, , 手間, 方法, 良いはず, 良い場合,