今年最後のブログ…

2019.12.31

Logging

今年もユーザーさんに支えられブログを続けることが出来ました。

過去のブログを他のブログに移行していたのですが、
12月にそのブログももとに戻し、更新頻度も前と同じに変更しました。
(※そのブログも来年から不定期で更新していきます)

毎年の恒例の未来予想の話を記載します、
来年(2020年)、何が起こるかといえば自分は
人工知能のサービスが日本でも大々的に
各企業(中小企業含む)が使用されるようになると思います。

また、スマートグラスというものがもしかしたら
来年浸透するかもしれないなと思っています。

これはスマホに続く便利ツールになると感じています。

Amazon-Backed Smart Glasses For $1,000: First Look

あと日本でも5G(ファイブジー)のサービスが開始されますよね。
これは新しい風になると思います、通信費がいまの4G程だと
浸透するのはかなり早いと思います、また来年から
ギガ通信の制限がなくなるそうなので、
いろいろな事が変わり始める年になると思います。

※今年最後のブログ記事を見て頂きありがとうございます。
良いお年を!!

タグ

2020, 4, 5, いま, いろいろ, かなり, ギガ, クラス, こと, これ, サービス, シー, スマート, スマホ, ツール, ファイブ, ブログ, もと, もの, ユーザー, 不定期, 中小企業, 予想, , 人工, 今年, , 企業, , 使用, 便利, 制限, , 変更, , 恒例, 日本, 更新, 最後, 未来, 来年, 毎年, 浸透, 知能, 移行, , 自分, 記事, 記載, , 通信, 過去, 開始, 頻度, ,

日本語で機械学習のことを解説しているチャネル。

2019.12.14

Logging

探していたらあったよSONY!!。
昨日、「YOUTUBEで日本語で人工知能の解説している動画あまりないよね。」
と記載していたのだけど・・・。

解説している動画がありました。
SONYがオープンで解説している、、やっぱりこういう事を
公開しているということは人手が足りないですね。

人工知能(機械学習)を理解してゴニョゴニョして
遊びができないひとが結構多いだなとちなみに品質の良いモデル作りが
機械学習では要になるそうです。

Deep Learning入門:ニューラルネットワーク学習の仕組み

勉強したい方は下記のリンクからどうぞ
https://www.youtube.com/channel/UCRTV5p4JsXV3YTdYpTJECRA

タグ

, 4, 5, channel-, com, JsXV, SONY, UCRTV, youtube, YTdYpTJECRA, こと, ゴニョゴニョ, チャネル, ひと, モデル, リンク, 下記, , 人工, 人手, 公開, 勉強, 動画, 品質, 学習, , 日本語, 昨日, 機械, 理解, 知能, , 解説, 記載,

グーグルブレインって何?

2019.12.08

Logging

ニュースピックスのNEXTという番組でグーグルのことを解説していたのだけど、とても面白い内容だった。

また他にも5G(ファイブジー)になるとどうなっていくのかなどの内容も興味深い話だった。

グーグルブレインって何?の答えは下記の動画を参照すると分かりやすく解説しています。
ぐぐると答えは出ているのだけど・・・。

Meet our machine learning makers

※動画、NewsPicksから差し替えました。

ニュースピックスの動画が見えない人のために少し解説します。グーグルブレインとはグーグルの人工知能研究機関のことを指します、その中では自由な人工知能の研究を行ってよいとのことです、そして特に利益が出なくても良いとのこと。ニュースピックスのNEXTではいろいろな企業の解説していて毎回面白い内容になっていて自分は好きです、ただざっくり感があります、もっと深い話を聞きたい人にはもう少し長めでもよいじゃないかなと思うときもありますが、ニュースピックス動画の中でも今の所NEXTシリーズが面白いかなと思います。

タグ

5, newspicks, NEXT, いろいろ, グーグル, こと, シー, シリーズ, ため, とき, ニュース, ピックス, ファイブ, ブレイン, 下記, , , 人工, , , 企業, , 内容, 利益, 動画, 参照, 少し, , , 機関, 毎回, 番組, 知能, 研究, 答え, 自分, 自由, 解説, , 長め,

googleスプレッドシートの値を取得することは可能ですが!

2019.11.24

Logging

googleスプレッドシートの値を取得することは可能ですが動的な値を取得することは不可能です。
動的処理というのはスプレッドシートの関数などで値を表示している情報をPHPなどで外部取得することは不可能です。

【Google神関数】生産性が100倍上がる!スプレッドシート4つの便利関数はこれ!

※方法があるようでしたら、教えて頂ければありがたいです。

なお、PHPからスプレッドシートの値などは変更可能です。
今回は値の取得に関しての方法を記載しております。

手順
1.グーグルさんからグーグルスプレッドシートのAPIKEYを取得する。
2. グーグルスプレッドシートを作成しスプレッドシートのID部分を取得する。
3.サーバ上にComposerをインストールし、下記のコマンドを実行する。

composer require google/apiclient:"^2.0"

下記のソースのAPIキー、スプレッドシートIDの部分を取得した値に置き換える。

