FF14をプレイしています。土日祝の朝頃から

2021.03.28

Logging

先日からFF14をプレイしています、まだFF14の中でもソロです、ヘルプしてくれる人もいないのでレベル1のモンスターを狩ってレベル上げをしています。キャラ名はSakurai zinと名前付けしてサーバーはMANAHadesで活動中です。

フリープレイですが30日間の体験が終わってもゲーム(ファイナルファンタジー14)を遊びます。でもやっぱソロはあまり面白くないのでヘルプしてくれる人がいれば、声掛けて欲しいです?。リアル友はあまりゲームしない人が多いので告知した次第です。以前もFF14プレイしていたのですがいつの間にか辞めてしまいましたが、誰か仲間が入れば続けていけるかと思います。なのでよろしくです。本当はリアルの知っている人とプレイしたいのですけどね?。

因みにここらへんで狩りをしたり座り込んだりしています。座っているときは他の作業をしている時です。声をかけてくれても返答できないかもですが後から声掛けします。まだフリープレイなのでモーグリの機能などは使用できません。なお、レベル10になれば狩るところが変わっていくと思います。

追記:倦怠感があるときは休んでます。

タグ

, 14, 30, FF, Hades, MANA, Sakurai, zin, キャラ, ゲーム, ここら, サーバー, ソロ, とき, ファイナルファンタジー, フリー, プレイ, ヘルプ, べん, モンスター, リアル, レベル, , , , 以前, 仲間, 体験, 作業, 先日, , 名前, 告知, 土日, , 声掛け, , , , 本当, 次第, 活動, , 誰か, 返答,

広告を挿入される無料レンタルサーバーの仕組み。

2021.03.19

Logging

タイトル通り、広告を挿入される無料レンタルサーバーの仕組みはこれだけだと思います。ApacheでWEBサーバーを構築することで可能だということを知っているのですが、nginxではどうかはまだ調査中です。広告をどのタイミングで入れ込んでいるかというと表示する間際でApacheのモジュール、mod_layoutを使用して広告を差し込んでいるだと思います。

差し込み方法はこんな感じです。

AddOutputFilter LAYOUT html htm cgi php
LayoutHeader /header.html
LayoutFooter /footer.html

こうすることで、サーバーの配下に広告を差し込んでいるだと思います。LayoutHeaderやLayoutFooterがどのような役割をしているかはググると解説サイトがありますのでそちらを参照ください。あと、このモジュールの入れ方を解説しているサイトがありましたので紹介します。

Apache2.4.6にmod_layoutを導入する >>https://qiita.com/mr_wednesday/items/8b799aacf41447c004e7

タグ

AddOutputFilter, Apache, cgi, footer, header, htm, html, layout, LayoutFooter, LayoutHeader, mod, nginx, php, web, こと, これだけ, サーバー, サイト, そちら, タイトル, タイミング, モジュール, レンタル, 使用, 入れ方, 参照, 可能, 広告, 役割, 感じ, 挿入, 方法, 構築, 無料, 表示, 解説, 調査, 配下, 間際,

ざわざわ[騒騒]と表現。

2021.03.07

Logging

初日にエヴァンゲリオンを見に行くことはないだろうなと今日、確信した。学生さんは休みだからか、初日の朝なのに結構な人が予約されていて映画館、エヴァヲタでいっぱいな気がします。なので、自分はその次の日にでも観に行けたら観に行きます。残念ながら失業中ですが貯蓄預金はまぁまぁあります。未だに実家暮らしなので、家賃や食費代がないのであとは、年金とサーバー代やドメイン代と何やらで月に2?3万円飛びますが、一応生きていけます。まぁこれでは駄目人間なるので仕事先を探しています。自分でお金を稼ぐというのは簡単ではないですよね。

フリーランスで働いている人がこれから増えていくのかもしれませんが、正直なところ、雇われて働く方がどんなに楽なことなのか。因みにITエンジニアが流行っていますが辞めておいた方が良い。この先、AIの技術が進み殆どのことはAIが出来るようになります。いずれプログラムコードも殆どが自動生成で生み出されるでしょう。なので生き残れるのはAIを開発できるエンジニアだけだと思います。あとはあまりいらないと思いますよ。

『シン・エヴァンゲリオン劇場版』本予告・改2【公式】

トイウコトデ。
逃げちゃ駄目だより・・・一体何が言いたかったんだろ。

タグ

2, , AI, IT, いっぱい, エヴァ, エヴァンゲリオン, エンジニア, お金, コード, こと, これ, サーバー, ところ, ドメイン, フリー, プログラム, ランス, ヲタ, , 予約, , 人間, 今日, 仕事, 休み, , 初日, 失業, 学生, 実家, 家賃, 年金, 技術, , , 映画館, , , , 正直, 殆ど, 残念, , 確信, 簡単, 結構, 自分, 自動生成, 表現, , 貯蓄, 開発, 預金, 食費, 駄目,

全国各地のダム貯水率を可視化してみた。

2021.03.02

Logging

全国各地のダム貯水率を可視化してみた。以前、高知県のダムの貯水率を可視化した事を記事にしたのですが、意外にもある一部の人達に好評なので全国のダムファンのために、全国各地のダム貯水率を可視化してみましたよ。あまり好評だったら、取得してきているサーバーに負荷がかかるため、中止します。

なお、どこから取集してきているかというとダムの貯水状況 – 国土交通省からです、正直なところcsvデータ化して頂きたいなと思う人もいるのではないでしょうか?

