一週間の予約が出来るデモコードです。良かったらどうぞ😌。 #php #code

2022.09.17

Logging

おはようございます、今日から台風接近らしいですね。この投稿は昨日書きました。

さて、一週間の予約(時刻表から)が出来るデモコードを書きました。これを書いたキッカケは昔の職場の方がこんな感じのUIを作られていたのを見て、自分も書いてみようと思いDEMOコードを朝起きて調べながら書きました。調べたことは選択を解除する方法だけで、後はオリジナルコードです、設計書も何もなく組み立ていきましたので、欠陥があるかもです。また、Qiitaにも記載しましたが、コメントをほぼ書いていません。書かずともプログラマーなら分かるだろうという感覚です。

予約ー時刻表DEMO

肝心の確認部分は記載していないのにも訳があります。営業妨害になっては駄目だからです。そういう理由で確認部分以降は書いていません。

こちらにもソースコードを掲載しときますね。

<?php
ini_set("display_errors",0);
/**
 * @param array $holiday
 * @return string $str
 */
function fn_header($holiday = [])
{
    $str = "";
    $date = new DateTime();
    for ($i = 0; $i < 7; $i++) {
        !$i ? "" : $date->modify('+1 day');
        $w = $date->format("w");
        $tabindex = $i*7;
        $ho = (function ($days, $holiday = []) {
            return (array_search($days, $holiday) !== false) ? "holiday" : "";
        })($date->format("Y-m-d"), $holiday);
        $str .= "
        <th tabindex=$tabindex>
            <span class='header_no week_no_$w $ho'>" . $date->format("Y-m-d") . "</span>
        </th>";
    }
    return $str;
}
/**
 * @param int $h_min
 * @param int $h_max
 * @param int $m_interval
 * @param array $cnt
 * @param array $reserve
 * @param array $holiday
 * @return string $str
 */