<?php
require_once __DIR__ . '/vendor/autoload.php';
//$keyFile = __DIR__. "/credentials.json";
define("APIKEY","APIキー");
define("SPID","スプレッドシートID");
$spreadsheetId = SPID;
$range ="Sheet1!A1:B123";
$client = new Google_Client();
$client->setApplicationName("Spreadsheet");
$client->setDeveloperKey(APIKEY);
$scopes = [Google_Service_Sheets::SPREADSHEETS];
$client->setScopes($scopes);
$service = new Google_Service_Sheets($client);
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
// TODO: Change code below to process the `response` object:
echo '<pre>', var_export($response->getValues()), '</pre>', "n";

結構ハシオッタ説明になりますが、こちらでGoogleスプレッドシートの値を取得または操作が可能となります。

タグ

, 2, 2.0, , 4, 5, A`, apiclient, APIKEY, com, Composer, et, fCs, Google, https, ID, php, quot, require, watch, www, youtube, インストール, グーグル, こと, コマンド, サーバ, シート, スプレッド, ソース, 下記, 不可能, 今回, 作成, , 処理, 取得, 可能, 変更, 外部, 実行, 情報, 手順, 方法, 表示, 記載, 部分, 関数,

オレオレ無名関数の再帰処理。

2019.10.26

Logging

無名関数はよく使います。ちょっとしたモノを書きたい時、
オレオレ無名関数を書いて済ますことが多くなりました。
無名関数の良いところは無名関数を使用する手間にメソッドがあるので
確認しやすいというところですね。
 

<?php
$mumei = function ($tasu=0) use(&$mumei){
    if($tasu<=150){
        $tasu = $tasu + 5;
        print $tasu."n";
        return $mumei($tasu);
    }
    return $tasu;
};
//オレオレ無名関数の使い方は…小道具ぐらい程度のもの。
print $mumei();
// 5
// 10
// 15
// 20
// 25
// 30
// 35
// 40
// 45
// 50
// 55

タグ

0, 10, 15, 150, 20, 25, 30, 35, 40, 45, 5, amp, function, if, lt, mumei, nbsp, php, print, return, tasu, use, オレオレ, こと, ところ, メソッド, もの, 使い方, 使用, 再帰, 処理, 小道具, 手間, , , 無名, 確認, 程度, 関数,

画像をタイル状に分離して一括ダウンロードさせるジェネレーター

2019.09.07

Logging

画像をタイル状に分離して一括ダウンロードさせるジェネレーターを
作ってみました。画像は自動的に削除されます?
あることをすれば他人の画像がアップした画像も削除されます。
ちなみに一括ダウンロードbuttonを押すと画像がサーバー上に保存され
強制ダウンロードが始まります。
動作はブラウザChromeオンリーです。
また一括ダウンロードを押すと複数のファイルを一括ダウンロードするか
どうかの問い合わせが表示されますので「はい」を
選択してください。尚、30秒以内に保存されていないファイルは
次々と削除されます。
サイトはこちらから
https://zip358.com/tool/demo5/index-14.html
ソースコードは下記になります。
ページ(base64生成+画像ダウンロード処理)

追記:zipファイルにより格納するように処理を変更しました。
参考にしたサイト:https://ex1.m-yabe.com/archives/4215

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>画像分離してダウンロード:画像分離ジェネレーター</title>
        <meta name="description" content="画像分離してダウンロード:画像分離ジェネレーター">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="../jquery/jquery-3.4.1.js"></script>
        <link rel="stylesheet" href="../bootstrap/css/bootstrap.css">
        <!-- Global site tag (gtag.js) - Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-71682075-1"></script>
        <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());

        gtag('config', 'UA-71682075-1');
        </script>        
        <style>
            body{
                background-color: black;
                color: antiquewhite;
            }
            img{
                margin:10!important;
                padding:10!important;
            }       
            #container{
                width: 100%;
            }
            #container img{
                margin:10px;   
            }       
        </style>    
    </head>
    <body>
        <span id="bat"></span><a id="dl"></a>
        <input class="form-control" type="file"></input>
        <div id="container"></div>
        <script>
            $(function(){
                $("[type=file]").on("change",function(){
                    $('#container').html("");
                    $("#bat").html("");
                    console.log($(this));
                    if(!$(this).prop('files')[0].type.match(/[png|jpg|jpge|gif]/)){
                        alert("ファイル形式エラー");
                        return false;
                    }                        
                    var canvas = document.createElement('canvas');
                    var reader = new FileReader();
                    reader.onload = function(event) {
                        var image = new Image();
                        image.onload = function() {
                            sprite = {width:50,height:50};
                            canvas.width = sprite.width;
                            canvas.height = sprite.height;
                            var ctx = canvas.getContext("2d");                            
                            var x = 0;
                            for(var i=0; i*sprite.height<image.height; i++){
                                for(var j=0; j*sprite.width<image.width; j++){
                                    ctx.drawImage(
                                    image,j*sprite.width,i*sprite.height,
                                    sprite.width,sprite.height,
                                    0,0,
                                    sprite.width,sprite.height
                                    );

                                    var spriteElement = new Image;
                                    spriteElement.src= canvas.toDataURL();
                                    $('#container').append(spriteElement);
                                }
                            }
                            $("#bat").html("<input type='button' value='一括ダウンロード' onclick='bat_img()'>");
                        }
                        image.src = event.target.result;                       
                    }
                    reader.readAsDataURL($(this).prop('files')[0]);
                    
                });
            });

            function bat_img(){
                var data = [];
                for(var i=0; i< $("img").length;i++){
                    data.push({"base64":$("img").eq(i).attr("src"),"no":i});
                }
                $.ajax({
                    type: 'POST',
                    url: 'bat_img.php',
                    data:{"obj":data},
                    dataType: 'json'
                }).done(function(obj){

                    if(obj[obj.length - 1 ].chk=="ok"){

                        var link = document.getElementById("dl");
                        link.href = obj[obj.length - 1].zippath;
                        link.download = "zipimg.zip";
                        link.click();

                        var data2 = [];
                        for(var i = 0 ; i < obj.length ; i++){
                            if(i==0){
                                data2.push({Path:obj.path,no:obj.no,t:obj.t,"zipimgpath":obj[obj.length - 1].zippath});
                            }else{
                                data2.push({Path:obj.path,no:obj.no,t:obj.t});
                            }
                            
                        }

                       var del = function(){
                            $.ajax({
                                type: 'POST',
                                url: './bat_del.php',
                                data:{"obj":data2},
                                dataType: 'json'
                            });
                        };
                        del();
                    }
                    });
                }
        </script>
    </body>
</html>
<?php
$i=0;
foreach($_POST["obj"] as $key=>$val){
    $b64 = base64_decode(str_replace("data:image/png;base64,","",$val["base64"]));
    $no = (int)$val["no"];
    $t = time();
    $Path = "./bat_img/tmp/$t-$no.png";
    $re = @file_put_contents($Path,$b64);
    if($re){
        $obj[$i]["chk"] = $re?"ok":"ng";
        $obj[$i]["name"] = "$t-$no.png";
        $obj[$i]["path"] = $Path;
        $obj[$i]["no"] = $no;
        $obj[$i]["t"] = $t;
        $i++;
    }
}
$obj[--$i]["zippath"] = zipfile($obj);

print json_encode($obj);


function zipfile($obj){
    $ZipFiles = function($obj){
        foreach($obj as $key=>$val){
           $path[] = $val["path"];
        }
        return $path;
    };
    $Zip_Files = $ZipFiles($obj);
    $zipFileName = time().'_zipimg.zip';

    set_time_limit(0);
    $zip = new ZipArchive();
    $zipTmpDir = './tmp/zip/';
    $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
    if( $result !== true ){ //エラー処理
      echo 'error!';
      exit();
    }
    foreach ($Zip_Files as $key=>$filepath) {
      $filename=basename($filepath);
    // ZIP圧縮するファイルを追加
    // ファイルパス・ファイル名としないと圧縮ファイルを解凍するとフルパスになる
      $zip->addFile($filepath,$filename); 
    }
    //ZIP 出力
    $zip->close();

    return $zipTmpDir.$zipFileName;
}
<?php

unlink($_POST["obj"][0]["zipimgpath"]);
foreach($_POST["obj"] as $key=>$val){
    $Path = $val["Path"];
    $no = (int)$val["no"];
    $t = (int)$val["t"];
    
    $cmd = function(){
        foreach(glob("./bat_img/tmp/*") as $file_name){
            $command = "rm -rf " . realpath($file_name);
            exec($command);
        }    
    };
    
    if(pathinfo($Path)["extension"]=="png" and preg_match("/bat_img\/tmp/",$Path)){
        if(is_file($Path)){
            sleep(30);
            unlink($Path);
        }else{
            $cmd();
        }
    }else{
        $cmd();
    }

}

タグ

, 14, 30, 358, 4, 5, 64, archives, base, button, Chrome, com, demo, ex, html, https, index, m-yabe, tool, www, zip, アップ, オンリー, コード, こちら, こと, サーバー, サイト, ジェネレーター, ソース, タイル, ダウンロード, はい, ファイル, ブラウザ, ページ, 一括, 下記, 他人, 保存, 処理, 分離, 削除, 動作, 参考, 問い合わせ, 変更, 強制, 格納, 生成, 画像, 表示, 複数, 追記, 選択,

変なコードを書いてしまった。それはいつものこと(笑)

2019.08.10

Logging

変なコードを書いてしまった。
PHPにstr_repeatという関数が存在しているのだけど
何のために使用するのか全然わからない。関数の内容は任意の文字を
指定回数、繰り返した文字列として返してくれるというものです。
試しにその関数を使用し変なコードを書きました。
茶目っ気ですので…。これがPCに負担がかかるとか
無限ループとかの処理にすると御縄なんでしょうけど・・・。
サンプルコードはこちらから
https://zip358.com/tool/demo5/index-11.php

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <script src="../jquery.tubular.1.0.1/js/jquery.tubular.1.0.js"></script>
        <link rel="stylesheet" type="text/css" href="../jquery.tubular.1.0.1/css/screen.css">
        <script>
            $('document').ready(function() {
            var options = {
                videoId: '760lRwLKFF0',
                mute: true,
            };
            $('#bgmovie').tubular(options);
            });
        </script>
        <style>
            body{
                background-color: #000;
                color: #fff;
                font-size: 80px;
                line-height: 80px;
            }
            p{
                color: #38a9c5;
            }
        </style>
    </head>
    <body>
    <div id="bgmovie">
        <!--[if lt IE 7]>
            <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="#">upgrade your browser</a> to improve your experience.</p>
        <![endif]-->
<?php
$str = str_repeat("高知 よさこい 踊る,",7);
var_dump(str_getcsv($str));
?>
<p class="oshite" data-oshite="<?=$str?>"style="text-decoration: underline">▼おして知るべし</p>
※おして知るべしをクリックすると7ウィンドウ開きますよ!!
<?php
    foreach(str_getcsv($str) as $val){
?>
<?php
    }
?>
</div>
        <script>
            $(function(){
                $(".oshite").on("click",function(){
                    let oshite = $(this).attr("data-oshite").split(",");
                    for(var i = 0 ; i < oshite.length ; i++){
                        if(oshite[i]!==""){
                            window.open("https://twitter.com/search?src=typed_query&q=" + encodeURIComponent(oshite[i]));
                        }
                    }
                });
            });
        </script>
        <script src='https://vjs.zencdn.net/7.6.0/video.js'></script>
    </body>
</html>

タグ

--, 11, 358, 5, 7, 8, , class, com, demo, DOCTYPE, endif, gt, html, IE, if, index, lt, lt-ie, no-js, PC, php, repeat, STR, tool, zip, いつも, コード, こちら, こと, これ, サンプル, それ, ため, もの, ループ, 任意, , 使用, 内容, 処理, 回数, , 存在, 指定, 文字, 文字列, 無限, , 茶目っ気, 負担, 関数,

xdebugの動作仕方が分からなかったのでメモ。

2019.06.29

Logging

Xdebugを動作させます。(F5)
次にブラウザを開き動作させたいURLを記入しエンター:D

すると…

debug出来るようになります、設定等は割愛します。
ちなみにphp.iniの方はこんな感じにしてます。

zend_extension ="/xxx/xdebug.so"
xdebug.remote_autostart=1
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back = 1
xdebug.remote_host=IP Address

タグ

, 5, 9000, Address, autostart, back, connect, debug, enable, extension, host, ini, IP, php, port, remote, so, url, xdebug, xxx, zend, エンター, ブラウザ, メモ, 仕方, 割愛, 動作, 感じ, , 記入, 設定,

MYSQL8以降ウィンドウ関数対応=>ランキング。

2019.05.06

Logging

MYSQLでもランキング機能(rank())が使えるようになったとさ。日本国内のレンタルサーバーは最新の技術というより
一歩遅れた技術で運営している理由はリスクを取らないためにそうしているのだろうなとヒシヒシと感じます。

### support mysql>8.0.2 ウィンドウ関数
```sql
select id,namae, rank() over(order by code_total asc)as code_rank from code_data;
```
### code_data
|id|namae|code_total|
|---|---|---|
|1|kaonashi|15|
|2|mononoke|75|
|3|asitaka|52|
|4|san|87|
|5|theta|99|

タグ

```, ---, , 15, 2, , 4, 5, 52, 75, 8, 8.0.2, 87, 99, as, asc, asitaka, BY, Code, data, from, gt, ID, kaonashi, mononoke, MYSQL, namae, order, over, rank, san, select, SQL, support, theta, total, ウィンドウ, サーバー, ため, ランキング, リスク, レンタル, , 国内, 対応, 技術, 日本, 最新, 機能, 理由, 運営, 関数,