追記 2021:この頃、ブロックされて私のHPから拾えなくなりました・・・。もしくはHTMLの構造が変わった可能性があります。

	[
		{
			"ken": "北海道道北", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0102/ipDamGaikyo_pc0102_pg1_fw0.html",
				"dam_name": ["愛別ダム", "西岡ダム", "有明ダム", "小平ダム", "岩尾内ダム", "サンルダム", "留萌ダム", "大雪ダム", "金山ダム", "忠別ダム"]
			}
		},
		{
			"ken": "北海道道東", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0103/ipDamGaikyo_pc0103_pg1_fw0.html",
				"dam_name": ["佐幌ダム", "庶路ダム", "鹿ノ子ダム", "十勝ダム", "屈足ダム", "札内川ダム", "糠平ダム", "元小屋ダム", "活込ダム", "仙美里ダム"]
			}
		},
		{
			"ken": "北海道道央", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0104/ipDamGaikyo_pc0104_pg1_fw0.html",
				"dam_name": ["美唄ダム", "栗山ダム", "徳富ダム", "当別ダム", "朝里ダム", "豊平峡ダム", "夕張シューパロダム", "滝里ダム", "漁川ダム", "定山渓ダム", "桂沢ダム", "芦別ダム"]
			}
		},
		{
			"ken": "北海道道南", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0105/ipDamGaikyo_pc0105_pg1_fw0.html",
				"dam_name": ["新中野ダム", "矢別ダム", "上ノ国ダム", "高見ダム", "様似ダム", "浦河ダム", "美利河ダム", "二風谷ダム", "厚幌ダム"]
			}
		},
		{
			"ken": "青森県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0201/ipDamGaikyo_pc0201_pg1_fw0.html",
				"dam_name": ["津軽ダム", "遠部ダム", "飯詰ダム", "浅瀬石川ダム", "久吉ダム", "相馬ダム(利水)", "世増ダム", "下湯ダム", "小泊ダム", "浅虫ダム", "清水目ダム(利水)", "川内ダム"]
			}
		},
		{
			"ken": "岩手県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0301/ipDamGaikyo_pc0301_pg1_fw0.html",
				"dam_name": ["四十四田ダム", "胆沢ダム", "早池峰ダム", "御所ダム", "綱取ダム", "入畑ダム", "湯田ダム", "遠野ダム", "遠野第二ダム", "田瀬ダム", "滝ダム", "鷹生ダム", "日向ダム", "綾里川ダム"]
			}
		},
		{
			"ken": "宮城県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0401/ipDamGaikyo_pc0401_pg1_fw0.html",
				"dam_name": ["鳴子ダム", "花山ダム", "長沼ダム", "上大沢ダム", "化女沼ダム", "小田ダム", "荒砥沢ダム", "栗駒ダム(利水)", "漆沢ダム", "宮床ダム", "南川ダム", "樽水ダム", "釜房ダム", "大倉ダム", "七ケ宿ダム", "七北田ダム", "惣の関ダム", "払川ダム"]
			}
		},
		{
			"ken": "秋田県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0501/ipDamGaikyo_pc0501_pg1_fw0.html",
				"dam_name": ["早口ダム", "山瀬ダム", "素波里ダム", "萩形ダム", "森吉ダム", "森吉山ダム", "砂子沢ダム", "旭川ダム", "鎧畑ダム", "玉川ダム", "皆瀬ダム", "板戸ダム", "岩見ダム", "大松川ダム", "協和ダム", "大内ダム"]
			}
		},
		{
			"ken": "山形県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0601/ipDamGaikyo_pc0601_pg1_fw0.html",
				"dam_name": ["長井ダム", "高坂ダム", "白水川ダム", "寒河江ダム", "木地山ダム", "田沢川ダム", "最上小国川流水型ダム", "留山川ダム", "蔵王ダム", "前川ダム", "神室ダム", "綱木川ダム", "白川ダム", "荒沢ダム", "月山ダム", "月光川ダム", "温海川ダム", "横川ダム"]
			}
		},
		{
			"ken": "福島県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0701/ipDamGaikyo_pc0701_pg1_fw0.html",
				"dam_name": ["摺上川ダム", "三春ダム", "堀川ダム", "真野ダム", "木戸ダム", "小玉ダム", "こまちダム", "高柴ダム", "四時ダム", "大川ダム", "新郷ダム(利水・東北電力)", "山郷ダム(利水・東北電力)", "上野尻ダム(利水・東北電力)", "片門ダム(利水・東北電力)", "奥只見ダム(利水・電源開発)", "田子倉ダム(利水・電源開発)", "本名ダム(利水・東北電力)", "滝ダム(利水・電源開発)", "大鳥ダム(利水・電源開発)", "上田ダム(利水・東北電力)", "宮下ダム(利水・東北電力)", "柳津ダム(利水・東北電力)", "只見ダム(電源開発)", "日中ダム", "東山ダム", "田島ダム"]
			}
		},
		{
			"ken": "栃木県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/0901/ipDamGaikyo_pc0901_pg1_fw0.html",
				"dam_name": ["塩原ダム", "寺山ダム", "西荒川ダム", "東荒川ダム", "川俣ダム", "川治ダム", "三河沢ダム", "中禅寺ダム", "五十里ダム", "湯西川ダム", "松田川ダム"]
			}
		},
		{
			"ken": "群馬県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1001/ipDamGaikyo_pc1001_pg1_fw0.html",
				"dam_name": ["四万川ダム", "矢木沢ダム", "藤原ダム", "草木ダム", "八ッ場ダム", "薗原ダム", "相俣ダム", "奈良俣ダム", "桐生川ダム", "塩沢ダム", "道平川ダム", "大仁田ダム", "坂本ダム", "霧積ダム"]
			}
		},
		{
			"ken": "埼玉県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1101/ipDamGaikyo_pc1101_pg1_fw0.html",
				"dam_name": ["渡良瀬遊水地", "下久保ダム", "二瀬ダム", "荒川第一調節池", "浦山ダム", "滝沢ダム", "有間ダム", "合角ダム"]
			}
		},
		{
			"ken": "千葉県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1201/ipDamGaikyo_pc1201_pg1_fw0.html",
				"dam_name": ["亀山ダム", "片倉ダム", "高滝ダム", "矢那川ダム"]
			}
		},
		{
			"ken": "神奈川県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1401/ipDamGaikyo_pc1401_pg1_fw0.html",
				"dam_name": ["城山ダム", "宮ヶ瀬ダム", "宮ヶ瀬副ダム", "三保ダム"]
			}
		},
		{
			"ken": "新潟県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1501/ipDamGaikyo_pc1501_pg1_fw0.html",
				"dam_name": ["大石ダム", "揚川ダム(利水・東北電力)", "豊実ダム(利水・東北電力)", "鹿瀬ダム(利水・東北電力)", "早出川ダム", "下条川ダム", "刈谷田川ダム", "笠堀ダム", "城川ダム", "破間川ダム", "広神ダム", "三国川ダム", "正善寺ダム", "三面ダム", "奥三面ダム", "胎内川ダム", "奥胎内ダム", "内の倉ダム", "加治川治水ダム", "鯖石川ダム", "久知川ダム", "新保川ダム", "大野川ダム", "柿崎川ダム", "大谷ダム"]
			}
		},
		{
			"ken": "富山県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1601/ipDamGaikyo_pc1601_pg1_fw0.html",
				"dam_name": ["宇奈月ダム", "室牧ダム", "熊野川ダム", "久婦須川ダム", "和田川ダム", "利賀川ダム", "境川ダム", "刀利ダム", "子撫川ダム", "城端ダム", "臼中ダム", "朝日小川ダム", "角川ダム", "上市川ダム", "上市川第2ダム", "白岩川ダム", "舟川ダム", "布施川ダム", "大谷ダム"]
			}
		},
		{
			"ken": "石川県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1701/ipDamGaikyo_pc1701_pg1_fw0.html",
				"dam_name": ["手取川ダム", "赤瀬ダム", "犀川ダム", "辰巳ダム", "内川ダム", "新内川ダム", "我谷ダム", "九谷ダム", "小屋ダム", "八ヶ川ダム"]
			}
		},
		{
			"ken": "長野県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2001/ipDamGaikyo_pc2001_pg1_fw0.html",
				"dam_name": ["浅川ダム", "大町ダム", "松川ダム", "片桐ダム", "小渋ダム", "美和ダム", "高遠ダム", "横川ダム", "味噌川ダム", "牧尾ダム(利水)"]
			}
		},
		{
			"ken": "岐阜県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2101/ipDamGaikyo_pc2101_pg1_fw0.html",
				"dam_name": ["丹生川ダム", "御母衣ダム(利水)", "小里川ダム", "丸山ダム", "中野方ダム", "阿木川ダム", "岩屋ダム", "大ヶ洞ダム", "横山ダム", "徳山ダム", "阿多岐ダム", "岩村ダム", "打上ダム(利水)"]
			}
		},
		{
			"ken": "静岡県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2201/ipDamGaikyo_pc2201_pg1_fw0.html",
				"dam_name": ["長島ダム", "佐久間ダム", "秋葉ダム", "船明ダム", "太田川ダム", "奥野ダム", "青野大師ダム"]
			}
		},
		{
			"ken": "愛知県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2301/ipDamGaikyo_pc2301_pg1_fw0.html",
				"dam_name": ["新豊根ダム", "宇連ダム", "矢作ダム", "木曽川大堰(利水)"]
			}
		},
		{
			"ken": "三重県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2401/ipDamGaikyo_pc2401_pg1_fw0.html",
				"dam_name": ["君ヶ野ダム", "蓮ダム", "宮川ダム", "三瀬谷ダム(発電)", "安濃ダム(利水)", "比奈知ダム(機構)", "滝川ダム", "青蓮寺ダム(機構)", "小森ダム(電発)"]
			}
		},
		{
			"ken": "福井県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/1801/ipDamGaikyo_pc1801_pg1_fw0.html",
				"dam_name": ["九頭竜ダム", "龍ヶ鼻ダム", "広野ダム", "二ツ屋分水堰", "永平寺ダム", "浄土寺川ダム", "浄土寺川ダム(貯砂ダム)", "笹生川ダム", "真名川ダム", "雲川ダム(利水)", "桝谷ダム", "河内川ダム", "大津呂ダム"]
			}
		},
		{
			"ken": "滋賀県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2501/ipDamGaikyo_pc2501_pg1_fw0.html",
				"dam_name": ["青土ダム", "日野川ダム", "永源寺ダム(利水)", "宇曽川ダム", "姉川ダム", "余呉湖", "石田川ダム", "天川ダム"]
			}
		},
		{
			"ken": "京都府", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2601/ipDamGaikyo_pc2601_pg1_fw0.html",
				"dam_name": ["和知ダム(利水)", "大野ダム", "日吉ダム(機構)", "天ヶ瀬ダム", "高山ダム(機構)", "畑川ダム"]
			}
		},
		{
			"ken": "大阪府", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2701/ipDamGaikyo_pc2701_pg1_fw0.html",
				"dam_name": ["箕面川ダム", "狭山池ダム", "滝畑ダム(利水)"]
			}
		},
		{
			"ken": "兵庫県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2801/ipDamGaikyo_pc2801_pg1_fw0.html",
				"dam_name": ["三宝ダム", "栗柄ダム", "一庫ダム(機構)", "大路ダム", "与布土ダム", "但東ダム", "権現ダム", "平荘ダム", "川代ダム", "大川瀬ダム", "呑吐ダム", "糀屋ダム", "みくまりダム", "安富ダム", "引原ダム", "青野ダム", "生野ダム", "菅生ダム", "安室ダム", "金出地ダム", "長谷ダム", "石井ダム", "天王ダム", "大日ダム", "分水堰", "牛内ダム", "成相ダム", "北富士ダム", "諭鶴羽ダム"]
			}
		},
		{
			"ken": "奈良県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/2901/ipDamGaikyo_pc2901_pg1_fw0.html",
				"dam_name": ["布目ダム(機構)", "室生ダム(機構)", "初瀬ダム", "大門ダム", "天理ダム", "白川ダム", "岩井川ダム", "大滝ダム", "猿谷ダム(利水)", "九尾ダム(利水)", "川迫ダム(利水)", "二津野ダム(電発)", "風屋ダム(電発)", "池原ダム(電発)", "坂本ダム(電発)"]
			}
		},
		{
			"ken": "和歌山県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3001/ipDamGaikyo_pc3001_pg1_fw0.html",
				"dam_name": ["七色ダム(電発)", "二川ダム", "椿山ダム", "七川ダム", "広川ダム", "切目川ダム"]
			}
		},
		{
			"ken": "鳥取県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3101/ipDamGaikyo_pc3101_pg1_fw0.html",
				"dam_name": ["殿ダム", "賀祥ダム", "菅沢ダム"]
			}
		},
		{
			"ken": "島根県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3201/ipDamGaikyo_pc3201_pg1_fw0.html",
				"dam_name": ["尾原ダム", "布部ダム", "山佐ダム", "志津見ダム", "八戸ダム", "大長見ダム", "御部ダム", "三瓶ダム", "浜田ダム", "第二浜田ダム", "益田川ダム", "嵯峨谷ダム", "笹倉ダム", "大峠ダム", "銚子ダム", "美田ダム", "清瀧ダム", "津田川ダム"]
			}
		},
		{
			"ken": "岡山県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3301/ipDamGaikyo_pc3301_pg1_fw0.html",
				"dam_name": ["苫田ダム", "八塔寺川ダム", "津川ダム", "旭川ダム", "湯原ダム", "竹谷ダム", "河平ダム", "鳴滝ダム", "河本ダム", "千屋ダム", "新成羽川ダム", "黒鳥ダム", "三室川ダム", "高瀬川ダム", "楢井ダム"]
			}
		},
		{
			"ken": "広島県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3401/ipDamGaikyo_pc3401_pg1_fw0.html",
				"dam_name": ["土師ダム", "灰塚ダム", "庄原ダム", "三川ダム", "八田原ダム", "野間川ダム", "四川ダム", "御調ダム", "山田川ダム", "温井ダム", "小瀬川ダム", "弥栄ダム", "福富ダム", "椋梨ダム", "魚切ダム", "梶毛ダム", "野呂川ダム", "仁賀ダム"]
			}
		},
		{
			"ken": "山口県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3501/ipDamGaikyo_pc3501_pg1_fw0.html",
				"dam_name": ["小瀬川ダム", "佐波川ダム", "島地川ダム", "阿武川ダム", "菅野ダム", "向道ダム", "御庄川ダム", "生見川ダム", "中山川ダム", "荒谷ダム", "一の坂ダム", "厚東川ダム", "木屋川ダム", "湯免ダム", "黒杭川ダム", "川上ダム", "末武川ダム", "今富ダム", "大坊ダム", "見島ダム", "屋代ダム", "真締川ダム"]
			}
		},
		{
			"ken": "徳島県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3601/ipDamGaikyo_pc3601_pg1_fw0.html",
				"dam_name": ["池田ダム(機構)", "宮川内ダム", "川口ダム(利水)", "長安口ダム", "正木ダム", "福井ダム"]
			}
		},
		{
			"ken": "香川県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3701/ipDamGaikyo_pc3701_pg1_fw0.html",
				"dam_name": ["内場ダム", "五名ダム", "大川ダム", "前山ダム", "長柄ダム", "府中ダム(利水)", "吉田ダム", "門入ダム", "五郷ダム", "粟井ダム", "粟地ダム", "殿川ダム", "千足ダム", "大内ダム", "田万ダム", "内海ダム"]
			}
		},
		{
			"ken": "愛媛県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3801/ipDamGaikyo_pc3801_pg1_fw0.html",
				"dam_name": ["柳瀬ダム", "新宮ダム(機構)", "富郷ダム(機構)", "銅山川ダム群", "石手川ダム", "野村ダム", "鹿野川ダム", "黒瀬ダム", "鹿森ダム", "玉川ダム", "台ダム", "須賀川ダム", "山財ダム"]
			}
		},
		{
			"ken": "高知県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/3901/ipDamGaikyo_pc3901_pg1_fw0.html",
				"dam_name": ["早明浦ダム(機構)", "永瀬ダム", "大渡ダム", "桐見ダム", "中筋川ダム", "横瀬川ダム", "鏡ダム", "坂本ダム", "鎌井谷ダム", "以布利川ダム"]
			}
		},
		{
			"ken": "福岡県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4001/ipDamGaikyo_pc4001_pg1_fw0.html",
				"dam_name": ["犬鳴ダム", "力丸ダム", "福智山ダム", "陣屋ダム", "藤波ダム", "江川ダム", "小石原川ダム", "山神ダム", "寺内ダム", "日向神ダム", "油木ダム", "北谷ダム", "ます渕ダム", "鳴淵ダム", "南畑ダム", "瑞梅寺ダム", "猪野ダム", "牛頸ダム"]
			}
		},
		{
			"ken": "佐賀県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4101/ipDamGaikyo_pc4101_pg1_fw0.html",
				"dam_name": ["平木場ダム", "厳木ダム", "本部ダム", "狩立・日ノ峯ダム", "伊岐佐ダム", "井手口ダム", "矢筈ダム", "嘉瀬川ダム", "都川内ダム", "有田ダム", "竜門ダム", "深浦ダム", "岩屋川内ダム", "横竹ダム", "中木庭ダム"]
			}
		},
		{
			"ken": "熊本県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4301/ipDamGaikyo_pc4301_pg1_fw0.html",
				"dam_name": ["下筌ダム", "竜門ダム", "緑川ダム", "市房ダム", "石打ダム", "氷川ダム", "上津浦ダム", "亀川ダム", "路木ダム"]
			}
		},
		{
			"ken": "大分県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4401/ipDamGaikyo_pc4401_pg1_fw0.html",
				"dam_name": ["耶馬溪ダム", "松原ダム", "大山ダム", "ななせダム", "野津ダム", "稲葉ダム", "黒沢ダム", "床木ダム", "安岐ダム", "行入ダム", "青江ダム"]
			}
		},
		{
			"ken": "宮崎県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4501/ipDamGaikyo_pc4501_pg1_fw0.html",
				"dam_name": ["祝子ダム", "松尾ダム", "渡川ダム", "綾南ダム", "瓜田ダム", "岩瀬ダム", "綾北ダム", "田代八重ダム", "立花ダム", "長谷(補助)ダム", "広渡ダム", "日南ダム", "沖田ダム"]
			}
		},
		{
			"ken": "鹿児島県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4601/ipDamGaikyo_pc4601_pg1_fw0.html",
				"dam_name": ["鶴田ダム", "川辺ダム", "西之谷ダム", "大和ダム"]
			}
		},
		{
			"ken": "沖縄県", "Children": {
				"url": "https://www.river.go.jp/kawabou/html/list/7/4701/ipDamGaikyo_pc4701_pg1_fw0.html",
				"dam_name": ["福地ダム", "新川ダム", "安波ダム", "普久川ダム", "辺野喜ダム", "漢那ダム", "羽地ダム", "倉敷ダム", "金武ダム", "座間味ダム", "金城ダム", "我喜屋ダム", "大保ダム", "儀間ダム"]
			}
		}
	]