function fn_time($h_min, $h_max, $m_interval,$cnt=[],$holiday = [], $reserve = [])
{
    $str= [];
    for ($h = $h_min; $h <= $h_max; $h++) {
        for ($m = 0; $m < 60; $m = $m + $m_interval) {
            print("<tr>\n");
            $date = new DateTime();
            for ($i = 0; $i < 7; $i++) {
                $cnt[$i]=!$cnt[$i]?(((($h_max - $h_min)+1)*(60/$m_interval))*($i))+7:(++$cnt[$i]);
                !$i ? "" : $date->modify('+1 day');
                $w = $date->format("w");
                $ho = (function ($days, $holiday = []) {
                    return (array_search($days, $holiday) !== false) ? "holiday" : "";
                })($date->format("Y-m-d"), $holiday);
                $time = sprintf("%02d:%02d",$h, $m);
                if ($ho) {
                    print("
                        <td class='' tabindex={$cnt[$i]}>
                            <span class='header_no week_no_$w $ho'>" . $time . "</span>
                        </td>");
                } else {
                    $r = (function ($days, $reserve = []) {
                        return (array_search($days, $reserve) !== false) ? "reserve" : "";
                    })($date->format("Y-m-d") . "_" . $time, $reserve);
                    if (!$r) {
                        print("
                            <td class='date_" . $date->format("Y-m-d") . "_{$time}' tabindex={$cnt[$i]} data-date='" . $date->format("Y-m-d") . "_{$time}'>
                                <a class='time_{$m}_" . $date->format("Y-m-d") . "_{$time}' data-sortno={$cnt[$i]}  href='#?data=" . $date->format("Y-m-d") . "_{$time}'><span class='header_no week_no_{$w} {$h}'>{$time}</span></a>
                            </td>");
                    } else {
                        print("
                            <td class='' tabindex={$cnt[$i]}>
                                <span class='header_no week_no_$w $r'>" . $time . "</span>
                            </td>");
                    }
                }
            }
            $date = null;
            print("</tr>\n");
        }
    }
    return "";
}
?>
<!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/5.1.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <title>予約-時刻表(デモ版)</title>
    <style>
        table,tr,td{
            user-select: none;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-12 text-center">
                <h1 class="display-1">予約-時刻表<br></h1>
                <h5>{予約:時刻をクリックするか、<br>
                    左クリック選択状態で複数選択可能です<br>
                    (日付またぎは禁止しています)}</h5>
                <h5>{ダブルクリックすると予約画面に遷移します。<br>
                    ※DEMO版ですので予約登録画面は御座いません}</h5>
            </div>
        </div>
    </div>
    <div class="container-fluid  text-center">
        <div class="row">
            <div class="col-12">
                <table class="shadow-lg table table-hover table-bordered">
                    <thead>
                        <tr>
                            <?= fn_header() ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?=fn_time(10, 20, 10,[],["2022-09-18","2022-09-23"],["2022-09-19_10:40","2022-09-19_10:50"]) ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.9.2/umd/popper.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/js/bootstrap.min.js"></script>
    <script src="./assets/js/main.js?<?=time()?>"></script>
</body>
</html>
let date_obj = document.querySelectorAll("td");
let submit_url = "https://example.com";
let is_date_data = [];
let cnt = 0;

date_obj.forEach(function (elm, key) {
    elm.addEventListener("mouseout", select_in_value);
    elm.addEventListener("click", sp_select_in_value);
    elm.addEventListener("touchend", sp_select_in_value);
    elm.addEventListener("dblclick", select_out_value);
});
function check_value(o, e) {
    if (is_date_data.length === 0) {
        return true;
    }
    let d = o.getAttribute("data-date");
    return d ? ((d) => {
        let f = is_date_data.find(element => {
            let pattern = new RegExp(d.split("_")[0]);
            return !element.match(pattern);
        }) ? false : true;
        if (!f) {
            select_clear(o, e);
            is_date_data = [];
            cnt = 0;
        }
        return f;
    })(d) : false;
}
function select_in_value(e) {
    if (e.buttons === 1 && check_value(this, e)) {
        if (this.getAttribute("data-date")) {
            this.style.backgroundColor = "#555";
            this.children[0].style.color = "#fff";
            if (is_date_data.indexOf(this.getAttribute("data-date")) && is_date_data.indexOf(this.getAttribute("data-date"))) {
                is_date_data[cnt] = this.getAttribute("data-date");
                cnt++;
            }
        }
    }
}
function sp_select_in_value(e) {
    if (check_value(this, e)) {
        if (this.getAttribute("data-date")) {
            this.style.backgroundColor = "#555";
            this.children[0].style.color = "#fff";
            if (is_date_data.indexOf(this.getAttribute("data-date")) && is_date_data.indexOf(this.getAttribute("data-date"))) {
                is_date_data[cnt] = this.getAttribute("data-date");
                cnt++;
            }
        }
    }
}
function select_out_value(e) {
    if (is_date_data.length) {
        let is_data = is_date_data.map(function (elm, index) {
            return "date[" + index + "]=" + elm;
        });
        window.location.href = submit_url + "?" + is_data.join("&");
    }
}
function select_clear(o, e) {
    let is_ClassName = [];
    is_ClassName = is_date_data.map(function (d) {
        return "date_" + d;
    });
    is_ClassName.map(class_name => {
        document.getElementsByClassName(class_name)[0].style.backgroundColor = "#fff";
        document.getElementsByClassName(class_name)[0].children[0].style.color = "#0d6efd";
    })
}

タグ

0, Code, com, demo, https, ligaLgY-uZ, php, qiita, UI, watch, www, youtube, オリジナル, キッカケ, コード, こちら, こと, コメント, これ, ソース, デモ, プログラマー, , 予約, 今日, 台風, 営業, 妨害, , 感じ, 感覚, 投稿, 接近, 掲載, , 方法, , 昨日, 時刻表, , 欠陥, 理由, 確認, 職場, 肝心, 自分, 解除, 記載, 設計書, , 選択, 部分, 駄目,

基本情報技術者試験を無料で勉強する方法を教えます🤔。

2022.09.02

Logging

おはようございます、マスクをすると直ぐに肌に痒みを感じます💦。

前置きとして基本情報技術者試験は来年(2023年)からいつでも基本情報技術者試験が受けれるようになります。年二回の試験は今年で最後です、最後の試験も予約してCBT(Computer Based Testing(コンピュータ ベースド テスティング))で受ける形になります。CBTとは簡単に言えばパソコンを使用して回答するものになります、回答は選択式なので今までの筆記試験と変わりません。全問回答した後、直ぐに正答率が分かります。そこが筆記試験とは違う形になります😶。

さて、基本情報技術者試験を無料で勉強する方法を教えます。まずはYOUTUBEを使います。YOUTUBEで基本情報技術者などと検索すると基本情報の午前(A)問題や知識を解説しているYOUTUBERがいますので自分が分かりやすいなと思った人の動画を見ると良いでしょう。

【A試験_ハードウェア】01. 五大装置とノイマン型コンピューター | 基本情報技術者試験

次に動画解説を見た後に基本情報技術者の過去問を徹底に解くことが大事になります。因みに基本情報の午前は過去問題集を9割解けるようになれば確実に本試験でも7割は取れます。過去問題を解くのに最適なサイトで一夜漬け情報処理サイトがありますのでそちらを活用ください。

午前は大体、この方法で合格出来ますが、問題は午後(B)です。午後を解説しているサイトは少ない理由は午前は暗記問題ですが、午後は自分で考える力が大事になってきます。アルゴリズムの概念やデーターベースの概念、プログラムを読む力、また文章の読解力も必要になってきます。その為、まずは午後の問題をひたすら自分で解く事により解く力を身につけましょう。分からないことは自分で調べ、再度、問題を解くという反復学習により午後の試験を解く力が身につきます。尚、最初は時間制限を設けずに解くようにして、最後まで自分で解く力を養うようにしましょう。

このような事に気をつけながら勉強することで確実に合格に近づきます。後は毎日、勉強することですね。皆様、基本情報技術者試験頑張って下さい。

タグ

2023, Based, CBT, Computer, https, Testing, www, YO, youtube, YOUTUBER, いつ, コンピュータ, そこ, テスティング, パソコン, ペースト, マスク, もの, 予約, , , 今年, 使用, 全問, 前置き, 勉強, 動画, 午前, 問題, 回答, 基本, , , , 情報, 技術者, 方法, 最後, 来年, 検索, 正答, 無料, 知識, 筆記, 簡単, , 自分, 解説, 試験, 選択,

今日はエイプリルフールズですが、もう滅ぶと思ってます。

2022.04.01

Logging

おはよう御座います、4月になりましたね😪。

今日はエイプリルフールズですが、もう滅ぶと思ってます。理由はコロナやロシア軍のウクライナ進行とか、宜しくないことが立て続けにありますからね。

コロナ前は企業アカウントがエイプリルフールズに、いろいろな嘘をネットで呟いたりしてバズったりしていましたが、こんなご時世になったらエイプリルフールズのつぶやきはある意味命がけのつぶやきになりますリスクが大きすぎるのです、だから企業さんは自粛を選択する、それが数年続けばエイプリルフールズなんて言葉が死語になるって自分は思っています。

Gboard 湯呑みバージョン

因みにグーグルがエイプリルフールズに呟く、どうしようもない本気のガジェットが好きでした。この頃、エイプリルフールズさけてますけど・・・。

タグ

4, アカウント, いろいろ, ウクライナ, エイプリル, ガジェット, グーグル, こと, コロナ, ご時世, それ, ネット, バズ, フールズ, リスク, ロシア軍, 今日, 企業, 命がけ, , 意味, , 本気, 死語, 理由, 立て続け, 自分, 自粛, 言葉, 進行, 選択, ,

airpodとsonyのlinkbudsどちら買おうかと思案してます。

2022.03.30

Logging

おはよう御座います☀。日の出も徐々に早くなってきてますね。

ipodとsonyのlinkbudsどちら買おうかと思案してます。airpodとの良いところはインイヤー型のイヤホンって所なんですね。自分は耳の中までフィット感のあるのは、ちょっとゴワゴワ感が感じるので無理なんですね、、なんでインイヤー型のイヤホンをいつも選択しています。

Sony LinkBuds Official Product Video

linkbudsは外部の音も物理的に取り入れているところが売りのイヤホンです、こちらもインイヤー型のイヤホンです。

書いていて分かったのですが、airpodを買います。理由は旅先で使うときに外部音はいらないので・・・。そういう事を考えるとairpodが良いかなって思います。本当はインイヤーのairpod proがあればそちらを購入していると思います。

https://www.youtube.com/watch?v=-5y2YqrlOr4

そう思うとairpodにノイズキャンセリング機能がつくまで待つのも良いかなって、それまでは保留にしておくのも良いかもしれないな。

それが今の心の声です。

タグ

2, 4, 5, airpod, com, https, ipod, linkbuds, Pro, SONY, watch, www, youtube, YqrlOr, イヤー, イヤホン, いん, こちら, そちら, とき, ところ, どちら, フィット, , , 売り, 外部, , 思案, , , 旅先, 日の出, 本当, 理由, , 自分, 購入, 選択, ,

windows11のアップグレードされるまであともう少し?

2021.09.27

Logging

今日は朝、ヤシイパークまで自転車で行ってきました、行き帰りで結構な消費カロリーになるらしいですけど未だにあと10kgの体重が落ちません。今年中にはマイナス5kg落としたいなと思っています。

さて、話変わりまして10月の前半にはwindows10がwindows11へ条件を満たしていればアップグレードされます、因みに自分は条件を満たしているのでアップグレード対象者です。なんだかWindows11ってあのvistaに近い雰囲気がありますよね。今回のアップグレード、成功するかのかなぁ・・・。エンジニアが受けなくても一般ユーザーから好評だったら問題なく浸透するでしょうね。

Introducing Windows 11

アップグレードするとブラウザの変更が難しくなるとか言われています。初期設定で選択したブラウザから他のブラウザへ変更できないとか言われていますが、独禁法に接触すると思うので早々に変更できるようになるでしょう。なのでそういう面はあまり気にしていないのだけど、やはりGUI(グラフィックユーザーインターフェース)が大きく変わるとなれるまで時間がかかる気がします。

開発者としてはウィジェットが復活するらしいので、そこらへんは良いかなと思いますし、Androidアプリとかも仮想上で動かせるようになるのだとかで、そこらへんも良いかと思います。windows10でもアプリをインストールすれば仮想上で動かせるですけどね。

本当にあともう少し無償アップグレードが走ってwindows10とおさらばすることになるだなぁと思うと自分は複雑な気分になります。皆さんはどうですか?

タグ

10, 11, 5, kg, vista, Windows, アップ, エンジニア, カロリー, グレード, ブラウザ, マイナス, ヤシイパーク, ユーザー, 一般, 今回, 今年, 今日, , 体重, 初期, 前半, 変更, 好評, 対象者, 成功, 接触, , 未だ, 条件, , 浸透, 消費, 独禁法, 結構, 自分, 自転車, 行き帰り, 設定, , 選択, 雰囲気, ,

サブスクを再々見直してよかった件。Spotify解約はなかなか手強い。

2021.06.16

Logging

サブスクを見直してSpotifyをフリープランに変更しました、これからはYOUTUBE MUSIC+YOUTUBE Premiumで音楽やら動画を見るようにします。そもそもYOUTUBE Premiumは辞めれなかった。やっぱりYOUTUBE見るのに広告を見ないといけないのは正直なところ時間を消費しているような気がするので、それだったらその時間を買ったほうが良いなと思ったので、そういう選択をしました。これで年間、一万円ぐらい出費が消えるので良いかなと思います。自分にとって高価なアドビのイラレだけが…未だに重い出費ですね。

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

重い出費なので労働の仕事を始めようと動いています。高知県の地元IT企業はあまり気乗りしないので、もうIT企業は引退すると思います。技術はこれからも高めては行きたいとは思いますが、仕事としては副業でするという事に留めておきたいです。再復帰は今の所考えていません。

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

尚、つぶやきに書いていますが、プレイリストをエクスポートするなら、自前のコードを書いたほうが安全です、それが出来ない場合、クラウドワークスなどでお金を払って作ってもらった方がまだ安全なのかもしれないです。

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

タグ

IT, MUSIC, Premium, Spotify, youtube, アドビ, イラレ, これ, サブ, スク, それ, ところ, プラン, フリー, 一万, , , 仕事, , 企業, 出費, 副業, 労働, 動画, 地元, 変更, 年間, 広告, 引退, 復帰, , 技術, 時間, 未だ, 正直, , 気乗り, 消費, 自分, 解約, 選択, 音楽, 高価, 高知県,

映画、騙し絵の牙を観てきました。

2021.03.30

Logging

映画、騙し絵の牙を観てきました。率直に感想を書くとするならば好みが分かれる映画かなと思いました。これまで生きてきた人生観により受ける印象が、かなり違うかなと思います、自分は騙し絵の牙はとても楽しめたし、面白い映画だと感じました。因みに自分は騙された感はなかったかな?

映画で印象に残ったのは、ラストあたりに『難しい事にトライすることが良い』という様なセリフがありましたが、やっぱりそうだなとあらためて感じました。難しい選択をしていないと生き残れないだなと実感。ついつい楽な方に行きがちだけどそこはレッドオーシャンなんだなと。

映画『騙し絵の牙』【予告編】大ヒット上映中!

世の中、目まぐるしいぐらい変化しているように思えます。ここ一年で価値観や常識がいろいろと上書きされているように思えます。時代の転換期にきているように思えます。そんな事を考えながら映画を観ていると良いかもしれません。

最後に原作小説も読んでみたいなと感じる映画でした。今のタイミングで観てよかった?。

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

タグ

いろいろ, オーシャン, かなり, ここ, こと, セリフ, そこ, タイミング, トライ, ラスト, レッド, , 上書き, , , , 人生観, , 価値観, 印象, 原作, 変化, 好み, 実感, 小説, 常識, , 感想, , 映画, 時代, 最後, , 率直, , 自分, 転換期, 選択,

paypayの現金チャージがしたい、方法書いているじゃんか!

2020.09.28

Logging

paypayの現金チャージがしたい方、公式サイトにチャージの方法が記載されています。セブン銀行ATMを使えば現金チャージが出来ます。

ここでそれって口座開設しないといけないじゃと勝手に思い込んでいましたが、口座開設の必要はなくチャージ出来るとのことです。
そうなんだ、ここ数日、チャージが出来なくて残高が1000円まで落ち込んでいたので、これは良かったなと思いました。

テキスト解説はこちらに記載されています。公式なので安心して参照ができるかと思います。

https://paypay.ne.jp/help/c0087/ 【セブン銀行の方法を参照ください】

動画で手順を解説している人がいますのでそちらも貼っときます。

PayPay(ペイペイ) セブン銀行ATMでの現金チャージ方法
PayPay現金チャージ唯一可能な方法であるセブン銀行ATMを試してみた

尚、初回に銀行チャージなどを選択している方はセブン銀行とは表示されていないかと思います。チャージを選択して次にセブン銀行を選択するという手順で同じようにペイペイに現金チャージが出来るようになりますのでお試しください。

タグ

0087, 1000, ATM, help, https, jp, ne, Paypay, ここ, こちら, こと, これ, サイト, セブン銀行, そちら, それ, チャージ, テキスト, ペイペ, , 公式, 初回, 動画, 勝手, 参照, 口座, 安心, 必要, 手順, 数日, , 方法, 残高, 現金, 表示, 解説, 記載, 選択, 銀行, 開設,

ECサイトのBASEショップを独自ドメインに!

2020.09.21

Logging

ECサイトのBASEショップを独自ドメインにする方法を書いていきます。まずはお名前ドットコムでドメインを取得します。下記の動画で解説していますのでそちらを参照ください。もし動画のリンクが切れていた場合、YOUTUBEで『お名前.com ドメイン取得』などとググってみてください。ドメインの購入方法が説明されている動画があると思います。

お名前.comのドメイン取得方法【Whois情報公開代行に注意】

次にドメインが所得したあと、DNSの設定よりサブドメイン、『wwwか任意の名(shopなど)』ドメインのサーバ住所(在処)をBASEショップのサーバ住所に変更しなくてはならない為、ブルダウンメニューからCNAMEレコードを選択し『cname.thebase.in』と入力する必要があります。また左端の入力部分にはサブドメイン名を入力してください。

下記の画像を参照してください、手順を参考にしてサブドメインとCNAMEの値を設定し設定ボタンを押してください。(設定する値はwwwか任意のサブドメイン名となり、CNAMEの値はcname.thebase.inになります。)

最後にBASEサイトにログインし上記で設定したサブドメイン(wwwか任意の名(shopなど))を下記の動画を見本に申請してみてください。申請後、数時間で独自ドメインがECサイトで表示されている事が確認できると思います。

ECサイトbaseを独自ドメインに!

タグ

base, CNAME, com, DNS, EC, in, shop, thebase, www, youtube, あと, サーバ, サイト, サブ, サブド, ショップ, そちら, ダウン, ドットコム, ドメイン, ドメイン名, プル, ボタン, メニュー, リンク, レコード, 下記, 任意, 住所, , 入力, 動画, 参照, 参考, 取得, , 名前, 在処, 場合, 変更, 左端, 必要, 所得, 手順, 方法, , 画像, 解説, 設定, 説明, 購入, 選択, 部分,

感覚が違うよイーロン・マスク!

2019.12.21

Logging

Starship | Earth to Earth

スペースXのYOUTUBE動画を観ていたら
2017年にこんな動画があった…。

宇宙船を飛行機のように使うというもの。
いやこれは普通の人は考えないよな、、、その感覚がない。

飛行機の倍の予算で乗ることが出来ればこちらを選択する人はいるはず。
そして国から国へと移動するのが20?50分で出来てしまう・・・。

日本からアメリカへ行くのも1時間以内で行くことが
出来るようになれば、なんだか物事の考え方が変わっていくように
思います。

This is SpaceX

タグ

0, , 20, 2017, 50, com, youtube, zqE-ultsWt, アメリカ, イーロン, こちら, こと, これ, スペース, パス, マスク, もの, 予算, , , 動画, , 宇宙船, 感覚, 日本, 普通, 物事, 移動, 考え方, 選択, 飛行機,

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

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

学校に行かないという選択。

2017.09.05

Logging


学校に行かないという選択はありだと思います。
いじめにあっている自分自身が一番、苦痛な時間を過ごす学校に
わざわざ通う必要はないかと思います。
もし親が無理やり学校に行かないといけないと言えば
一度、議論し合うことが大事になると思います。転校しても
いまはSNSがあり前の情報が筒抜けになっていたりと心機一転という事が
なかなか出来ないというのが今の現状かなと思います。
だったら、学校に行かないが一番の得策です。
ネットで勉強するという考え方や塾を使うという考え方、
社会出ていちばん大事なのは、今までの勉強だったりします。
高度な職になればなるほど今までの勉強の大切さがわかります。
そう世の中、結構厳しくて緩いです。
学校に行かない場合、20代になる前にできるだけ資格は必要になります。
簡単に言えば学力の証明書がないので、証明する資格が必要になります、
高卒認定試験(旧大検)には必ず合格しときましょう。だた世の中、厳しいので
それだけでは難しい。そこで自分が興味のもった国家資格を取得することを強くオススメします。
国家資格や高度資格は社会に出てからも自分の身を助けます。
学校に行かないを選択することにより
見えない不安が絶えず心の何処かに持つと思います。
なので、まずは自分が取れそうな資格から取得すること、そして
土日は外に出ることが大事です。ずっと家の中にいると知らず知らずの内に
負の考えが溜まっていきます。そうなると最初は頑張ろうと思っていたことも
投げ出してしまいます。なのでメリハリをつける意味でも
土日は外に出ることをオススメします。
また、学校に行ってみようと考えも出てくると思いますが
何度か挑戦して駄目だったことを繰り返して自分を追い詰めるより
いまの環境で飛躍する方が大事です。

タグ

B00HTXB4G0, アニメ英会話学習法, メリハリ, 世の中, 何処か, 何度か, 国家資格, 土日, 学校, 得策, 心機一転, 旧大検, 社会, 筒抜け, 考え方, 証明書, 選択, 高卒認定試験,

何者にもなれなかった症候群。

2016.10.04

Logging


何者にもなれなかった症候群。
「俺は海賊王になる!」と言った少年達が
いつの間にか年老いて中年になる、そして気づく
「自分、何者にもなれなかった」と、それはとにかく痛々しい。
35歳過ぎても、何かを目指している人は
ある意味、人生を賭けた賭けだと思います、そんな人を冷ややかな視線で見つめる人もいると思いますが
「人生は自分自身の選択で決める」訳なので結局、他人が指図する必要はないと思っています。
いまの中年は第一氷河期世代です。
この氷河期世代は、いまでも放ったらかしで政府も手厚い援助もなしで、今に至っている人が大半だと思います。社会も政治も信用していない。そういう中で生きてきた中年、フリーター達はいまでも「悶々」とした気持ちがある意味、他の世代より強い傾向があるのではないかと思います。
もしくは、諦めているかどちらかだと。
この氷河期世代に「諦めろ」というのは、はっきり言って「人生諦めろ」と言っているようなモノ
なので、それは駄目だと感じます。
じゃどうするか、「勝つまでやれ!」「違う土俵で戦え!」と彼らに叱咤激励する事を進めます。おそらく彼らは
「何者にもなれなかったわけでもなく」、もう何者になっているのですが、ただ時代が悪かったという側面があり
フリーターとして生きているわけです。
その今までの経験を「違う土俵」で生かさない限りおそらく彼らは「何者にもなれなかった」とつぶやく事になるだろうと感じます。
彼らに言いたい事は考えをシフトすることです。
(自分へ贈る言葉+同世代へ贈る言葉)

タグ

35, いま, それ, どちらか, フリーター, もの, , 世代, , 中年, , 人生, , , 他人, 何か, 何者, 信用, , 傾向, 大半, 少年, 必要, 意味, 指図, 援助, 放ったらかし, 政府, 政治, 気持ち, 氷河期, 海賊, 症候群, 社会, 自分, 自身, 視線, , 賭け, 選択, 駄目,

結局、SNSなんてものは暇な時しか使わない?

2016.05.05

Logging


結局、SNSなんてものは暇な時しか使わない?
もしくは宣伝か、やり取りぐらいか、感情の放出の時しか
使わなくなった気がする。
Twitterだったら使い出すとあれもコレも
呟くことも有るけど、リアルと関係のあるSNSっていうのは
そうも行かず、無難なことしか呟かないことが多いし
ましてや、人とつながりのあるSNSアプリでは
大体の人は無難なことしか言わないのではないだろうかと
思っています。
文字で書くと感情がうまく伝わらないことが多い。
おそらく文字より音声、音声より動画の方が
感情が伝わりやすい気がします。
これからの世代は殆どのひとがSNSとうまく
付き合っていかなくてならないだろうと思います。
もしくは全然、使わないという選択をする人も出てくると
思います。
自分はネットが好きですし、これからもSNSというものを
使っていくと思います。
コノ頃思うことは、
もう少しSNSの交流関係を増やしたいなと思うのですが
中々、広がらないですね・・・。

タグ

SNS, SNSアプリ, コノ頃思うこと, ソーシャルメディア論, つながり, ひと, やり取り, 世代, 中々, 交流関係, 宣伝, 感情, 放出, 文字, 殆ど, 結局, 選択, 関係, 音声,

99%ありがとうをパラ読みして(`・ω・´)

2014.08.28

Logging


藤田正裕さんは正直ものだと99%ありがとうをパラ読みして思った。

交換しよっか?
おまえとおまえのつまんねー生活への愚痴や言い訳、もう散々・・・・正直、クソくらえ。
 

この文面を読んだ時、この人は強いわ。もう十分、ALSという病に勝っている、あとは根治させる薬を待つだけです。たぶん、この人はALSという病に勝つと思います。病に勝つという気持ちを持っている人はその時点でもう勝っているだと自分は思います。毎日、生と死の戦いをしている、それだけでも並外れた精神力です。そして生きるを自分で選択している。
普通の人は病に侵されると精神がまいります{なんで自分は、こうなるのだと思うんです普通は}、そこから這いがってくる人は少ない、それに打ち勝つ人が中にはいます。そういう人は精神力が強い。何クソかという生へ執着心=精神力が強い人だと思います。ALSに勝ってほしいと自分は心から思います。
こういう人こそカッコイイっていうだなと心底おもいます。

タグ

99, ALS, nbsp, あと, おまえ, クソ, そこ, それ, それだけ, もの, , 交換, , , 執着心, 心底, 愚痴, 戦い, 散々, 文面, , 時点, 普通, 根治, 正直, 正裕, , 毎日, 気持ち, , 生活, , 精神, 精神力, 自分, , 藤田, 言い訳, 選択,