フリーランスという働き方が浸透するのかな?

2019.04.02

Logging


氷河期時代、フリーランスやフリーターというものが
流行した時期があったのだけど、今回はなんだか少し以前とは
違うかもなとこの頃、思い始めています。
何故か。
それは国が結構力を入れているし、
フリーランスに対して企業もサービスを打ち出してきた。
フリーランスに正社員と同じ福利厚生を行ってくれる
プラットフォーム企業まで現れて、
もうIT業界はこの方向へ進む可能性が高くなった気がする。
https://lp.re-shine.jp
法整備され今までとは違う働き方は進んできている。
世の中変わってきている気がします。
そして5Gやクラウドサービス、高速通信などが
働き方の手助けになっていることは間違いないので
はないかなと感じます。
 

タグ

5, IT, jp, lp, nbsp, re-shine, クラウド, こと, サービス, ソレ, ドコ, プラットフォーム, フリー, フリーター, もの, ランス, , , 今回, 以前, 企業, 何故, 働き方, 厚生, 可能性, , 少し, 手助け, 方向, 時代, 時期, 業界, 正社員, , 氷河期, 法整備, 流行, 浸透, 福利, 結構, 通信, , 高速,

映画、ウィンストン・チャーチル/ヒトラーから世界を救った男 (字幕版)を観ましたよ。