タグ

2021, Children, CSV, go, HP, html, https, jp, kawabou, ken, lis, quot, river, url, www, サーバー, ダム, ため, データ, どこ, ところ, ファン, ブロック, 一部, 中止, , , 以前, 全国, 北海道, , 取得, 可能性, 可視, 各地, 国土交通省, 好評, 構造, 正直, 状況, , 記事, 負荷, 貯水, 追記, 道北, , 高知県,

外部VPSサーバーからさくらレンタルサーバーのDBに接続する方法。

2020.12.04

Logging

外部VPSサーバーからさくらレンタルサーバーのDB(データベース)に接続する方法は下記のコードだけでは上手く動かない。だけど、tmpファイルを生成時にパーティションにu+xの権限を与えればこのコードは要件をみたします。因みにプロセスが残ったままになるので接続が終わったら、プロセスを削除してあげてください。なのでどのプロセスを削除する機能として追加しないと使えないかな?、時間があれば完成したコードをアップします。

なお、変数の初期値はご自身で入れてください。あとポート開放expectが入っていない場合はyumなどでインストールする必要もあります。

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<meta name="Description" content="Enter your description here" />
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.min.css">
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css">
	<link rel="stylesheet" href="assets/css/style.css">
	<title>ssh sqli</title>
</head>

<body>
	<?php
	print ssh_sqli_connect();
	?>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>

</html>
<?php
function ssh_sqli_connect()
{
	global $dblink,$dbname,$sshuser, $sshhost, $sshpassword,$host,$sshport;
	$ret = null;
	$cmd = "#!/usr/bin/expect -f
set timeout 3
expect -c \"spawn ssh -f -N -L $sshport:$host:3306 $sshuser@$sshhost -oStrictHostKeyChecking=no
expect \\\"$sshuser@$sshhost's password:\\\"
send \\\"$sshpassword\\n\\\"
\"
";

	$tmpfname = tempnam(sys_get_temp_dir(), 'ssh');

	$handle = fopen($tmpfname, "w");
	fwrite($handle, $cmd);
   	shell_exec("sh $tmpfname");
	sleep(3);
	$dblink = db_connect();
	try{
		for($id = 1 ;$id<=99;$id++){
			$ret = $dblink->query("SELECT * FROM $dbname.X.xtbl where $dbname.X.xtbl.id=$id;");
			if ($cnt = (int) mysqli_num_rows($ret)) {
			  $row = mysqli_fetch_assoc($ret);
			  print ($row["id"].", ".$row["name"]);
			}
		}
	}catch(PDOException $e){
		echo "失敗: " . $e->getMessage() . "\n";
	}

	fclose($handle);
	unlink($tmpfname);

	db_close();
	return "未完成";
}

function db_connect()
{
	global $dblink, $host, $user, $password, $dbname,$sshport;
	try {
		$dblink = new  mysqli("127.0.0.1", "$user", $password, $dbname ,$sshport);
		//$dblink->set_charset("utf8");
		return $dblink;
	} catch (PDOException $e) {
		echo "接続失敗: " . $e->getMessage() . "\n";
	}
}

function db_close()
{
	global $dblink;
	$dblink->close();
}

タグ

8, charset, db, DOCTYPE, en, expect, gt, head, html, lang, lt, meta, name, quot, tmp, UTF-, vie, VPS, yum, アップ, インストール, コード, ご自身, サーバー, さくら, データベース, パーティション, ファイル, プロセス, ポート, まま, レンタル, 下記, 初期, 削除, 場合, 変数, 外部, 完成, 必要, 接続, 方法, 時間, 権限, 機能, 生成, 要件, 追加, 開放,

