いま、思っていることはノートパソコンで良くね?

2020.10.10

記録

ノートパソコン買って、こんな感じに使うことができればそれで十分可能かと。この頃を思っています。基本的にパソコンって複数代、購入しても使用しているパソコンって一台か二台ぐらいではないですか?

自分の場合、旧のパソコンはサーバにしていて、使用するパソコンは一台だけですが、だったらノートパソコンで良くねという感じです。もう新しいパソコンを新調したので当分はこのデスクトップのパソコンを使用するつもりでいます。

これから、パソコンを購入しようと考えている人は、断然、ハイスペックのノートパソコンをひとつ購入して、サブ画面として液晶ディスプレイを購入。上記の動画のような使用方法すれば全然、ストレス無く使用することが出来、なおかつ外出先でもパソコンを持っていけるのは本当に便利かなと思っています。

この頃の後悔はそれですね・・・。

タグ

-YiRC-, 0, 3, 8, AM, com, https, watch, www, youtube, いま, こと, これ, サーバ, サブ, ストレス, それ, つもり, ディスプレイ, デスクトップ, ノートパソコン, ハイスペック, パソコン, ひとつ, 一, 上記, 二, 人, 使用, 便利, 動画, 可能, 場合, 外出, 当分, 後悔, 感じ, 新調, 方法, 旧, 本当, 液晶, 画面, 自分, 複数, 購入, 頃,

漁業系ユーチューバーさん、小豆島の漁師はまゆう

2020.01.20

記録

そりゃいるさー。本日(20/1/20)のAM11時頃、農業系ユーチューバーを紹介しました。農業系YOUTUBERがいるなら、漁業系ユーチューバーがいてもおかしくないじゃないと検索したところいましたよ!

小豆島の漁師はまゆうさんです。やっぱいるだなと思い何だか一人で納得してました。自分がやっていることを皆に伝えたい発信したいと考えているYOUTUBERさんはいっぱいいるという事を改めて認識したのですが、そういう人が増えていくとユーチューバーを本業としているひとは中々、大変な職業になっていくなと思います。

YOUTUBEというサービスが始まったときは、まさにブルーオーシャンだっただろうけど、いまはレッドオーシャンになりつつあるなと感じます。でもまだニッチな部分は残っていると思うので始めるなら早いもの勝ちな感じがします。

ちなみに小豆島の漁師はまゆうさん、ちょっとイケメンです。

小豆島の漁師はまゆうさんのチャンネル登録はこちらになります。
https://www.youtube.com/channel/UCIhqq_TjKA6IyCzgHTTxsAw

タグ

1, 11, 20, AM, youtube, YOUTUBER, イケメン, いま, オーシャン, こと, サービス, とき, ところ, ニッチ, はまゆう, ひと, ブルー, まゆう, もの, ユーチューバー, レッド, 一人, 中々, 事, 人, 大変, 小豆島, 本日, 本業, 検索, 漁師, 漁業, 発信, 皆, 納得, 紹介, 職業, 自分, 認識, 農業, 部分,

昨日は仕事初めでした。

2019.01.08

記録


昨日は仕事初めでした。
帰ってきてからAM1:00に寝たんだけどAM4:00に起きて
しまう始末…いまいち、体の体調が良くないです。
寝ないといけないけど、帰ってきてからサーバとかゴニョゴニョしてました。
 

タグ

1, 4, AM, nbsp, いまいち, ゴニョゴニョ, サーバ, 仕事初め, 体, 体調, 始末, 昨日,

可変長引数リストって忘れがちやな。

2018.08.08

記録


 

