年賀状CSVを作りました。SJISで保存してください。

20181230

Logging

https://zip358.com/tool/nenga/
ブラウザ上で完結しています。
禁則処理などはありません、ただ純粋に入力したものが
CSV形式の文字列で出力されます。
これ何のために使えるかといえば
https://nenga.yu-bin.jp/
こちらのサイトで住所録を登録する際に使用できます。
タイトルにも描きましたがSJISの文字コードで出力をお願い致します、
また、データベースに保持などはしていないため
リロードしてしまうと全てのデータが消えてしまいます。
これを作った経緯。
自分が郵便年賀.jpで登録するのが面倒だったため作りました。

タグ

358, com, CSV, jp, nenga, SJIS, tool, yu-bin, zip, お願い, コード, こちら, これ, サイト, タイトル, ため, データ, データベース, ブラウザ, もの, リロード, 住所, , 使用, 保存, 保持, 入力, 全て, 処理, 出力, 完結, 年賀, 年賀状, 形式, 文字, 文字列, 登録, 禁則, 純粋, 経緯, 自分, 郵便, , 面倒,


google NewsをRSSで取得してjsonで返却するPHPプログラム

20181222

Logging

<?php
//$_POST["sh"]...検索キーワード 
if ($_POST["sh"]) {
	$sh = urlencode(@xss_defence($_POST["sh"]));
	$res = simplexml_load_file("https://news.google.com/news/rss/headlines/section/q/$sh/?ned=jp&hl=ja&gl=JP");
	rss($res);
}
function rss(object $obj = null):void
{
	if (isset($obj->channel->item)) {
		if ($obj->channel->item) {
			$cnt = 0;
			foreach ($obj->channel->item as $item) {
				$result[$cnt]["title"] = (string)$item->title;
				$result[$cnt]["link"] = (string)$item->link;
				$result[$cnt]["pubDate"] = (string)$item->pubDate;
				$result[$cnt]["description"] = (string)$item->description;
				$result[$cnt]["source"] = (string)$item->source;
				$cnt++;
			}
		}
	}
	echo json_encode($result);
}

function xss_defence(mixed $val):mixed
{

    if(!isset($val))return false;
    if(is_array($val)){
        foreach ($val as $key => $value) {
            # code...
            $val[$key] = strip_tags($value);
            $val[$key] = htmlentities($val[$key],ENT_QUOTES);
        }
    }else{
        $val = strip_tags($val);
        $val = htmlentities($val,ENT_QUOTES);
    }
    return $val;
}

google NewsをRSSで取得してjsonで返却するPHPプログラムです。
ご自由にご使用ください。

タグ

0, channel-, cnt, com, defence, file, foreach, function, gl, Google, gt, headlines, hl, https, if, isset, item, ja, jp, json, load, lt, ned, News, null, obj, object, php, POST, quot, res, RSS, section, sh, simplexml, urlencode, void, xss, キーワード, プログラム, 取得, 検索, 返却,


javascriptを勉強中

20181215

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)って面白そうですね。

20181210

Logging

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

Google Earth Studio – Animation Reel

タグ

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


ブロックエディタとクラッシックエディタ

20181207

Logging

WordPress5.0になりそろそろブロックエディタに切り替える準備を
しているみたいだけど、各プラグインはまだ対応していないみたいだな…。
そもそもブロックエディタってどうなのか?
クラッシックエディタの方が良くない?
っていう意見が多いのはおそらく使い慣れたからとプラグインが
対応していないのが原因なのだけど、対応すれば
ブロックエディタでも良いかもなと思っています。
WordPress5.0・・・仕様もだんだん変わっていくのかな。
ついていくには触れるべしだけど、
自分は当分クラッシックエディタで良いです。
 

タグ

5.0, nbsp, WordPress, エディタ, クラッシック, プラグイン, ブロック, 仕様, 原因, 対応, 意見, , 準備, 自分,


DropFTPを配布。

20181201

Logging