ping送信はエラー吐きまくり。

2020.11.03

Logging

FC2ブログ http://ping.fc2.com
Technorati JAPAN	http://rpc.technorati.jp/rpc/ping
NAMAAN	http://ping.namaan.net/rpc/
Blog People	http://www.blogpeople.net/servlet/weblogUpdates
BulkFeed	http://bulkfeeds.net/rpc
gooブログ	http://blog.goo.ne.jp/XMLRPC
MyBlog Japan	http://ping.myblog.jp
ココログ	http://ping.cocolog-nifty.com/xmlrpc
ブログ村 Pingサーバー広場	http://ping.blogmura.jp/rpc/
Amagle ping service	http://ping.amagle.com/
ブログスタイル	http://blogstyle.jp/xmlrpc/
JUGEM	http://jugem.jp/?mode=NEWENTRY
bolgoon	http://www.blogoon.net/ping/
人気blogランキング	http://blog.with2.net/ping.php/
ドリコム	http://ping.rss.drecom.jp
エキサイトブログ	http://ping.exblog.jp/xmlrpc
yahoo.com	http://api.my.yahoo.com/RPC2
PING.BLOGGERS.JP	http://ping.bloggers.jp/rpc/

上記のようなping一覧が在るけれど、実際機能していないものが多い。ping送信はもう時代遅れになりつつ在るのかもしれない。そんな時代遅れになりつつ存在なので、自分でping先をいちいち管理するのは、ナンセンスだと思いこの度、pingoo!(https://pingoo.jp/)というサービスのフリープランを使いだしました。因みにスパム屋さんなど、いろいろな方々が登録されているサービスなのでそれを覚悟でお試しください。

それとは別にping送信をコマンドラインから送信するPHPプログラムを作りました。自分が運用しているよさこい動画検索サイトに入れ込んでいます。ソースコードとコマンドは下記になります。

php ping.php ping
<?php

if ($argv[1]=="ping") {
	$nglist = [];
	$server = array(
		"http://ping.fc2.com",//FC2ブログ
		"http://pingoo.jp/ping/",//pingoo.jp
	);

	$site_name = "よさこい動画検索";

	$url_parameter = explode("\n", file_get_contents("../data.csv"));

	for ($i = 0; $i < count($server); $i++) {

		foreach ($url_parameter as $key => $val) {
			$parameter = explode(",", $val);
			$parameter[0] = trim($parameter[0]);
			$parameter[1] = trim($parameter[1]);
			$site_url = "https://yosakoi-video.com/?id={$parameter[0]}&q=" . urlencode($parameter[1]);
			$dev = $content = '<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param><value>' . $site_name . '</value></param>
<param><value>' . $site_url . '</value></param>
</params>
</methodCall>
';

			$options = array('http' => array(
				'method' => 'POST',
				'header' => 'Content-type: text/xml' . "\r\n"
					. 'Content-length: ' . strlen($content),
				'content' => $content
			));
			$context = stream_context_create($options);

			$ret = @file_get_contents($server[$i], false, $context);
			var_dump($server[$i]);
			var_dump($parameter[0]);
			//var_dump($ret);
		}
	}
}

タグ

2, Amagle, blog, BLOGGERS, bolgoon, BulkFeed, cocolog-nifty, com, fc, goo, http, https, JAPAN, jp, JUGEM, MyBlog, NAMAAN, People, ping, pingoo, service, Technorati, xmlrpc, Yahoo, いろいろ, エキサイト, エラー, ココログ, サーバー, サービス, スタイル, スパム, ドリコム, ナンセンス, プラン, フリー, ブログ, ブログ村, もの, ランキング, 一覧, 上記, 人気, , 存在, 実際, 広場, , 方々, 時代遅れ, 機能, 登録, 管理, 自分, 送信,

WordPressの公式ウィジェットカレンダー末日がズレている?ので直した。

2020.11.02

Logging

WordPressの公式ウィジェットカレンダー末日がズレている?ので直した。直した箇所はこちら変数名に$ooooと書いている部分が今回修正した箇所です。修正したファイルはWordPressのインクルードフォルダにある。ジェネラルテンプレートぴーえぃちーぴー(general-template.php)

wp-includes\general-template.php 

このファイルを直しました。コアファイルなので次期UPDATEで修正されるかとは思いますが、それまではこちらの修正でなんとかなるさ?!

因みに何故、$ooooにしたのかは、お???の???という土佐弁からです。ファイルの中にget_calendar(げっとカレンダー)という関数があるのでそちらを修正しています。原因は下記です。
gmdateというものを使用している所をローカルサーバーの時間で対応しました、さくらレンタルサーバーのタイムゾーンは日本時間を指しています。若干の誤差はあるけれど酷い誤差ではないのでdateで大丈夫そうです。

要は日付の末日が正確に取れていないことが原因みたいです?
はやく修正してくれることを願っています。

function get_calendar( $initial = true, $echo = true ) {
	global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;

	$key   = md5( $m . $monthnum . $year );
	$cache = wp_cache_get( 'get_calendar', 'calendar' );

	if ( $cache && is_array( $cache ) && isset( $cache[ $key ] ) ) {
		/** This filter is documented in wp-includes/general-template.php */
		$output = apply_filters( 'get_calendar', $cache[ $key ] );

		if ( $echo ) {
			echo $output;
			return;
		}

		return $output;
	}

	if ( ! is_array( $cache ) ) {
		$cache = array();
	}

	// Quick check. If we have no posts at all, abort!
	if ( ! $posts ) {
		$gotsome = $wpdb->get_var( "SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1" );
		if ( ! $gotsome ) {
			$cache[ $key ] = '';
			wp_cache_set( 'get_calendar', $cache, 'calendar' );
			return;
		}
	}

	if ( isset( $_GET['w'] ) ) {
		$w = (int) $_GET['w'];
	}
	// week_begins = 0 stands for Sunday.
	$week_begins = (int) get_option( 'start_of_week' );

	// Let's figure out when we are.
	if ( ! empty( $monthnum ) && ! empty( $year ) ) {
		$thismonth = zeroise( intval( $monthnum ), 2 );
		$thisyear  = (int) $year;
	} elseif ( ! empty( $w ) ) {
		// We need to get the month from MySQL.
		$thisyear = (int) substr( $m, 0, 4 );
		// It seems MySQL's weeks disagree with PHP's.
		$d         = ( ( $w - 1 ) * 7 ) + 6;
		$thismonth = $wpdb->get_var( "SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')" );
	} elseif ( ! empty( $m ) ) {
		$thisyear = (int) substr( $m, 0, 4 );
		if ( strlen( $m ) < 6 ) {
			$thismonth = '01';
		} else {
			$thismonth = zeroise( (int) substr( $m, 4, 2 ), 2 );
		}
	} else {
		$thisyear  = current_time( 'Y' );
		$thismonth = current_time( 'm' );
	}

	$unixmonth = mktime( 0, 0, 0, $thismonth, 1, $thisyear );
	$last_day  = gmdate( 't', $unixmonth );
	$oooothisyear  = date( 'Y', $unixmonth  );
	$oooolast_day  = date( 't', $unixmonth );
	$oooothismonth = date( 'm' , $unixmonth);

	// Get the next and previous month and year with at least one post.
	$previous = $wpdb->get_row(
		"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
		FROM $wpdb->posts
		WHERE post_date < '$thisyear-$thismonth-01'
		AND post_type = 'post' AND post_status = 'publish'
			ORDER BY post_date DESC
			LIMIT 1"
	);
	$next     = $wpdb->get_row(
		"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
		FROM $wpdb->posts
		WHERE post_date > '$oooothisyear-$oooothismonth-{$oooolast_day} 23:59:59'
		AND post_type = 'post' AND post_status = 'publish'
			ORDER BY post_date ASC
			LIMIT 1"
	);

	/* translators: Calendar caption: 1: Month name, 2: 4-digit year. */
	$calendar_caption = _x( '%1$s %2$s', 'calendar caption' );
	$calendar_output  = '<table id="wp-calendar" class="wp-calendar-table">
	<caption>' . sprintf(
		$calendar_caption,
		$wp_locale->get_month( $thismonth ),
		gmdate( 'Y', $unixmonth )
	) . '</caption>
	<thead>
	<tr>';

	$myweek = array();

	for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) {
		$myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 );
	}

	foreach ( $myweek as $wd ) {
		$day_name         = $initial ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd );
		$wd               = esc_attr( $wd );
		$calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$day_name</th>";
	}

	$calendar_output .= '
	</tr>
	</thead>
	<tbody>
	<tr>';

	$daywithpost = array();

	// Get days with posts.
	$dayswithposts = $wpdb->get_results(
		"SELECT DISTINCT DAYOFMONTH(post_date)
		FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
		AND post_type = 'post' AND post_status = 'publish'
		AND post_date <= '{$oooothisyear}-{$oooothismonth}-{$oooolast_day} 23:59:59'",
		ARRAY_N
	);

	if ( $dayswithposts ) {
		foreach ( (array) $dayswithposts as $daywith ) {
			$daywithpost[] = (int) $daywith[0];
		}
	}

	// See how much we should pad in the beginning.
	$pad = calendar_week_mod( gmdate( 'w', $unixmonth ) - $week_begins );
	if ( 0 != $pad ) {
		$calendar_output .= "\n\t\t" . '<td colspan="' . esc_attr( $pad ) . '" class="pad">?</td>';
	}

	$newrow      = false;
	$daysinmonth = (int) gmdate( 't', $unixmonth );
	$oooodaysinmonth = (int) date( 't', $unixmonth );

	for ( $day = 1; $day <= $oooodaysinmonth; ++$day ) {
		if ( isset( $newrow ) && $newrow ) {
			$calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
		}
		$newrow = false;

		if ( current_time( 'j' ) == $day &&
			current_time( 'm' ) == $thismonth &&
			current_time( 'Y' ) == $thisyear ) {
			$calendar_output .= '<td id="today">';
		} else {
			$calendar_output .= '<td>';
		}

		if ( in_array( $day, $daywithpost, true ) ) {
			// Any posts today?
			$date_format = gmdate( _x( 'F j, Y', 'daily archives date format' ), strtotime( "{$thisyear}-{$thismonth}-{$day}" ) );
			/* translators: Post calendar label. %s: Date. */
			$label            = sprintf( __( 'Posts published on %s' ), $date_format );
			$calendar_output .= sprintf(
				'<a href="%s" aria-label="%s">%s</a>',
				get_day_link( $thisyear, $thismonth, $day ),
				esc_attr( $label ),
				$day
			);
		} else {
			$calendar_output .= $day;
		}

		$calendar_output .= '</td>';

		if ( 6 == calendar_week_mod( gmdate( 'w', mktime( 0, 0, 0, $thismonth, $day, $thisyear ) ) - $week_begins ) ) {
			$newrow = true;
		}
	}

	$pad = 7 - calendar_week_mod( gmdate( 'w', mktime( 0, 0, 0, $thismonth, $day, $thisyear ) ) - $week_begins );
	if ( 0 != $pad && 7 != $pad ) {
		$calendar_output .= "\n\t\t" . '<td class="pad" colspan="' . esc_attr( $pad ) . '">?</td>';
	}

	$calendar_output .= "\n\t</tr>\n\t</tbody>";

	$calendar_output .= "\n\t</table>";

	$calendar_output .= '<nav aria-label="' . __( 'Previous and next months' ) . '" class="wp-calendar-nav">';

	if ( $previous ) {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-prev"><a href="' . get_month_link( $previous->year, $previous->month ) . '">? ' .
			$wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) .
		'</a></span>';
	} else {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-prev">?</span>';
	}

	$calendar_output .= "\n\t\t" . '<span class="pad">?</span>';

	if ( $next ) {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-next"><a href="' . get_month_link( $next->year, $next->month ) . '">' .
			$wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) .
		' ?</a></span>';
	} else {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-next">?</span>';
	}

	$calendar_output .= '
	</nav>';

	$cache[ $key ] = $calendar_output;
	wp_cache_set( 'get_calendar', $cache, 'calendar' );

	if ( $echo ) {
		/**
		 * Filters the HTML calendar output.
		 *
		 * @since 3.0.0
		 *
		 * @param string $calendar_output HTML output of the calendar.
		 */
		echo apply_filters( 'get_calendar', $calendar_output );
		return;
	}
	/** This filter is documented in wp-includes/general-template.php */
	return apply_filters( 'get_calendar', $calendar_output );
}