<?php
function hoge(...$hoge) {
     foreach($hoge as $key=>$val){
        sprintf("key = %02d val = %02d",$key,$val);
     }
}
hoge(1);
hoge(1,3,2);
//アンパック
function hoge2($i, $ii) {
    return $i + $ii;
}
$hoge3 = [3, 3];
echo hoge2(...$hoge3);

 
残業したくない自分ですが、仕事に追われています・・・。
なぜに8月に仕事がこんなに山積みなんだと・・・凹んでいます。
今日は可変長引数リストのことについて。
可変長引数リストって使わなかったら忘れがちやな事ですよね?
引数の変数が可変する、ですから可変長引数リスト!?
簡単ですね・・・。
javascriptにもあります。
ES6からPHPと同じ様になっているそうです。
ES6ってChrome42ぐらいからかな。たぶんIEとかでは使用できないのかも。
クックパッドの開発者ブログにやり方書いてます。
https://techlife.cookpad.com/entry/2015/02/02/094607
余談:
PHP5.6からPHP7へ移行している時代かもしれないですが
まだまだレガシーコードで動いているサイトもあると思います。
いや結構あると思います、改修したくても出来ない・・・。
そして新たなレガシーコードみたいなのを生んでいる自分もいます。
なぜ、レガシーコードみたいなのでコード書くのかという理由は
「平均的なコードだから」です。
高知県は特にレガシーコードみたいなのが多い気がします。
言語ってバージョンが上がれば
使われない関数とかセキュリティが甘い関数などは
推奨から非推奨移行して最後は使用不可に
なりますよね・・・あれってどうにかならないものなのか。
そしてライブラリ使っていたりすると破滅的なダメージになります。
そういう面ではJSのライブラリは持ちが良い気がします。
改修したくても・・・時間がない。
 

タグ

$hoge as, $hoge3, AM, Chrome42, echo hoge2, ES6, function hoge2, PHP5.6, PHP7, sprintf, アジャイルサムライ−達人開発者, アンパック, ライブラリ, レガシーコード, 可変長引数リスト,

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

2018.07.15

記録


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==500){
      return gmailbat();
  }
  return true;
}

 

タグ

AM, class, function gmailbat, gm.forEach, gm.length, GmailApp.search, Gmail未読一括既読, if, m.isUnread, m.markRead, object Object, return gmailbat, return true, お使い, コード, トリガー, プログラムエラー, 前回, 既読メール, 最終形態, 未読メール,

逃げるは恥だが役に立つグーグル画像検索ダウンロードコンソールアプリ

2018.07.03

記録


グーグル画像検索ダウンロードコンソールアプリを作ってみました。
へっぽこソースはこちら