ドップして一つのファイルを転送するソフトを作りました。
こんなのどうしているのかと疑問を持つ人もいると思いますが
業務上、こんなソフトが要るという会社などもいるのではないかと
思いで作りました。
ダウンロードはこちらから
https://zip358.com/tool/DropFTP.zip
ソースコードは下記になります。
※FTP部分はWinSCPのライブラリを使用しています。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinSCP;
namespace dropFTP
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void upbtn_Click(object sender, EventArgs e)
        {
            String err = "";
            if (hostText.Text == "") {
                err += "ホスト名が設定されていませんn";
            }
            if (idText.Text == "")
            {
                err += "IDが設定されていませんn";
            }
            if (passText.Text == "")
            {
                err += "passが設定されていませんn";
            }
            if (remText.Text == "")
            {
                err += "アップロード場所が設定されていませんn";
            }
            if (uplab.Text == "")
            {
                err += "アップロードファイルが設定されていませんn";
            }
            var RadioGroup = groupFTP.Controls.OfType<RadioButton>().SingleOrDefault(rb => rb.Checked == true);
            if (RadioGroup == null) {
                err += "アップロード環境が設定されていませんn";
            }
            if (err != "")
            {
                MessageBox.Show(err);
            }
            else {
                if (RadioGroup.Text == "FTP") {
                    upFTP();
                }
                if (RadioGroup.Text == "SFTP")
                {
                    upSFTP();
                }
            }
        }
            private int upFTP() {
            try
            {
                // Setup session options
                SessionOptions sessionOptions = new SessionOptions
                {
                    Protocol = Protocol.Ftp,
                    HostName = hostText.Text,
                    UserName = idText.Text,
                    Password = passText.Text,
                    PortNumber =int.Parse(portText.Text)
                };
                using (Session session = new Session())
                {
                    // Connect
                    session.Open(sessionOptions);
                    // Upload files
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;
                    TransferOperationResult transferResult;
                    if (remText.Text.EndsWith("/"))
                    {
                        transferResult = session.PutFiles(@uplab.Text, remText.Text, false, transferOptions);
                    }
                    else
                    {
                        transferResult = session.PutFiles(@uplab.Text, remText.Text + "/", false, transferOptions);
                    }
                    // Throw on any error
                    transferResult.Check();
                    // Print results
                    foreach (TransferEventArgs transfer in transferResult.Transfers)
                    {
                        MessageBox.Show("アップロードしました");
                    }
                }
                return 0;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error: {0}" + e);
                return 1;
            }
        }
        private int upSFTP()
            {
                try
                {
                    // Setup session options
                    SessionOptions sessionOptions = new SessionOptions
                    {
                        Protocol = Protocol.Sftp,
                        HostName = hostText.Text,
                        UserName = idText.Text,
                        Password = passText.Text,
                        PortNumber = int.Parse(portText.Text),
                        GiveUpSecurityAndAcceptAnySshHostKey = true
                    };
                using (Session session = new Session())
                {
                    // Connect
                    session.Open(sessionOptions);
                    // Upload files
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;
                    TransferOperationResult transferResult;
                    if (remText.Text.EndsWith("/")) {
                        transferResult = session.PutFiles(@uplab.Text, remText.Text, false, transferOptions);
                    } else {
                        transferResult = session.PutFiles(@uplab.Text, remText.Text + "/", false, transferOptions);
                    }
                        // Throw on any error
                        transferResult.Check();
                        // Print results
                        foreach (TransferEventArgs transfer in transferResult.Transfers)
                        {
                        MessageBox.Show("アップロードしました");
                        }
                    }
                    return 0;
                }
                catch (Exception e)
                {
                    MessageBox.Show("Error: {0}" + e);
                    return 1;
                }
            }
            private void Form1_DragDrop(object sender, DragEventArgs e) {
            //e.Effect = DragDropEffects.Copy;
            string[] fileName = (string[])e.Data.GetData(DataFormats.FileDrop, false);
            uplab.Text = fileName[0];
        }
        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Copy;
        }
        private void radioSFTP_CheckedChanged(object sender, EventArgs e)
        {
            portText.Text = "22";
        }
        private void radioFTP_CheckedChanged(object sender, EventArgs e)
        {
            portText.Text = "21";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            this.MaximumSize = this.Size;
            this.MinimumSize = this.Size;
        }
    }
}

タグ

358, Collections, com, ComponentModel, data, Drawing, DropFTP, Forms, FTP, Generic, Linq, System, Tasks, Text, Threading, tool, using, Wi, Windows, WinSCP, zip, コード, こちら, ソース, ソフト, ダウンロード, ドップ, ファイル, ライブラリ, 一つ, 下記, , 会社, 使用, 業務, 疑問, 転送, 部分, 配布,


いろいろエディタやIDEを試してみてこれが良いかなと。

20181123

Logging