タグ

calendar, general-template, GET, gmdate, oooo, php, UPDATE, WordPress, wp-includes, インクルード, ウィジェット, カレンダー, コア, こちら, サーバー, さくら, ジェネラル, ズレ, そちら, それまで, タイム, テンプレート, ファイル, フォルダ, もの, レンタル, ローカル, 下記, , 今回, 使用, 修正, 公式, 原因, 土佐弁, 変数, 対応, , 時間, 末日, 次期, 箇所, 部分, 関数,

さくらサーバと別会社のサーバを使う場合。

2020.10.21

Logging

さくらサーバでメインドメインを使って、サブドメインを別サーバと紐付けて使用する場合は、ネームサーバで設定せずにAレコードで設定するに限る。この話はドメインをお名前.comなどのドメイン販売をメインで取り扱っている会社の話になると思います。レンタルサーバーでドメイン取得してサブドメインを別サーバで使用する場合もおなじですが、WEBの制作会社などは大体、ドメインをメインとして発売されている会社で取得して、サーバは別会社で取り扱っていることがセオリーなのかなぁ・・・。

何故ってサーバを別会社に移行する場合、サーバとドメインを同じところで取得しているとサーバ移行時に、無駄なお金が発生するからです。ドメインを移管しようものなら、高額なドメイン移管代を支払うハメになったり、サーバ移行したけどドメインはサーバのまま保持しないといけなくなったりして、新サーバ代と旧サーバ代の両方を毎月支払うハメになったりとサーバを移行するのに無駄なお金が発生するので、ドメインとサーバは別々にしていることが多いです。

話を戻して別会社のサーバを扱いたい場合はAレコードで設定してvalueにそれぞれのサーバのIP情報を入力すると良いです。さくらサーバのサーバIP情報はコントロールパネルのサーバ情報に記載されています。その情報をAレコードに入力してあげれば良いです?

タグ

com, web, お金, こと, サーバ, サーバー, さくら, サブ, セオリー, ところ, ドメイン, ネーム, はめ, まま, メイン, もの, レコード, レンタル, 両方, 会社, 何故, 使用, 保持, 別会社, 制作, 取得, 名前, 場合, 大体, 無駄, 発売, 発生, 移管, 移行, , 設定, , 販売, 高額,

text形式に土日は変更。

2020.10.03

Logging

土日は基本テストスタイルに変更しようと思っています。なお、今まで土日はイラストを挿絵としていれておりましたが、サーバー移行の際に画像データがすべて消えてしまったことにより、この際、テキスト形式にしようと思ったので、そのようにすることにしました。なるべく短文にならないように気をつけて記事を書こうかなと思います。

本日はお休みなので『映画、浅田家』を見に行こうかどうか考えています。浅田家のお話、予告を見ると結構感動しそうな気がします。ただ、567の事を考えるとあまりリスクな事をしたくないなという気持ちもあります。映画館って完璧な密室なので・・・。たぶん空調設備も高知県の場合、完璧ではないでしょうからね。そう思うと本当に凄い観たい映画だけ観たほうが良いかなという気持ちがあります。観たい映画は結構な本数があるので…。

映画「浅田家!」予告【2020年10月2日(金)公開】

「あ?どうしよう?」
「浅田家」

タグ

567, Text, イラスト, お休み, お話, こと, サーバー, スタイル, すべて, データ, テキスト, テスト, リスク, 予告, , 土日, 基本, 場合, 変更, 完璧, 密室, 形式, 感動, 挿絵, 映画, 映画館, 本当, 本数, 本日, , 気持ち, 浅田家, 画像, 短文, 移行, 空調, 結構, 記事, 設備, , 高知県,

東証システム障害の考察してみた。#東証システム障害考察

2020.10.02

Logging

7時4分にアラートが上がっていた?が、現場がアラートに気が付かず、後続の処理が流れ売上の前処理バッチ処理が走った時点なのかな。そこでようやく現場がアラートが出ていることに気づく、この時点でベンダーに現場が支持を仰いだのか、マニュアル通りフェイルオーバーしたんだろう。フェイルオーバーさせたけど失敗。メモリリークがおそらく原因でサーバーの切り替えが出来なかった。ここでベンダーに支持を仰いだ可能性もありそう。そしてベンダーがここらへんから介入して監視端末のログなどを調査したら、メモリリークのエラーログを確認したんだと思う。

※失敗したジョブがどこかに格納されるだろう?。フェイルオーバーさせるより後続の処理をストップさせて、ベンダーに支持を仰いだ方が良かったのかもしれないなと。でも現場は混乱していただろう。

メモリーリークが起きていたと思うと実際は前処理バッチ処理をして失敗していたんだろう。遮断して本日の東証での取引は出来ないようにしたのは正解だと思う。

メモリリークの原因は、メモリの物理的破損だったのでメモリが悪いと判断した。メモリエラーが監視端末のログにクリティカルなエラーとして表示されていたのかは不明だけど、おそらく見落としだと思う。

7時時点で相場や売上の前処理を取り込むのなら、何だか整合性がつきそうです。おそらく手動で前処理が走るのではなく全自動で前処理が走るシステムだったんだろう。従業員が端末の監視も7時からだったのかな?

資料が時系列で書かれていないので良く分からないけど、自分なりに東証システム障害を考察してみた。

現場のヒューマンエラーも疑われるけど、末端の従業員は下請け業者何だろうな?。ベンダーは常時、東証システムの現場にいたのか?とかいろいろな事が問われるかもしれないよな。

おそらく本日から正常に東証は取引できると思います。メモリを取っ替えだろうしメモリチェックもしているだろうし。

最後に頑張れ東証システムの現場!!
末端が解雇されないことを切に願う、これで直ぐに切られたら次の職には絶対につけなくなるよ。でも末端が悪いという事ならば数年後、数ヶ月後にはクビになる可能性は高いかもな。

ちなみに上記が昨日のツイートまとめになります。

https://twitter.com/zip358com/status/1311620709412605952

タグ