using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
namespace google_img_get
{
    class Program
    {
        static void Main(string[] args)
        {
            gurl();
        }
        static void gurl() {
            string url = "https://www.google.co.jp/search?tbm=isch&biw=1920&bih=957";
            string htmlSource = "";
            Boolean flg = true;
            try
            {
                //コマンドライン引数を配列で取得する
                string[] cmds = System.Environment.GetCommandLineArgs();
                if (cmds.Length == 2)
                {
                    url = url + "&q=" + cmds[1] + "&oq=" + cmds[1];
                    flg = false;
                }
                if (flg)
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("***** google画像検索&ダウンロード少しw キーワードを入力してください *****");
                    Console.ForegroundColor = ConsoleColor.White;
                    string hoge= Console.ReadLine();
                    url = url + "&q=" + hoge + "&oq=" + hoge;
                 }
                if (url != "")
                {
                    Console.WriteLine("***** google check *****");
                    htmlSource = gsource(url);
                    Console.WriteLine(htmlSource);
                    string img = "\"ou\":\"(?<text>https?.*?)\"";
                    Regex reimg = new Regex(img, RegexOptions.IgnoreCase | RegexOptions.Singleline);
                    for (Match m = reimg.Match(htmlSource); m.Success; m = m.NextMatch())
                    {
                        char[] cc = { '"', '\'' };
                        string u = m.Groups["text"].Value;
                        u = u.Trim(cc);
                        string[] exte = u.Split('.');
                        string gexte = "";
                        if (Regex.IsMatch(exte[exte.Length - 1].ToLowerInvariant(),"jpge")) {
                            gexte = "jpg";
                        }
                        if (Regex.IsMatch(exte[exte.Length - 1].ToLowerInvariant(), "jpg"))
                        {
                            gexte = "jpg";
                        }
                        if (Regex.IsMatch(exte[exte.Length - 1].ToLowerInvariant(), "gif"))
                        {
                            gexte = "gif";
                        }
                        if (Regex.IsMatch(exte[exte.Length - 1].ToLowerInvariant(), "png"))
                        {
                            gexte = "png";
                        }
                        Console.ForegroundColor = ConsoleColor.DarkGreen;
                        Console.WriteLine("***** " + u + " *****");
                        if (gexte != "")
                        {
                            int ihoge = new Random(100).Next(100) * 100;
                            Console.WriteLine(media(u, gexte));
                            System.Threading.Thread.Sleep(ihoge);
                        }
                    }
                }
                gurl();
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("***** " + e.Message + " *****");
                gurl();
            }
        }
        static string gsource(string url) {
            string htmlSource = "";
            WebClient client = new WebClient();
            client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
            Stream st = client.OpenRead(url);
            Encoding enc = Encoding.GetEncoding("UTF-8");
            StreamReader sr = new StreamReader(st, enc);
            htmlSource = sr.ReadToEnd();
            sr.Close();
            st.Close();
            client.Dispose();
            return htmlSource;
        }
        static string media(string url, string exte)
        {
            // カレントディレクトリを取得する
            string nowstr = DateTime.Now.ToString("yyyyMMddHHmmss");
            string stCurrentDir = Directory.GetCurrentDirectory();
            WebClient wc = new WebClient();
            wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
            @wc.DownloadFile(url, @stCurrentDir + "\\webcmd" + nowstr + "." + exte);
            wc.Dispose();
            return "***** " + "Success!! [webcmd" + nowstr + "." + exte + "] *****";
        }
    }
}

 
コンソールアプリ軽量で動作が機敏なので良いかなと
これを使用していているとリモートサーバーから怒られることが
あるのでお気をつけください。リモートサーバー=プロバイダと認識しています。
あまりにも立て続けにダウンロードしていると400エラーになり
処理が途中で中断してしまいます。
何故、そうなるのかはお察しください。
https://www.youtube.com/watch?v=_CuVYooExZ4
回避策のため、ランダムタイマーで一旦処理を停止しながら
ダウンロードを行っているので微妙に遅い。
これを改良してもっとより良いものを
作ってくれる有志が入れば有り難いです、GitHubにも
公開していますので改良してもらうと有り難いです。
その他、コンソールアプリの詰め合わせzipを置いときますので
ご自由にご使用いただければと思っています。
法的にまずい使い方は行わないでください。
https://zip358.com/tool/web.zip
 

タグ

AM, array,

googleメールを指定時間に既読にするには

2018.06.23

記録