2019.03.09

Logging

ウィンストン・チャーチル/ヒトラーから世界を救った男 (字幕版) – 予告編

映画、ウィンストン・チャーチル/ヒトラーから世界を救った男 (字幕版)を観ましたよ。これは良かった。

成功は決定的ではなく、失敗は致命的ではない。大切なのは続ける勇気だ
Success is not final, failure is not fatal: it is the courage to continue that counts

 

タグ

5, 50, com, continue, counts, courage, failure, fatal, FINAL, is, IT, lSG, MIoE, nbsp, not, success, that, The, To, youtube, ウィンストン, コレ, チャーチル, ヒトラー, 世界, 勇気, 大切, 失敗, 字幕, 成功, 映画, ,

PHPの無名関数の使い道が未だにわからないし…

2019.03.09

Logging

<?php
$mumei = function()
{
    if($cnt = func_get_args())
    {
        foreach($cnt as $key=>$value)
        {
            print func_get_arg($key);
        }
    }
};
$mumei(1,2,3,4,5,6);

わからない、未だにわからないし、使う機会が少ないのだけどいったいどこに使うのか。

追記:
2021年の今、無名関数を使ってコードを書くことが増えました、PHP8になりオブジェクト指向が洗練されてきています。今後、無名関数を使用してコードを書くこともあると思います。因みにJSの方が無名関数でコードを書くことが多いですね。