IDEとエディタの境目あたりで言えばATOMVisual Studio Codeですね。
IDEでPHPを使用するならばNetBeansかなと思います。
ATOMに関してはいろいろ試してみてこれだけのプラグインをインストールすれば
それなりに開発しやすいですよ。
auto-encoding
autocomplete
japanese-menu
linter-php
v-bootstrap4
これを入れてあとはPHPで開発するならばPHPのインストールも
お忘れなく。
ちなみにVisual Studio Codeの方が安定しています。
間違いなくシェアはこちらのほうが多いです。
会社でもVisual Studio Codeを使う人が多くなってきています。
サクサク動くので使用しやすいですね。
Visual Studio Codeでも上記と同じようなことがプラグインや
基本設定から可能です。
特に開発環境がUTF-8だけではない環境の方は
基本設定のここをONにしてあげると便利です。
“files.autoGuessEncoding”: true

タグ

4, 8, ATOM, auto-encoding, autocomplete, autoGuessEncoding, Code, files, IDE, japanese-menu, linter-php, NetBeans, ON, php, Studio, true, UTF-, v-bootstrap, Visual, あげる, あたり, あと, いろいろ, インストール, エディタ, , かな, ここ, こちら, こと, これ, これだけ, サクサク, , シェア, それなり, ちなみに, ない, プラグイン, やすい, 上記, , 会社, 使う, 使用, 便利, 入れ, 動く, 可能, 同じ, 基本, 境目, 多い, 多く, 安定, 忘れ, 思い, , 特に, 環境, 良い, 言え, 設定, 試し, 開発, 間違いなく, 関し,


WordPress自動日本語タグを吐き出しプラグインを作りました。

20181117

Logging

WordPress自動日本語タグを吐き出しプラグインを作りました。
あのjapanese autotagというプラグインと考え方は同じですが、
自分が作ったものはその簡略化したものです。
ソースコードは全ったく違う感じですが、動作は似たような感じです。
機能はjapanese autotagよりかは少ないですが、これだけで十分かなと思います。
ダウンロードはこちらから
https://zip358.com/tool/jp-auto-tag.zip [v2に対応済み]
尚、Yahoo デベロッパーのアプリケーションIDが必要となります。
ソースコードは下記になります。※v1のソースコードなので今は動きません!!最新の記事を参照ください。