4, 7, アラート, エラー, オーバー, ここ, ここら, こと, サーバー, システム, ジョブ, ストップ, バッチ, フェイル, べん, ベンダー, マニュアル, メモリ, メモリー, リーク, ログ, 介入, 処理, 前処理, 原因, 取引, 可能性, 失敗, 実際, 後続, 支持, , 時点, 本日, 東証, 格納, , 混乱, 現場, 監視, 確認, 端末, 考察, 調査, 遮断, 障害,

サーバー引っ越して突貫工事。

2020.09.29

Logging

昨日、サーバー引っ越しして突貫工事を行っていました。ことの成り行きを説明するとサーバー移行しようとしてミスってしまった…。画像データのバックアップを取るのを忘れて、サーバーを消しちゃって『あぁ』ってへたってました。数時間、もうこのサイトを消そうかなとか思ったのですが今まで蓄積した、どうしようもないデータ量を無駄にするのは惜しいと思い、数時間後にテキストデータだけさくらレンタルサーバーに移行しました。

今までは別のVPSで動かしていたのですが、なんだかもったいなという気持ちが芽生えてきて元のさくらレンタルサーバーに移行しました。じぶんは結構、サーバーの移行を行います。これは計画的な移行というのはほぼ無くほぼ衝動的なサーバー移行が多いです。なので何の前触れもなくサイトが数時間見えなくなったり、見えづらい状態になったりということが数年間に何回かあります。

本当はもっと良いサーバーを借りたいものですが、収益とサーバー代がとんとんな状態なので、いまは良いサーバーを借りていません。

因みに自分がオススメするレンタルサーバーはXサーバーがしているwpxやかごやサーバーです。wpxは初心者でも簡単にワードプレスが構築できてそれでいて表示も高速です。かごやサーバーは高速化処理などは自分で試行錯誤しなければならないのですが、サービスのなかに回線速度を上げることが出来るオプションがあるので、そちらを使用すると大体のワードプレスは爆速化します。

まぁそんなですが自分はさくらレンタルサーバーでゴニョゴニョするのが好きかな。結構、ゴニョゴニョ細工出来ますよね。

タグ

VPS, いま, こと, これ, , サーバー, サイト, さくら, じぶん, データ, テキスト, とんとん, バックアップ, ミス, レンタル, , 何回か, , , 前触れ, 収益, 工事, 引っ越し, , 昨日, 本当, 気持ち, 無駄, 状態, 画像, 移行, 突貫, 蓄積, 説明,

夜な夜なサーバー移行。

2020.06.27

Logging

夜な夜なサーバー移行。ほぼ徹夜してサーバー移行を行いました。ちょっとは表示速度が早くなったかな?、どうだろうか。よくわからないけど・・・。当分、このサーバーを使用していこうと思います。何故かわからないけどブログが表示されるまで結構な悪戦苦闘をしました?、全部自分でこんなんだったら、立ち上げたほうが良かったかなとか、途中から思い出しました。

因みにまだ完璧に終えたわけではなくて半分ぐらい終わったかなという感じです。正直な所、つらいつらい寝たいと思っています。

タグ

サーバー, ちょっと, ブログ, わけ, 使用, 全部, 半分, 完璧, 徹夜, 悪戦苦闘, 感じ, , 正直, 移行, 結構, 自分, 表示, 途中, 速度,

実はこの頃、何ですよ。

2020.06.17

Logging

実はこのブログの月の収益でサーバー代はまかなえるように
なってきました。そうワンコインぐらいの収益が去年から平均的に
入るようにはなりました。これも皆様のおかげです。
ただ目標金額は高卒の初任給手取り前ぐらいです。なので未だまだ遠い・・。
近い目標は夏目漱石さんです。

ちなみにサーバーはさくらレンタルサーバーのスタンダードプランを
使用しております。はい、とてもリーズナブルなお値段です?。

塵も積もれば山となる、犬も歩けば棒に当たる、記事も積もればググるに当たるという具合に質より量で頑張っているブログです。たまに良いことを書こうと案を練るのですが、モチベーションが続かず継続できません。継続できているのは更新記録です、たまにはその日にリリースせずに何日か溜めてリリースする日もあります。

昨日の昼頃から数のマジックを使用させてもらいます。数のマジックとはアクセスカウンターを設置致しました。リロードを書けるとカウンターが1プラスされます。また非同期通信でカウンターは表示させているので誰かが訪問したらリロードを書けないでもカウントが増えていきます。

追記:リロードを何回もするひとがいるので、対策を行いました。

タグ

, アクセスカウンター, おかげ, カウンター, コイン, こと, これ, サーバー, さくら, スタンダード, たま, プラス, プラン, ブログ, マジック, モチベーション, リーズナブル, リリース, リロード, レンタル, ワン, , 何日, 使用, 値段, 具合, 初任給, 去年, 収益, 同期, , 夏目漱石, , 手取り, , , 昨日, 昼頃, 更新, , , , , 皆様, 目標, 継続, 記事, 記録, 設置, , 通信, , 金額, , 高卒,

ダラダラとLaravel構築してみた解説あり(*´?`*)

2020.06.02

Logging

https://www.youtube.com/watch?v=UdD5oO2f8ko

Laravelをインストール手順を動画にしました。いらない手順が含まられていますが・・・。気にしないでください!!

ちなみに適当な動画は無音ですみません。尚、PHPがタイムアウトしてComposerがインストール出来ない場合はポートの解放が出来ているか、IPv6が有効になっていないかなど調べてくだいね。なお、自分の場合、IPv6が有効になっていてダウンロードが出来ない状態でした(´・ω・`)。

お世話になったサイトはこちらです。こちらの手順通り対応しvirtualBOX、いや仮想環境を再起動してあげてください。そうするとすんなりダウンロード出来ます。それでもダウンロード出来ない場合はアドレスからgetcomposer.orgからダウンロードする手段もありますが、恐らくその後のComposerインストールで躓くはずです。サーバー環境を見直すと良いでしょう。

https://www.server-memo.net/centos-settings/centos7/disable-ipv6.html
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
composer create-project laravel/laravel example-app

最後にLaravelのドキュメントのリンクを貼っときますm
https://laravel.com/docs/8.x/installation

タグ

6, Composer, getcomposer, https, IPv, Laravel, org, php, server-me, virtualBOX, www, アドレス, いね, インストール, お世話, くだ, こちら, サーバー, サイト, タイムアウト, ダウンロード, パス, ポート, 仮想, 再起動, 動画, 場合, 対応, , 手段, 手順, 有効, 構築, , 無音, 状態, 環境, 自分, 解放, 解説, 適当,

テストサーバーを適当に立ち上げる。

2020.06.02

Logging

テストサーバーを適当に立ち上げる方法を録画してみました。
最初の動画はselinux 無効などはしていませんが、それをしないと誤作動というか上手く動かなくなるのでご注意を!!

https://www.youtube.com/watch?v=Rn1ozwXa_eM

ちなみにファイヤーフォールの設定などはググりながらお勉強ください。動画ではそこらへんもググりながら設定しています。あんまりサーバー系のコマンド覚えていないだよね。サーバーの考え方がなんとなく頭に入っている程度です。

ちなみにこれをローカルサーバーじゃなくてVPSでサーバーとして公開するならばWAF(わふ)とかその他、いろいろな設定をすることをオススメします。尚、さくらレンタルサーバーのブログはいいよ!?

https://www.youtube.com/watch?v=TZeRZ7a3Jds

尚、cgi-binでPHPのバージョンを分ける動画は、ちょっと見るだけでは出来ないかもしれませんが・・・ヒントを2、3書いときますね、あとコマンドも例として記載します。