PHPでの無名関数の問題点は、頻繁に無名関数ばかり使用していると他のエンジニアが読みづらく感じる所かもしれません。特にPHPの昔のバージョンになればなる程、読みづらいと思います。

タグ

, 2, 2021, , 4, 5, 6, 8, arg, args, as, cnt, foreach, FUNC, function, GET, gt, if, JS, key, lt, mumei, php, print, value, エンジニア, オブジェクト, コード, こと, どこ, , 今後, , 使い道, 使用, 問題点, , 指向, , 未だ, 機会, 洗練, 無名, 追記, 関数, 頻繁,

再帰処理の考え方は単なるこれだけのこと。

2019.02.27

Logging

再帰処理の考え方は単なるこれだけのこと。
forやwhile文などでループできない処理の代替えだと
思うとわかりやすいかも。

<?php
print loop(-20);
function loop($i,$ii=1):int
{
    if($i>=5)
    {
        return $i;
    }
    $i++;
    $ii = $ii * $i;
    print "$i=$in";
    print "$ii=$iin";
    if($ii==0)
    {
        $ii = 20;
    }
    return loop($i,$ii);
}

タグ

0, , 20, 5, For, function, gt, if, Ii, int, loop, lt, php, print, return, while, こと, これだけ, ループ, 代替え, 再帰, 処理, , 考え方,

javascriptのアロー関数というものを使ってみた。

2019.02.24

Logging

javascriptのアロー関数というものを使ってみた。
関数と同じだよねとおもっていると落とし穴があるみたい。
どうもグローバル変数が挙動不審みたいなんです。

/* アロー関数 */
let func1 = a => a + 3;
console.log(func1(5));
let func2 = (a,b)=>{
    return a + b + 3;
}
console.log(func2(1,2));

タグ

, 2, , 5, console, FUNC, gt, javascript, let, log, return, アロー, グローバル, もの, 変数, 落とし穴, 関数,

この道を観てきましたよ #映画

2019.01.13

Logging

映画『この道』予告

悪くないと思うけど、凄く受けの良い映画でも無い、ただ意義有る映画だとは思います。ぜひ、安倍首相に観てもらいたい映画です。

タグ

016, 4, 5, 7, asin, com, DVD, FEM, jp, MC, vRimxJB, youtube, 安倍, 意義, , 日本, 映画, , 首相,

VBAオブジェクトを自動生成しイベントを付与する。

2019.01.12

Logging

VBAオブジェクトを自動生成しイベントを付与する。
サンプルコードです。
ダウンロードはこちら
https://zip358.com/tool/sample.zip

Dim chg_class(0 To 5) As chg
Public Sub objset()
Dim obj_ctl As Control
Dim i As Integer
For i = LBound(chg_class) To UBound(chg_class)
    Set obj_ctl = UserForm1.Controls.Add("Forms.TextBox.1", "Box" & i)
    obj_ctl.Top = 10 + 20 * i
    obj_ctl.Width = 200
    obj_ctl.Height = 20
    obj_ctl.Text = "ここを変更してみて、またはダブルクリック(" & i & "番)"
    Set chg_class(i) = New chg
    chg_class(i).set_evn obj_ctl, i
    Set obj_ctl = Nothing
Next i
End Sub
Private WithEvents TextB As MSForms.TextBox
Private index_no As Integer
Public Sub set_evn(hoge_obj As MSForms.TextBox, hoge As Integer)
    Set TextB = hoge_obj
    index_no = hoge
End Sub
Private Sub TextB_Change()
    MsgBox TextB.Text 'UserForm1("Box" & index_no)
End Sub
Private Sub TextB_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox TextB.Text 'UserForm1("Box" & index_no)
End Sub
Private Sub TextBox1_Change()
MsgBox TextBox1
End Sub
Private Sub CommandButton1_Click()
End Sub
Private Sub UserForm_Click()
End Sub

タグ

0, , 10, 20, 200, 358, 5, Add, amp, as, Box, chg, class, com, Control, Controls, ctl, Dim, For, Forms, Height, Integer, LBound, obj, objset, public, sample, set, Sub, Text, TextBox, To, tool, TOP, UBound, UserForm, VBA, Width, zip, イベント, オブジェクト, コード, ここ, こちら, サンプル, ダウンロード, 付与, 変更, 自動生成,

javascriptを勉強中

2018.12.15

Logging

var a = 3;
var b = 10;
var obj = {
        hoge:function(a){
            a = a + a;
            return a;
        },
        a:a = a && 5,
        b:b = b || 3
    };
console.log(obj.hoge(2));
console.log(obj.a);
console.log(obj.b);

