@Blog{zip358.com}
日常日誌からプログラムやYOUTUBER紹介、旅日記まで日々更新中です。
コードを見れば大体の技術レベルが分かるは本当?しかも、性格も分かる場合がある。
2022.02.07
おはようございます。今日の朝も寒いですね。。。
朝からcode.orgの動画を見ていたら日本もアメリカもITエンジニアの割合はあまり変わりないみたいな事を知りました、そしてアメリカでも子供たちのなりたい職業1位でもないみたいです。
さて、コードを見れば大体の技術レベルが分かるは本当?しかも性格も分かる場合があるですが、ソースコードを見ると其の人の技術がわかり、変数の名前付けとかで性格もある程度分かってしまったりします。そしてバージョン管理、ファイル管理で仕事に対する姿勢までもが分かってしまったりします。
なので・・・日頃からご注意ください。自分の場合、Githubのコメントなどを見るとこの人は適当な人なんだなぁって事が分かってしまうかもしれません。唯、仕事に対する姿勢は少し違うかなっていうのはあります。
仕事になるとファイル管理やバージョン管理もこの頃はちゃんとするようになりました。やはり整理整頓は結構大事な要素です。ファイルがどこにいったんだろうとか検索しないでも良いように管理することは大切なことです。昔はごちゃごちゃなファイル管理をしていましたけど(反省)😣。
因みに私生活で使用するパソコンのフォルダ整理は全然ダメダメですね。整理しようと思っているのだけどフォルダやファイル数が多くて大変な感じです(負の遺産が多いです)。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
1, Code, github, IT, org, アメリカ, エンジニア, コード, コメント, ご注意, ソース, バージョン, ファイル, レベル, 事, 人, 今日, 仕事, 割合, 動画, 名前, 場合, 変数, 大体, 姿勢, 子供, 少し, 性格, 技術, 日本, 日頃, 朝, 本当, 管理, 職業, 自分, 適当, 頃,
WebAPIの作り方、考え方です?。サンプルコードもありますよ。
2021.12.24
昨日から風邪を引いてしまいました…。今日も体調が優れない状態ですが、昨日よりはマシになっています、因みに風邪というよりも腸と胃に菌がはいってしまって、それによる発熱です?。
さて、今回はPHP言語でWebAPIの作りましたので、ご報告致します、どんなAPIかというと生年月日とカウントしたい歳をPOSTすると、現在の年齢、今まで生きてきた日数、カウント日数がレスポンス(返却)されます。
PHPコードは下記の通りになります。適当に作ったので間違っている箇所があるかもしれませんが、そこはご愛嬌でお願いできますでしょうか?、また、WebAPIの叩き方はご自身でお考えくださいませ。
サーバーに負荷が増したらWEBAPIは閉じます。
尚、WEBAPIのURLはこちらになります。
https://zip358.com/api/age/v1/type1/
<?php
header('Access-Control-Allow-Origin: *');
date_default_timezone_set('Asia/Tokyo');
$birth_date = (string)$_POST["birth_date"];
$max_age = (int)$_POST["point_age"];
/**
* @param string $birth_date
* @return string|false
*/
function check1($birth_date = ""): bool
{
$flg = false;
$str_date = explode("/", $birth_date);
if (count($str_date) === 3) {
$flg = true;
if (!((int)$str_date[0] >= 1000)) {
$flg = false;
}
if(((int)$str_date[0] > (int)date("Y"))){
$flg = false;
}
if (!((int)$str_date[1] >= 1 && (int)$str_date[1] <= 12)) {
$flg = false;
}
if ($flg) {
if ((int)$str_date[1] === 2) {
if (!((int)$str_date[2] >= 1 && (int)$str_date[2] <= 28)) {
$flg = false;
}
if ((int)$str_date[0] % 4 === 0) {
$flg = true;
if (!((int)$str_date[2] >= 1 && (int)$str_date[2] <= 29)) {
$flg = false;
}
if ((int)$str_date[0] % 100 === 0) {
$flg = true;
if (!((int)$str_date[2] >= 1 && (int)$str_date[2] <= 28)) {
$flg = false;
}
if ((int)$str_date[0] % 400 === 0) {
$flg = true;
if (!((int)$str_date[2] >= 1 && (int)$str_date[2] <= 29)) {
$flg = false;
}
}
}
}
} else {
$last_day = [4, 6, 9, 11];
if (array_search((int)$str_date[1], $last_day, false)!== false) {
if (!((int)$str_date[2] >= 1 && (int)$str_date[2] <= 30)) {
$flg = false;
}
} else {
if (!((int)$str_date[2] >= 1 && (int)$str_date[2] <= 31)) {
$flg = false;
}
}
}
}
}
return $flg;
}
/**
* @param int $age
* @return string|false
*/
function check2($age = 0): bool
{
$flg = true;
if ($age < 0) {
$flg = false;
}
return $flg;
}
/**
* @param string $birth_date
* @param string $maxage
* @return string $reslut
*/
function sumup($birth_date, $maxage)
{
$reslut = [];
$birth_date_array = explode("/", $birth_date);
$birth_date = sprintf("%04d%02d%02d", $birth_date_array[0], $birth_date_array[1], $birth_date_array[2]);
$today = date('Ymd');
$age = floor(($today - $birth_date) / 10000);
$day1 = new DateTime("{$birth_date_array[0]}-{$birth_date_array[1]}-{$birth_date_array[2]}");
$day2 = new DateTime();
$interval1 = $day1->diff($day2, true);
$baseday = (int)($interval1->format('%a'));
if ((int)$maxage <= (int)$age) {
$pointday = 0;
} else {
$maxage--;
$day3 = new DateTime((date('Y') + ($maxage - $age)) . "-{$birth_date_array[1]}-{$birth_date_array[2]}");
$interval2 = $day2->diff($day3, true);
$pointday = (int)($interval2->format('%a'))+1;
}
$reslut = [
[
"result" => "success",
"age"=>$age ."歳",
"baseday" => $baseday . "日(生きてきた日数)",
"pointday" => $pointday . "日(" .($maxage +1). "歳まであと)"
]
];
return json_encode($reslut);
}
if (!check1($birth_date)) {
print json_encode([
[
"result" => "error",
"error" => "string is invalid1"
]
]);
} elseif (!check2($max_age)) {
print json_encode([
[
"result" => "error",
"error" => "string is invalid2"
]
]);
} else {
print sumup($birth_date, $max_age);
}
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
39, Access-Control-Allow-Origin, API, header, lt, php, POST, url, WebApi, お願い, カウント, コード, こちら, ご報告, ご愛嬌, ご自身, サーバー, サンプル, そこ, それ, まし, レスポンス, 下記, 今回, 今日, 体調, 作り方, 叩き, 年齢, 日数, 昨日, 歳, 状態, 現在, 生年月日, 発熱, 箇所, 考え方, 胃, 腸, 菌, 言語, 負荷, 返却, 通り, 適当, 風邪,
ダラダラとLaravel構築してみた解説あり(*´?`*)
2020.06.02
Laravelをインストール手順を動画にしました。いらない手順が含まられていますが・・・。気にしないでください!!
ちなみに適当な動画は無音ですみません。尚、PHPがタイムアウトしてComposerがインストール出来ない場合はポートの解放が出来ているか、IPv6が有効になっていないかなど調べてくだいね。なお、自分の場合、IPv6が有効になっていてダウンロードが出来ない状態でした(´・ω・`)。
お世話になったサイトはこちらです。こちらの手順通り対応しvirtualBOX、いや仮想環境を再起動してあげてください。そうするとすんなりダウンロード出来ます。それでもダウンロード出来ない場合はアドレスからgetcomposer.orgからダウンロードする手段もありますが、恐らくその後のComposerインストールで躓くはずです。サーバー環境を見直すと良いでしょう。
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
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
6, Composer, getcomposer, https, IPv, Laravel, org, php, server-me, virtualBOX, www, アドレス, いね, インストール, お世話, くだ, こちら, サーバー, サイト, タイムアウト, ダウンロード, パス, ポート, 仮想, 再起動, 動画, 場合, 対応, 後, 手段, 手順, 有効, 構築, 気, 無音, 状態, 環境, 自分, 解放, 解説, 適当,
テストサーバーを適当に立ち上げる。
2020.06.02
テストサーバーを適当に立ち上げる方法を録画してみました。
最初の動画はselinux 無効などはしていませんが、それをしないと誤作動というか上手く動かなくなるのでご注意を!!
ちなみにファイヤーフォールの設定などはググりながらお勉強ください。動画ではそこらへんもググりながら設定しています。あんまりサーバー系のコマンド覚えていないだよね。サーバーの考え方がなんとなく頭に入っている程度です。
ちなみにこれをローカルサーバーじゃなくてVPSでサーバーとして公開するならばWAF(わふ)とかその他、いろいろな設定をすることをオススメします。尚、さくらレンタルサーバーのブログはいいよ!?
尚、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グールプ追加するのさってヒントも書いときますね。
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
2, 3, 7.4, 8, centOS, cgi-bin, php, selinux, VPS, WAF, いろいろ, インストール, おすすめ, お勉強, こと, コマンド, これ, ご注意, サーバー, さくら, そこら, その他, それ, テスト, バージョン, ヒント, ふ, ファイヤー, フォール, ブログ, べん, レンタル, ローカル, 使, 例, 公開, 動画, 方法, 最初, 最小, 無効, 程度, 考え方, 記載, 設定, 誤作動, 適当, 録画, 頭,
月の満ち欠けPHPライブラリを書きました。ちょっと適当なアイコンで表示。
2020.02.22
月の満ち欠けPHPライブラリを書きました、ご自由にお使いください。
ちょっと適当なアイコンで表示。
もっと正確なアイコンを取り入れたい方はご自身でご自由に変更ください。
月の満ち欠けの計算方法はネットから見つけてきました。
情報を記載していただいた先人の知恵を借りPHPライブラリが出来ました。
ありがとうございます。
<?php
//date_default_timezone_set('Asia/Tokyo');
class moon{
static public $icon = array(
"0"=>'?',//朔
"1"=>'?',//朔
"2"=>'?',//朔
"3"=>'?',//三日月
"4"=>'?',//三日月
"5"=>'?',//三日月
"6"=>'?',//三日月
"7"=>'?',//上弦の月',
"8"=>'?',//上弦の月',
"9"=>'?',//上弦の月',
"10"=>'?',//上弦の月',
"11"=>'?',//上弦の月',
"12"=>'?',//十三夜月
"13"=>'?',//十三夜月
"14"=>'?',//十三夜月
"15"=>"?",//望月
"16"=>"?",//望月
"17"=>"?",//望月
"18"=>"?",//望月
"19"=>"?",//寝待月
"20"=>"?",//寝待月
"21"=>"?",//寝待月
"22"=>"?",//寝待月
"23"=>'?',//下弦の月
"24"=>'?',//下弦の月
"25"=>'?',//下弦の月
"26"=>"?",//二十六夜月
"27"=>"?",//二十六夜月
"28"=>"?",//二十六夜月
"29"=>"?"//二十六夜月
);
static public $res = "0";
static public $moon_gregorian = array(0,2,0,2,2,4,5,6,7,8,9,10);
public function main($year=2012,$mon=12,$day=12)
{
static::$res = ((($year-11)%19)*11 + static::$moon_gregorian[$mon-1]+$day)%30;
}
public function icon(){
return static::$icon[static::$res];
}
}
呼び出しはこんな感じで。
<?php
moon::main($year,$mon,$day);
$chg = moon::icon();
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
0, 1, 2, 3, 39, array, Asia, class, date, default, gt, icon, lt, moon, php, public, quot, set, static, timezone, Tokyo, アイコン, ご自身, ネット, ライブラリ, 先人, 変更, 情報, 方, 方法, 月, 朔, 正確, 満ち欠け, 知恵, 表示, 計算, 記載, 適当,
テキストを日本語ボイスに変換してくれるしょぼいWindowsソフトを作ったよ。
2020.01.21
VS2017のC#で、テキストを日本語ボイスに変換してくれるしょぼいWindowsソフト( 滑舌が悪いけどYOUTUBERしたい人用)を作ったよ。自分はかなり滑舌悪いくてどもるので、YOUTUBER向かないのですがユーチューバーしてみたい願望があったので、Gさんの「Cloud Text-to-Speech API」で適当に作ってみた。ちなみにまだYOUTUBERするかは決めてない!
APIですが月に0?100万文字までは無料枠なので、大量に使わない限り無料枠で収まると思います。これを他の人に提供しようとするとアウトだろうけど・・。
自分だけが使用するのには何とかその範囲内かと思います。
尚、ソースコードを提供します可変してお好みで使ってください。大量のテキストをボイス変換した場合、ビジーになるかもしれません。そこら辺の処理は入れてません。またGさんからダウンロードしたJSONファイルを置いている階層に合わしてください。
参考にしたサイトは下記になります。
https://cloud.google.com/text-to-speech/docs/quickstart-client-libraries?hl=ja#client-libraries-install-csharp
フォームのオブジェクトの配置は下記になります。画像を参照ください。
ソースコードは下記になります。
using System;
using System.IO;
using System.Windows.Forms;
using Google.Cloud.TextToSpeech.V1;
namespace テキストを日本語ボイスする
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if(richTextBox1.Text.Replace("\r", "").Replace("\n", "") == "")
{
MessageBox.Show("文字を入力してください");
return;
}
Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "C:\\xxxxx\\xxxxx\\xxxxx\\xxxxx.json", EnvironmentVariableTarget.Process);
TextToSpeechClient client = TextToSpeechClient.Create();
SynthesisInput input = new SynthesisInput
{
Text = richTextBox1.Text.Replace("\r", "").Replace("\n", "")
};
VoiceSelectionParams voice = new VoiceSelectionParams
{
LanguageCode = "ja-JP",
Name = "ja-JP-Wavenet-A",
SsmlGender = SsmlVoiceGender.Neutral,
};
AudioConfig config = new AudioConfig
{
AudioEncoding = AudioEncoding.Mp3,
SpeakingRate = f1(trackBar1.Value),
Pitch = f2(trackBar2.Value),
};
var response = client.SynthesizeSpeech(new SynthesizeSpeechRequest
{
Input = input,
Voice = voice,
AudioConfig = config
});
DateTime dt = DateTime.Now;
string dttimename = dt.ToString("yyyy-MM-dd-HH-mm-ss");
using (Stream output = File.Create("voice-" + dttimename + ".mp3"))
{
response.AudioContent.WriteTo(output);
Console.WriteLine($"Audio content written to file 'voice - " + dttimename + ".mp3'");
MessageBox.Show("生成しました=>>voice - " + dttimename + ".mp3");
System.Diagnostics.Process.Start(Directory.GetCurrentDirectory());
}
}
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
label3.Text = string.Format("{0:0.00}", f1(trackBar1.Value));
}
private void trackBar2_ValueChanged(object sender, EventArgs e)
{
label4.Text = string.Format("{0:0.00}", f2(trackBar2.Value));
}
private double f1(int a) {
return Convert.ToDouble(a) / 100;
}
private double f2(int a)
{
return Convert.ToDouble(a) - 20;
}
}
}
変換したボイスはこんな感じです!
著者名 @taoka_toshiaki
※この記事は著者が40代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
0, 100, 2017, API, Cloud, json, Text-to-Speech, VS, Windows, YOUTUBER, アウト, お好み, かなり, コード, これ, ソース, そこら辺, ソフト, ダウンロード, テキスト, ビジー, ファイル, ボイス, ユーチューバー, 万, 人, 他, 使用, 処理, 場合, 変換, 大量, 提供, 日本語, 月, 枠, 滑舌, 無料, 範囲, 自分, 適当, 限り, 願望,
雨だろうなきっとと思いながら、東京9月の天気予報を見るとやっぱ雨だった。
2018.09.08
なんだか雨なんですけど東京へちょっくら行く日が雨ぽっい
雨かぁ・・・移動が大変だな。
晴れてほしいと思いながら、この頃の天気予報はよく当たるので
晴れないだろうと思っていたほうが良さそうです。
結構、スケジュール詰まっているが大丈夫かなと
思いつつも自分の今までの経験から行くとまぁスケジュール通り進むことが
多い、道に迷ったりすることがあまりなく有っても何か適当に
直感で進んでいるとうまく目的地に付くことが多いのです。
それに田舎と比べて道案内が優れているのでまず、迷わない
迷ったら交番かJRの駅員に聞けば、答えてくれるので
なんとか、片言の日本語しか話せない自分でも
何とかなるのです。
ジョジョ展 10:00頃
チームラボ 12:30頃
東京駅へ友Xと待ち合わせ 15:XX頃
友X観光案内。
著者名 @taoka_toshiaki
※この記事は著者が30代前半に書いたものです.
Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki
タグ
00, 10, 12, 15, 30, 9, JR, Xx, こと, ジョジョ, スケジュール, それ, チームラボ, 予報, 交番, 今, 友, 大変, 天気, 日, 日本語, 東京, 案内, 片言, 田舎, 目的, 直感, 移動, 経験, 自分, 観光, 道, 道案内, 適当, 雨, 頃, 駅員,