まずcentOS8の最小インストールでPHP7.4系を使う場合は鬼車(おにぐるま)が入っていないので入れなければなりません。そんな具合にインストールしていないものはガンガン入れていこうぜという具合です(*´?`*)

dnf --enablerepo=PowerTools install oniguruma-devel

これを全部入れることができればPHPの違うバージョンでも何とかなりますよ。ちなみにPHP5系とかは下記のようなものを入れるのであって、同じじゃないよ。同じものも有るけれど記述が違うので注意してくださいね。過去のものはググれば結構表示されます。

./configure \
--prefix=/var/www/php-7.4.6  \
--with-config-file-path=/var/www/php-7.4.6 \
--with-config-file-scan-dir=/var/www/php-7.4.6 \
--with-zip \
--enable-gd \
--with-jpeg \
--with-xpm \
--with-zlib \
--with-gettext \
--enable-bcmath \
--enable-sockets \
--enable-opcache \
--enable-exif \
--with-curl \
--with-bz2 \
--enable-calendar \
--enable-inline-optimization \
--with-expat \
--enable-mbstring \
--enable-mbregex \
--with-freetype \
--with-openssl \
--with-mysqli \
--with-pdo-mysql \
--with-mysql-sock=/var/lib/mysql/mysql.sock

最後にcgi-binってインストールしたPHPのphp-cgiを参照しているだけです。シンボリックリンクで!!!

あとは・・・。
Apacheグールプにオリジナルのユーザーを追加してあげて!!。尚、最初の動画はrootで動かしているだけどね。基本的にrootではなくユーザー追加してそれをApacheグールプ追加するのさってヒントも書いときますね。

タグ

2, , 7.4, 8, centOS, cgi-bin, php, selinux, VPS, WAF, いろいろ, インストール, おすすめ, お勉強, こと, コマンド, これ, ご注意, サーバー, さくら, そこら, その他, それ, テスト, バージョン, ヒント, , ファイヤー, フォール, ブログ, べん, レンタル, ローカル, 使, , 公開, 動画, 方法, 最初, 最小, 無効, 程度, 考え方, 記載, 設定, 誤作動, 適当, 録画, ,

ガジェット好きな凄いITエンジニア、drikinさんのYOUTUBEが和む。

2020.01.31

Logging

ガジェット好きな凄いITエンジニア、 drikin (どりきん)さんのYOUTUBEはゆるくて見ていて和む。ガジェット好きの方は見ていてとても楽しいと思います。さくらレンタルサーバーさんの方とかとも帰国したときに絡んでいる?映像とかもあってすごいなぁなんて思います。

【最速開封】これはゲームチェンジャー!Surface Pro Xファーストインプレッション ep781

ガジェット紹介の他にもVlogも結構をアップロードしています、そちらも自分は好き、どちらかと言えば Vlog の方が人間味あふれていて見ていて楽しいなと、これ単なる人間観察的な自分の趣向が入っているだけなのかもしれませんが・・・。仲間とワイワイガヤガヤしているところとか、臨場感があってなんか、自分もその店にいるような感覚になってしまうところなど、上手いなと感じます。

清水さんが語るGalaxy FoldとひらくPCリュックの話 ep795

どりきんさんのYOUTUBEチャンネル登録はこちらから
https://www.youtube.com/user/drikin/featured
drikinのサブ
https://www.youtube.com/channel/UCdx2hgSqR-vh9VD13O71TaQ

これ常識?!iPhoneでホームアプリを整理する画期的な方法! #iPhone #iOS #Tips

タグ

-OY, , com, drikin, IT, iXacO, Vlog, youtube, アップロード, エンジニア, ガジェット, きん, こちら, これ, サーバー, さくら, そちら, チャンネル, とき, ところ, どちらか, どり, レンタル, 人間, 人間味, , 仲間, 帰国, , 感覚, , 映像, 登録, 紹介, 結構, 臨場感, 自分, 趣向,

webpに対応しましたプラグインでカバーしました。 Safariめ!!

2020.01.25

Logging

WebP Express(ウェッピーエクスプレス)というWordPressのプラグインがあるので、そちらでコンバート(変換)すれば良いのですが、大量に画像があるサイトはそれで変換できないので下記の対応方法で対応をお願いします。

1. WebP Express使用してコンバートする際に webpが生成されます。webpの生成場所を確認する。現在は下記の配下にwebp画像が作られています。

/wp-content/webp-express/webp-images/doc-root/wp-content/uploads

2.1の配下にwebpの画像を生成するために下記のコマンドを実行します。自分の場合、アップロードしている画像をリスト化して一括処理するプログラミングを実行しました。尚、cwebpがインストールされていない場合、インストールする必要があります。さくらレンタルサーバーには入っているみたいです。

cwebp -q 90 元画像名(階層を含む).png -o 変換後のファイル名.webp (変換先の階層を含む)

こうすることで画像は全てwebpに変換することが可能ですが、これだけでは表示が切り替わらないので下記の画像を参照しプラグインの設定を変更してください。

ちなみにこのwebp(ウェッピー)はグーグルさんが開発したものらしいです、大体のブラウザが、こちらの webpに対応しているのですがSafariとIEは非推奨みたいなんですよね。何れwebpに対応すると思います…思いたい。

タグ

, 2.1, cwebp, doc-root, Express, Safari, uploads, webp, webp-express, webp-images, WordPress, wp-content, アップロード, インストール, ウェッピーエクスプレス, お願い, カバー, コマンド, コンバート, サーバー, サイト, さくら, そちら, それ, ため, プラグイン, プログラミング, リスト, レンタル, 一括, 下記, 使用, 処理, 場合, 場所, 変換, 大量, 実行, 対応, 必要, 方法, 現在, 生成, 画像, 確認, 自分, 配下, ,

さくらレンタルサーバーでWordPressのDBバックアップを支援するPHPコード

2020.01.10

Logging

さくらレンタルサーバーでWordPressバックアップを支援するPHPコードです。

駆け出しのWEB担当者用のプログラムです、動作環境はPHP5.6以上でお願いします。バックアップする際にWARNINGが発生してしまうには対応しておりません。メールが貯まりますが大丈夫ですよ、きっと。

プログラムを読めば何を書いているのか、駆け出しのWEB担当者様もわかるとは思いますが、変更してほしいのはIDとPASS部分です?。ルートにWordPressをインストールしていない場合は $wploadfile の変更もお願いします。

ファイルをアップロードした階層に dbbackup名でフォルダを設置しそのフォルダにベーシック認証をかけておいてください。外部からダウンロードが容易に出来るので・・・。

上記の設定が完了したらファイルをアップロードし sakura-rental-wpdb-backupfullにアクセスしてください。
ログイン後、管理画面より設定を行った後、さくらレンタルサーバーのコントロールパネルよりCRONの設定を行ってください。

ダウンロードはこちらから
https://zip358.com/tool/sakura-rental-wpdb-backupfull/sakura-rental-wpdb-backupfull.zip

尚、CRON設定に関しては例を管理画面に書いていますのでそちらの参考に設定をお願いいたします、またバックアップは1週間保持します。
月曜日?日曜日まで7ファイルのMYSQL、DBのバックアップファイルが出来上がります。管理画面の曜日設定にチェックが入っていないものはバックアップ致しません。

※ソースコードは下記になります。
※2020年12月、修正しました。ソースコードは下記になります。
※wp-load.phpの階層を自身の階層に変更してください。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css">
<link rel="stylesheet" href="assets/css/style.css">
<title>さくらレンタルサーバーでWordPressのDBバックアップを支援するPHPコード</title>
</head>
<body>
	<div class="container">
		<div class="row">
			<div class="col table-responsive">
					<table class="table" id="tbl">
					</table>
			</div>
		</div>
	</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="./assets/js/common.js?<?=time()?>"></script>
</body>
</html>
window.onload = function () {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "./lib/view.php",
		data: "data",
		success: function (response) {
			if (response.password.ok === "ok") {
				view();
			} else {
				passwordview();
			}
		}
	});
};


function view() {
	let str = "";
	fetch("./schedule.dat").then(response => response.text()).then(data => {
		let weekval = data.split(",");
		let weekname = 
			[
				{en:"Sunday",ja:"日曜日"},
				{en:"Monday",ja:"月曜日"},
				{en:"Tuesday",ja:"火曜日"},
				{en:"Wednesday",ja:"水曜日"},
				{en:"Thursday",ja:"木曜日"},
				{en:"Friday",ja:"金曜日"},
				{en:"Saturday",ja:"土曜日"}
			];
		
		if (weekval.length === 7) {
			for (var i = 0; i < 7; i++) {
				let weekvalflg = weekval[i] == 1 ? " checked " : "";
				str += `
		<tr>
		<td>${weekname[i].ja}</td>
		<td>
			<div class="form-check">
				<input id="${weekname[i].en}_chk" class="form-check-input" type="checkbox" name="" value=1 ${weekvalflg}>
				<label for="${weekname[i].en}_chk" class="form-check-label">バックアップする</label>
			</div>
		</td>
	</tr>
		`;
			}
		} else {
			for (var i = 0; i < 7; i++) {
				str += `
		<tr>
		<td>${weekname[i].ja}</td>
		<td>
			<div class="form-check">
				<input id="${weekname[i].en}_chk" class="form-check-input" type="checkbox" name="" value=1>
				<label for="${weekname[i].en}_chk" class="form-check-label">バックアップする</label>
			</div>
		</td>
	</tr>
		`;
			}

		}
		str += `
<tr>
	<td colspan="2"><button class="btn btn-primary"  id="btn" type="button">設定する</button></td>
</tr>
`;
		document.getElementById("tbl").innerHTML = str;
		document.getElementById("btn").addEventListener("click", function () {
			$.ajax({
				type: "POST",
				url: "./lib/backup-setting.php",
				data: {
					Sunday: document.getElementById("Sunday_chk").checked?1:0,
					Monday: document.getElementById("Monday_chk").checked?1:0,
					Tuesday: document.getElementById("Tuesday_chk").checked?1:0,
					Wednesday: document.getElementById("Wednesday_chk").checked?1:0,
					Thursday: document.getElementById("Thursday_chk").checked?1:0,
					Friday: document.getElementById("Friday_chk").checked?1:0,
					Saturday: document.getElementById("Saturday_chk").checked?1:0
				},
				dataType: "json",
				success: function (response) {
					if (response.ok == "ok") {
						alert("設定しました");
					} else {
						alert("失敗しました");
					}
				}
			});
		});

	});
}

function passwordview() {
	document.getElementById("tbl").innerHTML = `
	<tr>
	<td>wordpress Id</td>
	<td>
		<div class="input-group">
			<input class="form-control" type="text" id="wpid" placeholder="ワードプレスのIDを入力ください" aria-label="ワードプレスのIDを入力ください" aria-describedby="wpid">
		</div>
	</td>
</tr>
<tr>
	<td>wordpress pass</td>
	<td>
		<div class="input-group">
			<input class="form-control" type="password" id="wppass" placeholder="ワードプレスのPassを入力ください" aria-label="ワードプレスのIDを入力ください" aria-describedby="wppass">
		</div>
	</td>
</tr>
<tr>
	<td colspan="2"><button class="btn btn-primary"  id="btn" type="button">ログインする</button></td>
</tr>	
	`;



	document.getElementById("btn").addEventListener("click", function () {
		$.ajax({
			type: "POST",
			dataType: "json",
			url: "./lib/pass.php",
			data: { wpid: document.getElementById("wpid").value, wppass: document.getElementById("wppass").value },
			success: function (response) {
				if (response.password.ok === "ok") {
					view();
				} else {
					alert(response.password.msg);
					passwordview();
				}
			}
		});
	});
}

タグ

5.6, db, dbbackup, ID, pass, php, sakura-rental-wpdb-backupf, WARNING, web, WordPress, wploadfile, アップロード, インストール, お願い, コード, サーバー, さくら, ダウンロード, バックアップ, ファイル, フォルダ, プログラム, ベーシック, メール, ルート, レンタル, 上記, , 動作, , 場合, 変更, 外部, 完了, 容易, 対応, 担当者, 支援, 環境, 発生, 設定, 設置, 認証, 部分, 階層, , 駆け出し,

レンタルサーバーの帯域幅を増やしたい

2019.12.26

Logging

浜辺美波VS池田エライザの妖艶対決? 「賭ケグルイ」OP映像特別編第1弾が公開

レンタルサーバーの帯域幅を増やしたい、そうする事によって表示速度はかなり変わる、特にモバイルファーストにはかなり良いと思うのだ。

レタリング処理能力が上がるのと帯域幅を増やすことによってモバイルファーストの評価は上がるだけど
共有のレンタルサーバーは帯域幅を上げることはすら出来ない仕様になっているところが多い。

WordPressを高速に動かすクサナギとかいうやつが良いのだが・・・。
それでもそんなに評価が上がるわけでもない。

WordPress専用サーバなどを試したことがないので試してみたいのだが、自分が思うにはあまりレタリング処理は
変わらないのではないかと思っている。

悩ましい、収入が安定すれば良いサーバに変えてみようとか密かに思っています。

やはりモバイルファーストってかなり影響するよね。
追記2021:因みにカゴヤ・ジャパンのレンタルサーバーだと帯域幅を増やせますよ。

Japanese Webmaster Office Hours(ウェブマスター オフィスアワー 2016 年 12 月 7 日)

タグ

2021, https, WordPress, www, You, かごや, かなり, クサナギ, こと, サーバ, サーバー, ジャパン, ところ, ファースト, モバイル, やつ, レタリング, レンタル, わけ, , 仕様, 共有, 処理, 収入, 安定, 専用, 帯域, , 影響, 能力, 自分, 表示, 評価, 追記, 速度, 高速,

あるキーワードをライクするTwitter API。

2019.11.06

Logging

さくらレンタルサーバー、もともとmecab(メカブ)が入っているらしい。
自動であるキーワードに対してライクする方法(Twitter API)です。
たぶん、こんなコードはなかったと思います、
過去記事「ワードプレス過去記事のツイートをボット化する方法。」と併用してお使いください。
そうでないと動きませんので…。
知り合いエンジニアさんとかに組み込んでもらってください。

<?php
function mecab_tw_like($txt="",$connection=Null){
    if(!$txt)return false;
    if(!is_object($connection))return false;
    $cmd = "echo "$txt" | mecab";
    exec($cmd, $opt, $return_ver);
    //var_dump($opt);
    foreach($opt as $key=>$val){
        $r = explode("t",$val);
        if(preg_match("/名詞/",$r[1])){
            $statuses = $connection->get(
                'search/tweets',
                array(
                    'q'                 => $r[0],
                    'count'             => '3',
                    'lang'              => 'ja',
                    'locale'            => 'ja',
                    'result_type'       => 'recent',
                    'include_entities'  => 'false'
                )
            );
            if(is_array($statuses->statuses) and $statuses->statuses){
                foreach( $statuses->statuses as $tweet ){
                    $id = $tweet->id;
                    $result = $connection->post(
                        'favorites/create',
                        array(
                            'id' => $id
                        )
                    );
                }
            }
        }
    }
}

タグ

API, cmd, connection, echo, exec, false, function, if, is, like, lt, Mecab, null, object, opt, php, quot, return, tw, Twitter, txt, ver, エンジニア, キーワード, コード, サーバー, さくら, ツイート, プレス, ボット, メカブ, ライク, レンタル, ワード, 併用, 方法, 自動, 記事, 過去,

ワードプレス過去記事のツイートをボット化する方法。

2019.11.05

Logging

WordPress(ワードプレス)の過去記事をツイートしたいけど
結構大変ですと断られる業者は腕なしかもしれない。

簡単に作れます。Composerをインストールして
TwitterOAuthのライブラリー入れてあげて、ワードプレスのwp-load.phpと
TwitterOAuthのライブラリー を参照するような下記コードを作るだけで
ツイートが可能です。

これを自動化するにはcrontab(クロンタブ)という機能で実行できます。
ほとんどのレンタルサーバーにこの機能はついています。

うちのサーバーはWindowsサーバーなんでとかいう場合は
スケジュールでなんとかしてくださいと言えばOKです。

これを実装するのに発生する単価は1万ぐらいじゃないかと思います。
それ以上高ければ、ぼったくられています。

1万円が高いかどうか?

ちなみに普通のプログラマーはこれを構築するのに30分もかからないです。
人件費を考えるとそれぐらいが妥当だと思います。
いまクラウドワークスなどで頼めば5000円以下で対応してくれる人も
いますが、単価が下がるとそれは最終的に自分の首を絞めることに
なります。なので1万円ぐらいが妥当だと思います。

<?php
//ひとつ英語名のフォルダ作って、これいれてあげて
require_once ('../wp-load.php');
require_once ("../vendor/autoload.php");
use AbrahamTwitterOAuthTwitterOAuth;
define("CONSUMER_KEY","コンシューマーキー");
define("CONSUMER_SECRET","コンシューマーシークレット");
define("ACCESS_TOKEN","アクセストークン");
define("ACCESS_TOKEN_SECRET","アクセストークンシークレット");
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$args = array(
  'post_status' => 'publish',
	'posts_per_page' => 1,
    'orderby' => 'rand'
);
$posts = get_posts($args);
foreach ( $posts as $val ){
    $href =  get_permalink($val->ID);
    $title = get_the_title($val->ID);
    $res = $connection->post("statuses/update", array("status" =>$title . " n" . $href . " n#黒歴史ってなんだ? #ブログ ".date('Y/m/d H:i:s')));
}

タグ

, 30, Composer, crontab, OK, php, TwitterOAuth, Windows, WordPress, wp-load, インストール, うち, , クロン, コード, これ, サーバー, スケジュール, それ, タブ, ツイート, プレス, プログラマー, ボット, ほとんど, ライブラリー, レンタル, ワード, , 下記, 人件, 単価, 参照, 可能, 場合, 大変, 実行, 実装, 方法, 普通, 業者, 構築, 機能, 発生, 簡単, , 自動, 記事, 過去,

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

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, アップ, オンリー, コード, こちら, こと, サーバー, サイト, ジェネレーター, ソース, タイル, ダウンロード, はい, ファイル, ブラウザ, ページ, 一括, 下記, 他人, 保存, 処理, 分離, 削除, 動作, 参考, 問い合わせ, 変更, 強制, 格納, 生成, 画像, 表示, 複数, 追記, 選択,

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, ウィンドウ, サーバー, ため, ランキング, リスク, レンタル, , 国内, 対応, 技術, 日本, 最新, 機能, 理由, 運営, 関数,

WordPressの全記事の中からランダムで記事をピックアップしてツイートする。

2019.02.22

Logging

WordPressの全記事の中からランダムで記事をピックアップしてツイートする。
実際、自分の階層に合わして呼び出しを変更してください。
なお、さくらレンタルサーバーでクロンの設定をして自動投稿できます。
ライブラリの設置などは割愛してます。

<?php
// cron:: cd /home/user/www/zip358.com/site/tw; /usr/local/bin/php tw.php
require_once ('../../wp-load.php');
require "vendor/autoload.php";
use AbrahamTwitterOAuthTwitterOAuth;
$consumer_key = "XXXXXXXXXXXXXX";
$consumer_secret = "XXXXXXXXXXXX";
$access_token = "XXXXXXXXXXXXXX";
$access_token_secret = "XXXXXXXXXXXXXXX";
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
$args = array(
	'posts_per_page' => 1,
    'orderby' => 'rand'
);
$posts = get_posts($args);
foreach ( $posts as $val ){
    $href =  get_permalink($val->ID);
    $title = get_the_title($val->ID);
    $res = $to->post("statuses/update", array("status" => $title . " " . $href));
}

タグ

358, Abraham, access, autoload, bin, cd, com, consumer, cron, home, key, local, lt, once, php, require, secret, site, tok, tw, TwitterOAuth, use, user, usr, vendor, WordPress, wp-load, XXXXXXXXXXXX, XXXXXXXXXXXXXX, zip, クロン, サーバー, さくら, ツイート, ピックアップ, ライブラリ, ランダム, レンタル, , 割愛, 変更, 実際, 投稿, 自分, 自動, 記事, 設定, 設置, 階層,

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

2018.11.13

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, アップ, サーバ, サーバー, さくら, それ, タイプ, データ, ビジネス, マネージド, ランク, レンタル, ワン, 下記, 仕事, 企業, 使用, 保存, 保証, 個人, 共有, 商品, 場合, 専用, , 規定,