上記のCodeを動かすと仕事と表示されます(笑)、4,5,10と表示されます。
何故そうなったかを考えるとキリがないのでそういうものだと
思ったほうが良いかもしれないです。
説明するとhogeはオブジェクトです。あとは変数とIF文の省略系を
記述しているだけです、実際は=もいらないですが・・・。
わかりやすく自分なりに記載したつもりです。
javascriptライブラリってこういうのが何百行も記載して成り立っていますが
概念はこういう事です。自分は基本的に概念しか覚えないのです。
何故、そうしているか・・・自分が怠惰な人間だからです。
 

タグ

10, 2, , 4,5,10, 5, amp, Code, console, function, hoge, if, javascript, log, obj, return, var, あと, オブジェクト, キリ, つもり, もいら, もの, 上記, 仕事, 勉強, 変数, 実際, , 省略, 自分, 表示, 記載, 記述, 説明,

グーグルアーススタジオ(Google EarthStudio)って面白そうですね。

2018.12.10

Logging

グーグルアーススタジオ(Google EarthStudio)って面白そうですね。
Google Earthに録画機能が付いたものだと思ったらわかりやすいかも。
今の所、誰もが使用することが出来る機能ではないけれど
いずれは誰もが使用できるサービスになるみたいです。

Google Earth Studio – Animation Reel

タグ

5, 6, com, Earth, EarthStudio, Google, tjtVDkA, youtube, アース, いずれ, グーグル, こと, サービス, スタジオ, もの, , 使用, , 機能, , 録画,

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法。

2018.11.08

Logging

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法
10年ぐらいまえのコードを見直して改善したコードが下記になります。
10年前はクラスを使わない方法で構築したのだけど、今回はクラスの概念を
使って構築。ここ何年かで自分のコーディングの技術は上がっているかといえば
そうでもないですが、昔よりかは技術の幅は広がっていると思いたいw
※qiita日付は数年前にUPしたのですけど、コード自体は10年前のコードです。

追記:2022/10/08 修正:詳しくはコチラ
https://qiita.com/question909/items/8f1df9b62ab4fba76243

<?php
//5分刻みに対して有効な無限クローン 処理が負荷の場合どうなるかは知りません。
date_default_timezone_set('Asia/Tokyo');
class cron{

    public function d_m($obj)
    {
            if($obj->m==="*")return true;
            if(preg_match("/,/",$obj->m))return $this->comma($obj->m,date("m"));
            if((int)$obj->m === (int)date("m"))return true;

            return false;
    }

    public function d_d($obj)
    {
            if($obj->d==="*")return true;
            if(preg_match("/,/",$obj->d))return $this->comma($obj->d,date("d"));
            if((int)$obj->d === (int)date("d"))return true;

            return false;
    }

    public function d_H($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->H)){
                $H = explode("/",$obj->H);
                if((int)$H[1]>0 && ((int)date("H") % (int)$H[1])===0)return true;
            }else{
                if($obj->H==="*")return true;
                if(preg_match("/,/",$obj->H))return $this->comma($obj->H,date("H"));
                if((int)$obj->H === (int)date("H"))return true;

            }
            return false;
    }

    public function d_i($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->i)){
                $i = explode("/",$obj->i);
                if((int)$i[1]>0 && ((int)date("i") % (int)$i[1])===0)return true;
            }else{
                if($obj->i==="*")return true;
                if(preg_match("/,/",$obj->i))return $this->comma($obj->i,date("i"));
                if((int)$obj->i === (int)date("i"))return true;

            }
            return false;
    }

    //曜日 0=日曜日 6=土曜日
    public function d_w($obj)
    {
            if((int)$obj->w[date("w")]===1)return true;
            return false;
    }

    public  function comma($c="",$t=""){
        if($c==="")return false;
        if($t==="")return false;
        $flg = false;
        foreach(explode(",",$c) as $cc){
            if((int)$cc===(int)$t)$flg = true;
        }
        return $flg;
    }


    public function d_command($obj){
        if($obj->command){
            exec($obj->command . " > /dev/null &");
        }
        return true;
    }

}
if ($argv[1]) {
   $filename = $argv[1];
    if(is_file($filename)){
        $jsn = json_decode(file_get_contents($filename));
        $cron = new cron();
        try {
            foreach($jsn as $obj){
                if($cron->d_m($obj)){
                    if($cron->d_d($obj)){
                        if($cron->d_H($obj)){
                            if($cron->d_i($obj)){
                                if($cron->d_w($obj)){
                                    $cron->d_command($obj);//波動拳{{{{
                                }
                            }
                        }
                    }
                }
            }
        } catch (\Throwable $th) {
            print $th->getMessage();
        }
    }
}

タグ

08, 10, 2022, 39, 5, Asia, class, cron, crontab, date, default, function, if, lt, obj, php, public, qiita, set, timezone, Tokyo, UP, , クラス, クローン, クロン, コーディング, コード, ここ, コチラ, サーバー, さくら, タブ, まえ, レンタル, 下記, 今回, 何年か, 修正, 処理, 分刻み, 制限, 場合, , 技術, 改善, , 方法, 日付, , 有効, 概念, 構築, 無限, 自体, 自分, 負荷, 追記,

日々淡々と

2018.05.02

Logging