<?php
/*
Plugin Name: jp-auto-tag
Version: 0.1.11
Description: auto jp tag
Author: taoka toshiaki
Author URI: https://zip358.com/
Plugin URI: https://wordpress.org/extend/plugins/jp-auto-tag/
*/
class jp_auto_tag{
    public $db_option = "jp_auto_tag";
    //api
    public $results = "ma";
    public $filter = array("1","2","3","4","5","6","7","8","9","10","11","12","13");
    function frm_page(){
        add_menu_page('jp-auto-tag','jp-auto-tag',  'manage_options', __FILE__, array($this,'show_text_option_page'), '',8);
    }
    function show_text_option_page(){
        wp_enqueue_style( 'bootstrap', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css', array(), '3.3.6' );
        wp_enqueue_script( 'bootstrap', 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js', array(), '3.3.6');
        $options = get_option($this->db_option);
        if(!empty($options)){
            $appid = $options["appid"];
            foreach ($this->filter as $key => $value) {
               if($options["filter".$value] == $value){
                    $f[] = "checked";
               }else{
                   $f[] = "";
               }
            }
        }
        include_once dirname( __FILE__ ).'/jp-auto-tag-tmp.php';
    }
    function ajax_event(){
        $appid = $_POST["appid"];
        $filter =$_POST["filter"];
        $options["appid"] = $appid;
        foreach ($this->filter as $key => $value) {
            if(in_array($value,$filter,true)){
                $options["filter".$value] = $value;
            }else{
                $options["filter".$value] = "";
            }
        }
        update_option($this->db_option, $options);
        $obj["appid"] = $appid;
        $obj["filter"] = $filter;
        print json_encode($obj);
        die(0);
    }
    function api_tag($post_id){
ini_set("display_errors",1);
        $post = get_post($post_id);
        $title = $post->post_title;
        $content = strip_tags($post->post_content);
        $sentence = $title.$content;
        if(strlen($sentence)>102400){
            $sentence = substr($sentence,0,102400);
        }
        $options = get_option($this->db_option);
        if(!empty($options)){
            $appid = $options["appid"];
            foreach ($this->filter as $key => $value) {
               if($options["filter".$value] == $value){
                    $f[] = $value;
               }
            }
        }
        if($appid){
            $filter = implode("|",$f);
            if(!$filter){
                $url = "https://jlp.yahooapis.jp/MAService/V1/parse?appid=$appid&results=$this->results&sentence=".urlencode($sentence);
            }else{
                $url = "https://jlp.yahooapis.jp/MAService/V1/parse?appid=$appid&results=$this->results&ma_filter=$filter&sentence=".urlencode($sentence);
            }
            $xml = @file_get_contents($url);
            $xml_obj = simplexml_load_string($xml);
            if($xml_obj->ma_result->word_list){
                foreach($xml_obj->ma_result->word_list->word as $word) {
                    if($word->surface){
                        $tags[] = $word->surface;
                    }
                    if(is_array($tags)){
                        wp_set_post_tags($post_id, implode(",",array_unique($tags)), false);
                    }
                }
            }
        }
    }
}
$jp_auto_tag = new jp_auto_tag();
add_action('save_post',array($jp_auto_tag,'api_tag'));
add_action('publish_post',array($jp_auto_tag,'api_tag'));
add_action('admin_menu', array($jp_auto_tag, 'frm_page'));
add_action('wp_ajax_ajax_event',array($jp_auto_tag,'ajax_event'));
<form id="ajax-frm">
<table class="table">
    <tr>
        <td>
            アプリケーションID
        </td>
        <td>
            <input type="text" name="appid" value="<?=$appid?>" class="form-control">
        </td>
    </tr>
    <tr>
        <td>
            解析結果として出力する品詞
        </td>
        <td>
            <input type="checkbox" name="filter[]" value="1" <?=$f[0]?>  class="form-control">1 : 形容詞
            <input type="checkbox" name="filter[]" value="2" <?=$f[1]?> class="form-control">2 : 形容動詞
            <input type="checkbox" name="filter[]" value="3" <?=$f[2]?> class="form-control">3 : 感動詞
            <input type="checkbox" name="filter[]" value="4" <?=$f[3]?> class="form-control">4 : 副詞
            <input type="checkbox" name="filter[]" value="5" <?=$f[4]?> class="form-control">5 : 連体詞
            <input type="checkbox" name="filter[]" value="6" <?=$f[5]?> class="form-control">6 : 接続詞
            <input type="checkbox" name="filter[]" value="7" <?=$f[6]?> class="form-control">7 : 接頭辞
            <input type="checkbox" name="filter[]" value="8" <?=$f[7]?> class="form-control">8 : 接尾辞
            <input type="checkbox" name="filter[]" value="9" <?=$f[8]?> class="form-control">9 : 名詞
            <input type="checkbox" name="filter[]" value="10"<?=$f[9]?>  class="form-control">10 : 動詞
            <input type="checkbox" name="filter[]" value="11"<?=$f[10]?>  class="form-control">11 : 助詞
            <input type="checkbox" name="filter[]" value="12"<?=$f[11]?>  class="form-control">12 : 助動詞
            <input type="checkbox" name="filter[]" value="13"<?=$f[12]?>  class="form-control">13 : 特殊(句読点、カッコ、記号など)
        </td>
    </tr>
    <tr>
        <td colspan="2"><input type="button" id="frmsubmit" value="登録する" class="form-control"></td>
    </tr>
</table>
</form>
<script>
    jQuery(function($){
        $("#frmsubmit").on("click",function(){
            var ajaxurl = '<?=admin_url( 'admin-ajax.php');?>';
            var data = $("#ajax-frm").serializeArray();
            data.push({name:"action",value:"ajax_event"});
            $.ajax({
               type:'POST',
               url:ajaxurl,
               data:data,
               success:function(obj){
                   console.log(obj);
                   if(obj.appid!==""){
                       alert("更新しました");
                   }
               }
            });
        });
    })
</script>

タグ

API, appid, array, Bootstrap, dirname, extend, foreach, implode, MAService, obj, parse, plugins, strlen, success, 助動詞, 品詞, 形容動詞, 接尾辞, 接頭辞, 連体詞,


さくらレンタルサーバーとXサーバーのMYSQLの規定

20181113

Logging

さくらレンタルサーバーとXサーバーのMYSQLの規定は下記になります。
個人で使用する場合、1G、多くて3Gもあればそんなに困らないとは思いますが、企業や仕事で商品データなどをMYSQLサーバーに保存しようとすると足りない。さくらレンタルサーバーは9Gまで保証してくれるが、それでも足りないっていう企業の方も多くいると思います。そんな場合はさくらレンタルサーバーだと共有サーバーを諦めてワンランクアップしたマネージドサーバ(IP専用)を考えてみると良いかもしれないです。
ちなみにXサーバーはビジネスタイプでも同じ規定です。

https://www.xserver.ne.jp/manual/man_db_spec.php

https://help.sakura.ad.jp/hc/ja/articles/206053142#db

タグ

, 206053142, , , ad, articles, db, hc, help, https, IP, ja, jp, MYSQL, sakura, アップ, サーバ, サーバー, さくら, それ, タイプ, データ, ビジネス, マネージド, ランク, レンタル, ワン, 下記, 仕事, 企業, 使用, 保存, 保証, 個人, 共有, 商品, 場合, 専用, , 規定,


javascriptでテキストファイルやCSVファイルを読み込む方法。

20181113

Logging

javascriptでテキストファイルやCSVファイルを読み込む方法は下記になります。
この他に、jqueryだとajaxを使用して読み込む方法などもありますが、あえて
javascriptで記述しています。

rt();
function rt(){
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET","xxx.txt",true);
    xmlHttp.send(null);
    xmlHttp.onload = function(){
        var data = xmlHttp.responseText;
    }
}

追記:アクセス数が結構あるのでサンプルを作りました。
下記のコードをお試しください。
デモページはこちらになります。
https://zip358.com/tool/demo13/ 【改良前】
https://zip358.com/tool/demo13/index2.php 【ちょっと改良】
https://zip358.com/tool/demo13/index3.php 【もうちょっと改良】
https://zip358.com/tool/demo13/index4.php 【もっと改良】
https://zip358.com/tool/demo13/index5.php 【もっともっと改良】2022年度版


※文字の中にカンマ区切りがあるのには対応してません?

"use strict";
var csv = {
	load:async function(filename,id){
		await fetch(filename).then(data=>data.text()).then((res)=>{
			let result = (res.split("\r\n").map(value=>{
				return "<tr>" + (value.split(",").map(val =>{
					return "<td>" + val.slice(1, -1) + "</td>";
				})).join("") +"</tr>";
			})).join("");
			if(result){
				document.getElementById(id).innerHTML = result;
			}
		}).catch(m =>{
			console.error(m);
		});
		return true;
	}
}

csv.load("xxx.csv", "table");
"use strict";
var csv = {
	load:async function(filename,id){
		const res = await fetch(filename);
		const data1 = await res.text();
		let separate1 = /\r\n/;
		let separate2 = ",";
		let data_tbl = (data1.split(separate1)).map(function(value){
			return (value.split(separate2)).map(function(value1){
				return value1.slice(1, -1);
			});
		});
		var str = "";
		for (const key in data_tbl) {
			str+=`<tr>`;
			for (const key1 in data_tbl[key]) {
				str+=`<td>${data_tbl[key][key1]}</td>`;
			}
			str+=`</tr>`;
		}
		document.getElementById(id).innerHTML = str;
		return "OK";
	}
};

csv.load("xxx.csv", "table");
"use strict";
var csv = {
    load: function (filename, id) {
		fetch(filename).then(
			Response=>{
				return Response.text();
			}).then(data1 =>{
                let separate1 = /\r\n/;
                let separate2 = ",";
				let data_tbl = (data1.split(separate1)).map(function(value){
					return (value.split(separate2)).map(function(value1){
						return value1.slice(1, -1);
					});
				});
				var str = "";
				for (const key in data_tbl) {
					str+=`<tr>`;
					for (const key1 in data_tbl[key]) {
						str+=`<td>${data_tbl[key][key1]}</td>`;
					}
					str+=`</tr>`;
				}
				document.getElementById(id).innerHTML = str;
				return "OK";
			}).catch(error=>{
				console.log("失敗しました" + error);
			})
    }
};

csv.load("xxx.csv", "table");
"use strict";
var csv = {
    load: function (filename, id) {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", filename, true);
        xmlHttp.send(null);
        xmlHttp.onload = function () {
            if (xmlHttp.status === 200) {
                let separate1 = /\r\n/;
                let separate2 = ",";
				let data1 = xmlHttp.responseText;
				let data_tbl = (data1.split(separate1)).map(function(value){
					return (value.split(separate2)).map(function(value1){
						return value1.slice(1, -1);
					});
				});
				var str = "";
				for (const key in data_tbl) {
					str+=`<tr>`;
					for (const key1 in data_tbl[key]) {
						str+=`<td>${data_tbl[key][key1]}</td>`;
					}
					str+=`</tr>`;
				}
				document.getElementById(id).innerHTML = str;
				
            }
        };
    }
};

csv.load("xxx.csv?123", "table");
"use strict";
var csv = {
    load: function (filename, id) {
        var data = {};
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", filename, true);
        xmlHttp.send(null);
        xmlHttp.onload = function () {
            if (xmlHttp.status === 200) {
                let separate1 = /\r\n/;
                let separate2 = ",";
                let data_org = xmlHttp.responseText;
                let data_en = data_org.split(separate1);
                for (let d in data_en) {
                    data[d] = data_en[d].split(separate2);
                }
                //data load
                var t = document.getElementById(id);
                var h = "<table>";
                for (var o in data) {
                    h += "<tr>";
                    for (var r in data[o]) {
                        h += "<td>";
                        h += data[o][r].slice(1, -1);
                        h += "</td>";
                    }
                    h += "</tr>";
                }
                h += "</table>";
                t.innerHTML = h;
            }
        };
    }
};
csv.load("xxx.csv", "table");

タグ

358, ajax, com, CSV, data, function, GET, https, javascript, jquery, new, null, onload, open, quot, responseText, rt, send, too, true, txt, var, xmlHttp, XMLHttpRequest, xxx, zip, アクセス, コード, こちら, サンプル, テキスト, デモ, ファイル, ページ, 下記, , 使用, 方法, 記述, 追記,


プロセス残してSSHログアウトする方法。

20181111

Logging

screenっていうコマンドを使用するとプロセス残してSSHログアウトする事ができます。ちなみにscreenというコマンドは仮想ウィンドが立ち上げる機能です。
まずscreenをインストールし、実行したいコマンドを実行します。
実行すると仮想ウィンドが立ち上がります。
立ち上がっている画面の確認はlsで確認することが可能。
その画面を読み込むときは-r を使用します。
lsで表示されているプロセスID(PID)を記入してコマンドを実行することで再接続することが可能となります。
追記:こんな方法もあります。
Linuxでプロセス残すなら!

yum -y install screen
screen php test.php
screen -ls
screen -r PID

タグ

-r, -y, ID, install, Linux, ls, php, PID, screen, SSH, test, yum, インストール, ウィンド, こと, コマンド, とき, プロセス, ログアウト, , 仮想, 使用, 可能, 実行, 接続, 方法, 機能, 画面, 確認, 表示, 記入, 追記,


jQueryの基礎1

20181111

Logging

世の中、javascriptへの原点回帰が進んでいますが、だからといって、jqueryが無くなるかといえばそうでもない気がします。トイウコトデ、jqueryの基礎的なデモページを作成しました。
ご参考程度どうぞ。これから毎週1回以上、プログラムのデモ的な内容をUPしていきます。自分の勉強や復習の意味合いも兼ねています。プログラム言語はPHP、JS、C#が主の掲載となります。

追記:2021年、jqueryは使わなくなってきています、そのうち使わなくなる可能性があります。
https://zip358.com/tool/demo1/demo1.php

$(function () {
	$(".alert.alert-danger").html("未記入です");
	$("input").keyup(function () {
		if ($(this).val()) {
			$(".alert.alert-danger").eq($("input").index(this)).html($(this).val());
		} else {
			$(".alert.alert-danger").eq($("input").index(this)).html("未記入です");
		}
	});
	$("input").blur(function () {
		if ($(this).val()) {
			$(".alert.alert-danger").eq($("input").index(this)).html($(this).val());
		} else {
			$(".alert.alert-danger").eq($("input").index(this)).html("未記入です");
		}
	});
	$("input").focus(function () {
		if ($(this).val()) {
			$(".alert.alert-danger").eq($("input").index(this)).html($(this).val());
		} else {
			$(".alert.alert-danger").eq($("input").index(this)).html("未記入です");
		}
	});
});

タグ

, 2021, alert, alert-danger, eq, function, html, if, input, javascript, jquery, JS, keyup, php, quot, this, UP, val, うち, これ, ご参考, デモ, トイウコトデ, プログラム, ページ, , , 作成, 内容, 勉強, 原点, 可能性, 回帰, 基礎, 復習, 意味合い, 掲載, 毎週, , 自分, 言語, 記入, 追記,


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

20181108

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, , クラス, クローン, クロン, コーディング, コード, ここ, コチラ, サーバー, さくら, タブ, まえ, レンタル, 下記, 今回, 何年か, 修正, 処理, 分刻み, 制限, 場合, , 技術, 改善, , 方法, 日付, , 有効, 概念, 構築, 無限, 自体, 自分, 負荷, 追記,


Twitterの画像を抽出、非API

20181107

Logging

Twitterの画像を抽出、非API
Goutteライブラリを使用してTwitterのメディアを抽出するだけで
APIを使用せずに17枚の画像が抽出することが可能。
これを改良してスクロールさせながらってのは出来ないのではないかな
特にVPSじゃないレンタルサーバーなどでは不可能じゃないのかと思います。

require_once './vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET','https://twitter.com/xxxx/media');
$img = $crawler->filter(".AdaptiveMedia-photoContainer.js-adaptive-photo img")->each(function ($node){
return $node->attr('src');
});

タグ

'src', 17, AdaptiveMedia-photoContainer, API, APITwitter, attr, autoload, Client, com, crawler, each, filter, function, GET, Goutte, gt, img, js-adaptive-photo, media', new, node, once, php, request, require, return, Twitter, use, vendor, VPS, xxxx, こと, これ, サーバー, スクロール, ない, メディア, ライブラリ, レンタル, 不可能, 使用, 出来, 可能, 思い, 抽出, 改良, , 特に, 画像, ,


映画、ヴェノムを観てきましたよ。

20181103

Logging

ざっくり映画の感想を書くと、映画、ヴェノムは
日本の漫画、亜人とストーリー展開が恐ろしく似ているということ。
ちなみにヴェノムより亜人の実写化された映画、亜人の方が
自分は好みです。最後の最後までアメリカ版の亜人を見ているという感覚は
抜けなかったです。
エンドロール後におまけ映像もあるので
続編ありなんでしょうけれど・・・。
ちなみにエンドロールに流れた曲、エミネムさんが
音楽提供しているのかな。声からすると。。

タグ

07, 472, 8, asin, jp, アメリカ, ヴェノム, エミネム, エンド, オマケ, こと, ストーリー, ロール, 亜人, , 実写, 展開, 感想, 感覚, 提供, , 日本, 映像, 映画, , 最後, 漫画, 続編, 自分, 音楽,


ZERO=0

20181103

Logging


 

タグ

ZERO,


No1

20181103

Logging


 

タグ

No1,


ヒーロー

20181028

Logging

ウルフルズ『ヒーロー』

タグ

ヒーロー, 体調,


この頃、タイトル名を変更しているわけ。

20181027

Logging


タイトル名を変更しているわけ。
SEO的にはあまりよろしくはないタイトル名の変更なのですが
アクセス数は右肩上がりです。
理由は右肩上がりな所が問題だったりします、あまりアクセス数増えられても
困りモノ、ブログを生業としているわけではないので
多くなってきたらブログのタイトル名を変えています。
もう一つはタイトル名がしっくりこないという理由です。
そういう理由からタイトル名を変更してます。

タグ

SEO, SEO的, Webマーケッター ボーン, Webライティング, アクセス数, タイトル名, ブログ, もう一つ, ライティング教本, 右肩上がり, 問題, 困りモノ, , 沈黙, 激闘, 理由, 生業,


イラストレーターの新機能使ってみた。

20181026

Logging


イラストレーターのグラデーションに新たに新機能が追加されてみたので
使ってみました。これは凄く良い感じです。
かなり便利なんじゃないかなと思いますし、出来ることの幅が広がる。
 

タグ

イラストレーター, かなり, グラデーション, , 新機能, 良い感じ,


分かっていることを言う必要はあるのか。

20181025

Logging


分かっていることを言う必要はあるのか。


東大読書 10万部をパラっと。

20181024

Logging


東大読書をパラっと見ました。
東大にはいるにはどうしたら良いということを
少し書いている本であるけれど、基本は読書術の書いた本です。
東大にはいるには、まず本に書いていることに疑問を持つことが
大事だとか、何故なら東大の試験は過去暗記だけで解ける問題ではなく
基礎をがっつり理解した上で、自ら考えて応用して解く問題が
東大の試験には多いだそうです。
ここらへん、漫画ドラゴン桜と同じことを書いていますよね。
この本のすごい所は読書術だけで282ページ書いている所です。
行間隔広いといえば広いですけど、それでも
読書術というテーマだけで自分は書けそうにないですね。


 

タグ

いまいち, ここら, すごい所, テーマ, 問題, 基本, 基礎, 少し, 暗記式, , 東大読書, 漫画ドラゴン桜, 疑問, 行間隔, 試験, 読書術, 過去, 過去暗記, 頭力,


続けることに意味がある。

20181022

Logging


続けることに意味があるのか?
どうかはわからないけれど、続けることで進歩は少しずつだけど
あると思います。ただ、それを他人と比べると続けたくなくなる場合も
少なからずあるので、過去の自分と照らし合わせてあの時は
これぐらいしか出来なかったけど、いまはこれぐらい出来るように
なったという事を認識する事が大事かなと思います。
一番ダメなのはただ続けている人です。
自分みたいにただ続けている人はあまり進歩はしない、
ある程度までは進歩するけど、向上心がないので
あとワンランクアップすることが難しい、イラストレーターを
使い始めて、一年は経過していると思いますが全然な感じです。
ワンランクアップするには機能の合わせ技を身に着けないといけないのですが
それが出来ていないのです。おそらくそれが出来れば
売り物になると思いますが出来ないので
半年ほど地団駄踏んでいます。

タグ

イラストレーター, これぐらい, ワンランク, 一年, 他人, 半年, 合わせ技, 向上心, 地団駄, 売り物, 意味, 感じ, 機能, 進歩, 過去,


転職を考えている人へ

20181021

Logging


転職を考えている人へ
自分は転職を繰り返してきたからわかりますが
そんなに進んでするものではない。
キャリアアップの為にステップアップとして転職をする場合は
オススメしますが、そうではなく職場に不満があるなどの場合は
ある程度、我慢が必要な場合があります。
それでも我慢出来ない場合は転職をするという二段階の手順を
踏むことが大事かなと思います。
仕事を辞めることは案外簡単にできますが
再就職先探すのは結構大変です、そして転職先が理想の転職先か
どうかなんてわからないですからね。
なので、不満があるから辞めるのはオススメしません。
自分は昔、なんか違うと思って何度も転職を繰り返してきた事が
ありますが、どこに行ってもやっぱり同じだなと思います。
仕事で嫌なことがあっても仕事は仕事だと思って
自分に任された仕事を淡々とこなすことが良いと思いますよ。

タグ

B01626P712, エンジニア, キャリアアップ・レイオフ対策, ステップアップ, 仕事, 再就職先, 実践ガイド, 我慢, 手順, 最前線, 渡米, 理想, 転職, 転職先, 選択肢, 面接,


リモートワーク=在宅で仕事を取り組んでみて分かったこと。

20181021

Logging


リモートワークに取り組んでみて
非常にやりづらいということ、いまの仕事の体制ではリモートワークという形態は仕事がはけない、特に意思疎通に無駄に時間を割くことになり時間の無駄だと感じた。
電話を使わないは自分は賛成で、やはり記録に残るものでないと何かあったときにトラブルになりやすいから記録に残るものが大事という考え。
●リモートワークの必須ツールは?
リモートワークという仕事の場合はスカイプが必須、もしくはスカイプに変わる音声ツールは必須だと感じた。
あとはチャット系ツールも必須。
●リモートワークの問題点
リモートワークというのは孤立感が非常に感じるのものです、職場との温度差が非常に感じやすいという事。
特に自宅でいきなりリモートワークを始めると近所からは仕事をやめたのかなという事にもなりメンタル的によく感じない。
やるなら外で仕事をすることがオススメ。
ちなみにリモートワークを次に指令を受けた場合、自分は来年あたりに仕事を辞めるかを考え中です。
辞めて次は何をするかというのは、まだ未定だけど辞めて一年間の間にIT系の仕事に就けなかったら、
仕方なく【ひとり起業する】という選択をする可能性がある。
●【ひとり起業】から【企業】へ
たぶん、ひとりで起業して軌道に乗せるまでたぶん人脈もコミュ力もないので、数年はかかるだろうと思うが
仕方なく起業するひとは、意欲的なひとより成功しやすいらしい。
何故かなのかは知らないけどそういう統計がある。

さて、現在はどうなったでしょうか@2021.07.11の君へ、リモートワークで働くじゃないの?

追記:会社のリモートワーク体制が整っていなかっただけだった、他の会社でリモートワークしてみてリモートワークの方が向いているなと感じました。

タグ

あと, いま, おすすめ, こと, スカイプ, チャット, ツール, とき, トラブル, メンタル, もの, リモート, ワーク, , 仕事, 体制, 問題点, 在宅, 場合, , 大事, 孤立感, 形態, 必須, 意思, 指令, 時間, 来年, 温度差, 無駄, 疎通, 職場, 自分, 自宅, 記録, 賛成, 近所, 電話, 音声,