https://script.google.com/home
まず、上記でスプリントを作り、gmailと連携した後。
矢印の時計マークをクリックします。
そうするとトリガー作成しますかみたいな文言が表示されるので
クリックし指定の時間を設定します。
そうすることで、指定の時間になれば毎日メールは
既読になります。
(※ならないです・・・という方は見直しが必要です、
下記はあくまでもヒントです。
余談:
自分の場合、殆ど読まないメールが大半なので
重要なメールに目を通して、後は指定の時間にグーグルスプリクトで
既読する方法を選びました。

function gmailbat(q) {
  q = !q?0:q;
  var gm = GmailApp.search("is:unread",q,500);
  var flg = false;
  gm.forEach(function(m,i,a){
    if(m.isUnread()){
        m.markRead();
        flg = true;
    }
  });
  if(flg){
      q = q+500;
      return gmailbat(q);
  }
  return true;
}

 

タグ

AM, false, function gmailbat, gm.forEach, GmailApp.search, googleメール, m.isUnread, m.markRead, return gmailbat, return true, var flg, var gm, グーグルスプリクト, スプリント, トリガー, 指定, 文言, 既読, 既読する方法, 時計マーク, 矢印,

たった数行のプログラムでドツボにはまる。

2018.04.14

記録

<?php
$command = "ls -m img";
exec($command,$val,$chk);
//imglist
$imglist = explode(",",implode("",$val));
if(is_array($imglist)){
    foreach ($imglist as $key => $value) {
//        $ch = curl_init(); // 初期化
//        curl_setopt( $ch, CURLOPT_URL, "https://zip358.com/tool/imglist/img/".$value );//URLの設定
//        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // 出力内容を受け取る設定
//        $result = curl_exec( $ch ); // データの取得
//        curl_close($ch); // cURLのクローズ
//        $img64[$key] = base64_encode($result);
        $img64[$key] = base64_encode(file_get_contents("img/".trim($value)));
        $path_parts = pathinfo($value);
        $path_parts['extension']=="jpeg"?"jpg":$path_parts['extension'];
?>
<div><a href="./img/<?=trim($value)?>"><?=$value?></a><br><img src="data:image/<?=$path_parts['extension']?>;base64,<?=$img64[$key]?>"></div>
<?php
    }
}
$obj["imglist"] = implode("\n\n",$img64);
//print json_encode($obj);

 
ls -m というコマンドをPHPのexecという関数を使用して
画像リストを取得しようとしてハマった・・・。
この関数、exec(“ls -m”)と書くと全部返却値が返ってくる前に
変数に値を代入してくれるという何とも厄介な代物です。
処理するコマンドによるのですが・・そうなる場合があります。
なので第三引数まで書いて処理することが望ましいです。
また返却値は配列で返ってくるのでそれを一度、文字列化を行い
自分が取得したい値を再度処理を加えることが望ましいです。
今回、ディレクトリの画像ファイル参照し
画像読み込みをbass64のエンコードを行って
画像をIMGタグに入れ込むといった一連の流れを上記では
記述しています。
ちなみにTrimも行っています、
ls -m の場合、文字の前後に・・・空白部分があるので、
get_file_contentsを行う前にその処理を行う必要がありますが
画像名に先頭や後方に空白文字がある場合は一工夫行う必要がありますが。
今回は簡易的な処理のため、このよう感じで
大丈夫だと思います。
 
 

タグ

$img64, $imglist as, $path_parts, AM, base64, base64_encode, bass64, br&gt, curl_setopt, CURLOPT, CURLOPT_RETURNTRANSFER, div&gt, exec, extension, img src, implode, pathinfo, print json_encode, trim, value, コマンド,

laravel5の古いバージョンをインストールする。{laravel5.2}

2018.03.24

記録


laravel5の古いバージョンをインストールする。{laravel5.2}
Composerが入っていることを前提に記事を書いていきます。
まず、インストールしたい環境を指定(プロジェクト名=ディレクトリが作成されます)します。
コマンドラインからこんなコマンドを打ちます。

composer create-project laravel/laravel laravel-test 5.2.* --prefer-dist

そうするとlaravel-testというフォルダが作成されます。
そしてその中にある、/config/app.phpの42行目を任意のURL変更します。
その後、下記のフォルダのパーミッションを777に変更して下さい。
storageのフォルダの配下
bootstrap/cacheフォルダ
こちらを変更することにより
任意のURL/public/というアドレスを入力することにより
デモページが表示されます。
フォルダとか言っていますけど、ディレクトリとか言うのが
普通みたいです(。-ω-)zzz. . . (。゚ω゚) ハッ!そうだった。
こんな感じでララベルの5.2をインストールすることが出来ました。
ちなみに5.2にするとPHP5.6ぐらいからPHP7.1ぐらいまで動作するという
事なので便利かなと思います。トイウカ、laravel、最先端を走りすぎているのか
日本のサーバ環境が古いのか分からないですが・・・
日本ではPHP5.6環境でざらで動いているのが結構あります。
なので5.2のバージョンで開発するのがベストかなと思います。
ちなみに自分の勤めている会社でもそろそろ導入するのかなと思っています。
そろそろと去年あたりから言ってますけど、、、、
仕事が立て込んでいて中々、移行するのが難しいですね、、、、。
一段落したかと思うと別の案件が・・・悩ましい。
合間合間で作るのは何だか気が引けるので未だに未着手なんです。
自分が担当している部分を変更するのはそれ程、時間はかからないとは思います。
ただ、未だにチーム開発ではないのが・・・難儀。
 

タグ

--prefer-dist, AM, app.php, Bootstrap, cacheフォルダ, composer create-project laravel, laravel laravel-test 5.2, laravel5.2, Laravel入門, PHP5.6, PHP5.6環境, PHP7.1, コマンド, ディレクトリ, トイウカ, パーミッション, フォルダ, ララベル, 古いバージョン, 未着手,

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

2018.03.10

記録


jetpackのプラグインが度々更新されその都度、過去記事の対応するのは面倒くさいので
根本的なJapanese AutoTagのプラグインを修正すればよいのではないかと思い
インフルエンザB型療養中にプログラムの修正を行いました。
ファイル名:japanese-autotag.phpの267行目~400行目ぐらいのアレやコレをキャスト(string)するように追加を行いました。
この事によってエラー500を出力されることもなくなりました。

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

	function get_word_array( $appkey, $sentence, $filter = '9', $exwords = array(), $expattern = '' ) {
		$expattern = trim( $expattern );
		$result = array();
		$url = 'http://jlp.yahooapis.jp/MAService/V1/parse?filter='
			. $filter . '&appid='
			. $appkey . '&results=ma&sentence='
			. urlencode($sentence);
		$c = @file_get_contents( $url );
		if( function_exists('simplexml_load_string') ) { // PHP5 or later
			$xml = simplexml_load_string ( $c );
			if($xml === false) {
				return (string)$result;
			}
			foreach($xml->ma_result->word_list->word as $w) {
				if( in_array($w->surface, $exwords) ) {
					continue;
				}
				if( $expattern != '' && @preg_match( $expattern, $w->surface) ) {
					continue;
				}
				$result[] = (string)$w->surface;
			}
		}
		else { // PHP4
			$dom = domxml_open_mem ( $c );
			if(!$dom) {
				return (string)$result;
			}
			$wa = $dom->get_elements_by_tagname('surface');
			for($i=0; $i<count($wa); $i++) {
				$t = $wa[$i]->get_content();
				if( in_array($t, $exwords) ) {
					continue;
				}
				if( $expattern != '' && @preg_match( $expattern, $t ) ) {
					continue;
				}
				$result[] = (string)$t;
			}
		}
		return array_values(array_unique($result));
	}
	function get_keyphrase_array( $appkey, $sentence, $exwords = array(), $expattern = '' ) {
		$expattern = trim( $expattern );
		$result = array();
		$url = 'http://jlp.yahooapis.jp/KeyphraseService/V1/extract?'
			. 'appid=' . $appkey
			. '&results=xml&sentence='
			. urlencode($sentence);
		$c = @file_get_contents( $url );
		if( function_exists('simplexml_load_string') ) { // PHP5 or later
			$xml = simplexml_load_string ( $c );
			if($xml === false) {
				return (string)$result;
			}
			foreach($xml->Result as $w) {
				if( in_array($w->Keyphrase, $exwords) ) {
					continue;
				}
				if( $expattern != '' && @preg_match( $expattern, $w->Keyphrase) ) {
					continue;
				}
				$result[] = (string)$w->Keyphrase;
			}
		}
		else { // PHP4
			$dom = domxml_open_mem ( $c );
			if(!$dom) {
				return (string)$result;
			}
			$wa = $dom->get_elements_by_tagname('Keyphrase');
			for($i=0; $i<count($wa); $i++) {
				$t = $wa[$i]->get_content();
				if( in_array($t, $exwords) ) {
					continue;
				}
				if( $expattern != '' && @preg_match( $expattern, $t ) ) {
					continue;
				}
				$result[] = (string)$t;
			}
		}
		return array_values(array_unique($result));
	}

 
https://zip358.com/%E3%80%8Cjetpack%E3%80%8D%E3%81%A8%E3%80%8Cjapanese-autotag%E3%80%8D%E3%81%AE%E7%9B%B8%E6%80%A7%E3%81%8C%E6%82%AA%E3%81%8F%E3%81%A6%E5%85%AC%E9%96%8B%E5%8F%8A%E3%81%B3%E6%9B%B4%E6%96%B0%E5%87%BA.html

タグ

'expattern', 'Serialization, 'simplexml_load_string', 'SimpleXMLElement', $noise, $wordclasses, AM, appkey, continue, domxml, exception, exwords, function get, is not allowed', Japanese AutoTag, japanese-autotag.php, jetpack, Keyphrase, keyphrase_enabled, options, PHP4, PHP5 or later, result, return array_values, simplexml, str_replace, string, Tokenize, Uncaught exception, urlencode, with message, インフルエンザB型療養中, プラグイン,