日々淡々と生きてます。
この画像を作っている時に、小学生の時に切り絵をした事がふと蘇りました。
自分、小学生や中学生の時に何をしていたのかという記憶はほぼなし、出来事の記憶がちらほら有るぐらいで
あまり覚えていませんね。ちなみにこの画像は背景はグラデーションを使用し波のフリー画像を持ってきて加工をおこなってこんな感じに仕上げました。じぶんの画像は大体は苦労せずにお手軽に作成することが出来ると思います、制作にかける時間は大体、5分です。
凝ったものになると20分ぐらいの時もありますが、シンプルなものは大体、それぐらいです、飽きもせずこういうの
自前で作っていますが、こういうの好きですから続きます。
継続は力なりとは言いますが、アレは半分ウソだと思います。確かにある一定度は伸びますが、技は本を読んだり
誰かに教えてもらわないと身につかないと思います。自分は未だにイラレの参考書をちら見した程度です、本当は
ロゴとかそういうのが自分で作れたら良いなと思っています。

タグ

20, 5, アレ, イラレ, ウソ, グラデーション, こと, じぶん, シンプル, それ, フリー, もの, ロゴ, 一定, 中学生, , , 作成, 使用, 出来事, 切り絵, 制作, , 加工, 半分, 参考書, 大体, 小学生, 感じ, , 日々, , 時間, 未だ, , 本当, , 画像, 程度, 継続, 背景, 自分, 自前, 苦労, 記憶, 誰か, ,

5月の雨、6月の晴れ

2018.03.18

Logging


東京に住んでいた頃、雨の電車通勤がとても嫌でした。
高知で住んでいると通勤は殆どの人は車です、たぶんこれから先もそうなんだと思います。自分の世代が60代になる頃には自動運転とかが当たり前になっている世の中になるでしょう。
ちなみに今、自分は30代後半ですけど、心は20代前半の気分です。
40代になったとしても何にも変わらない気がします。
トイウコトハ、50代、60代と歳寄せてもあまり変わりそうにないです、あくまでも自分の場合ですが他の人はそれなりに変わっていくだろうと思いますよ。
じぶんは「新しい技術に興味、関心があります」なので少しも変わらないだろうと思います。このままの脳処理で行けば同じかなと思います。記憶力も20代から何も変わらないので変わらない気がします。
技術の節目ってあると思うです。
例えばパーソナルコンピュータが登場した時、インターネットが登場した時、大きく世の中が変わっていきます。今後、大きく変わることと言えばAIがAI2.0になった時、自動運転が普及した時、再生医療が確立した時、5G通信が普及した時に大きく世の中変わっていくだろうと思います。
世間では、働き方改革とか言っていますけど、それで世の中が変わっていくのではないです、世の中が変わるのは技術の進歩が飛躍した時だという事です、技術の単価と普及率は当たり前ですが、比例の関係にあります。単価が安いと普及率は上がります。
なので、5G、IOT、AI2.0、再生医療=自動運転の順に世の中に普及していくのかと思います。
そんなモノで2019年には5Gというのが都市から浸透していくと思います、新しい技術にふれるというのは情報を知るよりももっと可能性を感じられるのではないかと思います。

タグ

2.0, 20, 30, 40, 5, 50, 6, 60, AI, インターネット, こと, このまま, これ, コンピュータ, じぶん, それなり, トイウコトハ, パーソナル, , 世代, , , , 今後, , , , 再生, 処理, 前半, 場合, 少し, 当たり前, 後半, , 技術, , 普及, 晴れ, 東京, , 殆ど, , 気分, 登場, 節目, , 自分, 自動, 興味, 記憶力, , 通勤, 運転, 関心, , 電車, , 高知,

ウルフルズの人生のバカヤローが良い。

2017.10.02

Logging


ウルフルズの人生のバカヤローが良い。歌詞も声も音楽も良い。
音楽っていうのは人に力を与えたりするからホントに良いと感じます!!
「夢なんかくそくらえ」っていう所や「明日なんか」っていう所、言葉が好きです。
いろいろあって今のウルフルズがあることが、何だかこの歌詞から垣間見ることが出来たように思えます。
人間味あふれる歌詞がやはり良いなと。
ちなみに自分が音楽や記事をシェアしているものの7割は結構意味があります、それはひとの役に立つかもしれないものだと思ったものを極力シェアしたりしています。そして好きなものもであること。
嫌いなものはシェアしません。拡散なんかもあまりしたことが無いはずです。
どうも嫌いなものには関心があまりないです。

ウルフルズ『バカヤロー』

タグ

5, 7, com, https, ifHE-GNkKY, watch, www, youtube, ウルフルズ, クソ, こと, シェア, それ, バカヤロー, パス, ひと, ホント, もの, , 人生, 人間味, , , , , 嫌い, , 意味, , 拡散, 明日, 歌詞, 自分, 言葉, 記事, 関心, 音楽,

超それ!機械学習、 TensorFlow!!

2017.09.02

Logging


機械学習でどんな事出来るの?
勝手に勉強してくれるお利口さんな機械学習もあるけれど
オープンソースで提供している機械学習ってのは大体、前もって
答えを与えておいて、そこから判別するものがある。
今回、某検索サイトが提供しているTensorFlowでどんな事が出来るのだろうと
思い、ネットサーフィンしていたら、面白い記事を見つけました。
なんと、Raspberry PiとTensorflowをつかってきゅうりの仕分けができるというシステムを
開発した人がいました。この記事を読んでまさに「超それ!」
https://cloudplatform-jp.googleblog.com/2016/08/tensorflow_5.html
自分が思い描いていた機械学習でできることだと!

いやホントに凄いな、機械学習っていうのは
これからの花形になっていく存在だとつくづく思ってしまいました。
これか先、AIを作る層、AIライブラリやAI、APIを使う層、そしてAIを使う層に
別れていくだろうと思います。じぶんみたいな凡人開発者はAIを作る層には入れないですが、
AIライブラリやAI、APIなどを活用できるようにしないと、
今後、この業界で生き残っていくのは難しいじゃないかなと思っています。
なぜ、そう痛感しているのかと言えば
機械学習で検索すると数年前まではあまりヒットしなかったのに
去年あたりからな。いろいろな人が技術をオープンで公開し始めています。
この動きは止まることはないのではないかと思うのが一番の理由です。
ちなみに自分はあるサーバでTensorflowをインストールして動かしています。
まだ、テストを動かして遊んでいるぐらいで、じぶんでゴニョゴニョ開発しているわけではないです。
開発する前にやらないといけない事があるので、そちらが終わってから
Tensorflowコードをパクりながら学習しようかなと考えています。
https://www.youtube.com/watch?v=4HCE1P-m1l8
ちなみにtensorflowの公開をしますとか、言っていてからもう一年ぐらい
経過しているのかもしれません。すみません、じぶんは阿呆なので
もう少し理解するまでお時間が必要です。噛み砕いて提供できるまでには
結構、時間が必要かもしれません。
じぶんを機械学習したいこの頃でした・・・(´・ω・`)。
 

タグ

08, 2016, 5, AI, API, cloudplatform-jp, com, googleblog, html, https, Pi, Raspberry, tensorflow, オープン, お利口, きゅうり, けが, こと, これ, サーフィン, サイト, システム, ソース, そこ, それ, ネット, ホント, もの, ライブラリ, , , 今回, 仕分, , 判別, 勉強, 勝手, 大体, 存在, 学習, , 提供, 検索, 機械, 答え, 自分, 花形, 記事, 開発,

非公式土佐電つぶやきBOTが完成したが速攻ロックされた件。

2017.07.31

Logging


非公式土佐電つぶやきBOTが完成したが速攻ロックされた件だけど
正直な所、少し予想はしていました。
世の中、よく思わない人々がいることは確かなことです。
今回の非公式土佐電つぶやきBOTの制作経緯ですけど・・・
作ろうと構想をねってから5年ほど月日が流れていたモノなんですね。
何故、ここまで時間がかかったかというと土佐電交通の時刻表が簡単に
プログラムで抽出することが不可能なんです。
なので・・・。
当初は人力でデータを入れ込もうと考えていました。
これが一番、長引く原因になったわけです、データを登録しようと
何度も頑張ってみたのですが、情報量が多いので途中で挫折すること何度か。
結局これでは埒が明かないので、
他の方法を考えた結果、WEBストライピングするという事です。
要はサイトのデータ抽出することで解決したのですが、
公式ページはあんな感じなので、よくある電車検索サイトから
データ抽出してきました。
路面電車の時刻表を検索できるサイトを
探すのに手間がかかりましたが、抽出事態は、一日ぐらいで
コーディングする事で何とかなりました。
ちなみにある大手の検索できるサイトからデータを抽出しています。
今回、作って思ったことは
公式ページがPDFじゃなく電車の時刻表が検索でき時刻表が表示されるサイトを作ったら
良いのにと思いました。バスアプリは作っているのに・・・。
https://twitter.com/tosaden_net

{非公式}土佐電時刻表検索を始めました。
https://tosaden.net/

タグ

5, BOT, web, ここ, こと, これ, サイト, ストライピング, データ, プログラム, ページ, もの, ロック, わけ, 不可能, , , 予想, , 交通, 人々, 人力, 今回, , , 何度, 何度か, 何故, 公式, 制作, 原因, 土佐, , 完成, 少し, 当初, 情報, 感じ, , 抽出, 挫折, 方法, 時刻表, 時間, 月日, 検索, 構想, 正直, 登録, 簡単, 経緯, 結果, , 解決, 途中, 速攻, , 電車,

素数判定、単純なソース。

2017.06.25

Logging

素数判定、単純なソースを作りましたので
公開します、ちなみに確率的素数判定法ではなく
ほんとに単純明快な方法で作成しましたので自分のパソコンでは
4桁までの処理が限界でした、基本:javascriptで動いています・
ローカルのパソコン性能に左右されます。
ソースを変更して5桁とか試してみるのも良いかもしれません?
サンプルサイト
https://zip358.com/tool/sosu/

function sosu(){
    let sosuno = [2];
    for(let i=3;i<=9999;i++){
        let flg = true;
        if(i%2===0){
            continue;
        }
        for(let ii=2;ii<i;ii++){
            if(ii%2===0){
                continue;
            }
            if(i%ii===0){
                flg = false;
                break;
            }
        }
        if(flg){
            sosuno.push(i);
        }
    }
    document.getElementById("my-textarea").value = sosuno.join(',');
}
document.getElementById("btn").addEventListener("click",sosu);

タグ

$flg, 0, 2, , 4, 5, 9999, continue, For, function, if, Ii, javascript, let, lt, sosu, sosuno, true, サイト, サンプル, ソース, パソコン, ほんと, ローカル, 作成, 公開, 処理, 判定, 判定法, 単純, 基本, 変更, 左右, 性能, 方法, 明快, 素数, 自分, 限界,