WEB技術

  • バナー作りにイラレとかフォトショいらない!?Adobe CC Expressがすごい件

    CC Express

    アプリはこちらです。

    こんな感じのアプリで、Instagramのストーリーや、youtubeのサムネなど簡単に作れるものです。

    PC版をみて、ほーん便利そう。ぐらいに思ってました。

    スマホだけで作業を完結させたい人にはめちゃくちゃ有用なアプリ

    先日からスマホだけでブログの更新をするべく、いろいろな工夫をしていました。

    サムネイルの作成だけは、「何とかならんかなー」と頭を悩ませていた部分でした。

    Canvaとかめちゃくちゃいいんですけど、プロにしないとテンプレや使える画像が少なくて悩んでました。

    そこで見つけたのがCC Expressです。

    スマホでもちゃんとしたバナー画像が作れる!

    ぶっちゃけそこまでちゃんとしてなくてもいいんです。

    それなりで。

    半分趣味で書いているブログですので、そこまで労力を割くつもりはありません。

    いい感じのフリー画像を拾ってきて、そこにちょこっとテキストを入れられれば十分なんです。

    しかし、このアプリそれをはるかに超える働きをしてくれます。

    Adobe stockの素材が自由に使える

    デスクトップ版アプリの月額契約者に限りです。無料アカウントの人は利用できません。

    自分は契約者なので利用することができます。

    ストックといえば、通常の契約の他に別途利用契約が必要な特別なものだったはず。

    しかも利用点数は月に10点だったんじゃないでしょうか。

    それが自由に使えるとは、契約のバグではないでしょうか。

    どうしちゃったんだ!

    Adobe fontも使えるみたいなのでめっちゃすごいです。

    操作UIもなんかすごい

    こんな感じの昔のiPodみたいのをグルグルするとタイトルのスタイルを切り替えていくことができます。

    これは見たことない操作性です。

    まとめ

    CC Expressは思いのほかすごいので、Adobe契約者はみんな試してみるべき。

    Adobe stockの画像が使えちゃうよ!

    簡単な画像作成はこれで済ませちゃいましょう!

  • googleフォームを利用して掲示板をつくろう!

    掲示板を構築してみたいと思います。
    完成したものはこちら → https://tlog.work/bord.php

    20210903 リンク切れ修正しました。

    動作動画↓

    完成したものを見ると、googleフォームじゃないじゃん?
    って感じですが、googleフォームでスプレッドシートに内容を送信し、送信した内容を表示する、という中身になってます。

    https://logzitsu.tlog.work/google%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%EF%BC%81/
    https://logzitsu.tlog.work/%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%A7api%E3%81%8C%E4%BD%9C%E3%82%8C%E3%82%8B%E3%82%89%E3%81%97%E3%81%84%E3%81%AE%E3%81%A7%E8%A9%A6%E3%81%97%E3%81%A6/
    https://logzitsu.tlog.work/json%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92php%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

    上記の組み合わせで構築します。

    googleフォームを作ります。
    https://docs.google.com/forms/

    名前とコメントが投稿できるだけです。

    回答の、スプレッドシートのマークを選ぶと、回答のシートが作成できます。

    こんな感じ。

    このシートで、
    ツール > スクリプトエディタ
    を選択してください。

    エディタが立ち上がったら次のように入力

    function doGet() {
      const sheet = SpreadsheetApp.getActive().getSheetByName('フォームの回答 1')
      const rows = sheet.getDataRange().getValues()
      const keys = rows.splice(0, 1)[0] 
    
      const data = rows.map(function (row) {
        var item = {}
        row.map(function (val, i) {
          item[String(keys[i])] = val
        })
        return item
      })
    
      return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON)
    }

    ウェブアプリケーションとして導入します。

    許可作業が求められるので許可してください。

    生成したURLにアクセスした場合に、何か回答がすでにある場合は以下のように表示されるはずです。

    次に自分の所有しているレンタルサーバーにつぎのような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">
        <title>Document</title>
    </head>
    <body>
    
    <?php 
    $url = "https://script.google.com/macros/s/AKfycbwafJYUvnoL0iVRMjWL5ruLsPKEfXq9oLWmr8YIS0Zmw6uiaR9D/exec";
    $json = file_get_contents($url);
    
    //データを変換
    $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
    
    //配列に入れる
    $arr = json_decode($json,true);
    
    ?>
    
    <h2>掲示板</h2>
    
    <ul>
    <?php
     foreach ($arr as  $text) {
       echo "<li>";
       echo "<p>投稿時間:".htmlspecialchars($text["タイムスタンプ"], ENT_QUOTES, 'UTF-8')."</p>";
       echo "<p>名前:".htmlspecialchars($text["名前"], ENT_QUOTES, 'UTF-8')."</p>";
       echo "<p>コメント:".htmlspecialchars($text["コメント"], ENT_QUOTES, 'UTF-8')."</p>";
       echo "</li>";
     }
    ?>
    </ul>
        
    </body>
    </html>

    https://tlog.work/bord.php

    投稿用のgoogleformは次の通り

     https://docs.google.com/forms/d/e/1FAIpQLScyIRxqjo00X-il7hakCPMONAAGnhg9V35IpRG6zuvDgNTqUw/viewform

    自由に試してみてもらって構いません。(個人情報や、みられて困ることは書き込まないでね。削除対応はしません。)

    投稿欄をページ内につける

    投稿する場所がバラバラだと使いにくいので、ページの下にくっつけます。

    https://logzitsu.tlog.work/google%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E3%82%AA%E3%83%AA%E3%82%B8%E3%83%8A%E3%83%AB%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%EF%BC%81/

    これをやるだけです。

    <!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">
        <title>Document</title>
    </head>
    <body>
    
    <?php 
    $url = "https://script.google.com/macros/s/AKfycbwafJYUvnoL0iVRMjWL5ruLsPKEfXq9oLWmr8YIS0Zmw6uiaR9D/exec";
    $json = file_get_contents($url);
    
    //データを変換
    $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
    
    //配列に入れる
    $arr = json_decode($json,true);
    
    ?>
    
    <h2>掲示板</h2>
    
    <ul>
    <?php
     foreach ($arr as  $text) {
       echo "<li>";
       echo "<p>投稿時間:".htmlspecialchars($text["タイムスタンプ"], ENT_QUOTES, 'UTF-8')."</p>";
       echo "<p>名前:".htmlspecialchars($text["名前"], ENT_QUOTES, 'UTF-8')."</p>";
       echo "<p>コメント:".htmlspecialchars($text["コメント"], ENT_QUOTES, 'UTF-8')."</p>";
       echo "</li>";
     }
    ?>
    </ul>
    
    
    
    <!-- jQueryの読み込み -->
    <script
    src="https://code.jquery.com/jquery-3.3.1.js"
    integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
    crossorigin="anonymous"></script>
    
    
    <script>
    function postToGoogle() {
    
    //入力内容を取得
    var field1 = $('[name="entry.335927705"]').val();
    var field2 = $('[name="entry.79169581"]').val();
    
    //urlやentryは書き換えてね。
    $.ajax({
    url: "https://docs.google.com/forms/d/e/[key]/formResponse",
    data: {"entry.335927705": field1,
    "entry.79169581": field2
    },
              type: "POST",
              dataType: "xml",
              statusCode: {
                  0: function() {
                      //Success message
    location.href="xxxxxx/bord.php";
                  },
                  200: function() {
                      //Success Message
    location.href="xxxxx/bord.php";
                  }
              }
          });
          }
    </script>
    
    
    
    <form action="#" method="post">
      <input type="text" name="entry.335927705"  value="" placeholder="名前"><br>
      <textarea name="entry.79169581"  placeholder="コメント"></textarea><br>
      <input type="button" onClick="postToGoogle()" value="送信">
    </form>
        
    </body>
    </html>

    できたもの

     https://kouga.tlog.work/bord.php

    以上です。装飾でチャットっぽくもできると思うのでそういうのもいいかもしれませんね。
    投稿後、キャッシュで投稿内容が表示されない場合がありますね・・・。
    対策は色々あると思いますが、今回はそこまでやりません(飽きてる)
    リロードして確認してください。

    応用編

    生活を記録するボタンを作ってみました。
    こちらはgithubで公開しています。

    https://logzitsu.tlog.work/%E7%94%9F%E6%B4%BB%E3%81%AE%E8%89%B2%E3%80%85%E3%82%92%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%99%E3%82%8B%E3%83%9C%E3%82%BF%E3%83%B3/
  • jsonデータをphpで利用する方法

    次のように利用しましょう。
    スプレッドシートから生成したjsonデータをPHPで利用しています。

    https://logzitsu.tlog.work/%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%A7api%E3%81%8C%E4%BD%9C%E3%82%8C%E3%82%8B%E3%82%89%E3%81%97%E3%81%84%E3%81%AE%E3%81%A7%E8%A9%A6%E3%81%97%E3%81%A6/
    <!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">
        <title>Document</title>
    </head>
    <body>
    
    <?php 
    $url = "https://script.google.com/macros/s/AKfycbxR0D4OJhcTKoB_UX5O9WTkYMlfsj_I1UYxx003/exec";
    $json = file_get_contents($url);
    
    //データを変換
    $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
    
    //配列に入れる
    $arr = json_decode($json,true);
    
    //配列を全て吐き出す
    var_dump($arr);
    
    ?>
    
    <h2>
    <?php //0番目のタイトルを出力
    echo $arr[0]['title'];
    ?>
    </h2>
    
    <p>
    <?php //0番目のタイトルを出力
    echo $arr[0]['contents'];
    ?>
    </p>
    
    <h2>ループで出力</h2>
    
    <ul>
    <?php
     foreach ($arr as  $text) {
       echo "<li>".$text["title"].$text["contents"] ."</li>";
     }
    ?>
    </ul>
        
    </body>
    </html>
    

    https://kouga.tlog.work/test.php

    php.iniの設定で「file_get_contents」が使えない設定だと動きません。
    無料サーバーでは動きませんでした。
    さくらサーバーではすんなり動きました。XFREEは🙅‍♂️でした。

    これで、「スプレッドシートを更新したらPHPサイトに反映できる」
    というサイトが実現できましたね。

    googleフォームを組み合わせれば掲示板ができるのでは?

    スプレッドシートはgoogleフォームで内容を追加する仕組みがもともと備わっていますね。
    今までやってきたことを組み合わせれば、掲示板やチャットが作れるのではないでしょうか?

    上記ではスプレッドシートの編集は自分しかできないため、適当に出力していますが複数人が投稿できる場合はセキュリティにももう少し気を使う必要がありそうです。

    ↓やってみました

    https://logzitsu.tlog.work/google%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E6%8E%B2%E7%A4%BA%E6%9D%BF%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/
  • Googleスプレッドシートでスクレイピング(json生成)

    スプレッドシートには超便利な、データ収集機能がついてます。
    意外と知ってる人いないけど便利すぎてたまげる。

    ImportHtml

    =ImportHtml("http://www.data.jma.go.jp/obd/stats/etrn/view/nml_sfc_ym.php?prec_no=44&block_no=47662&year=2019&month=12&day=&view=", "table", "0")

    URLは 取得したいデータのあるページ
    クエリはテーブル
    指数はなんばんめにあるか。

    って感じですね。クエリで指定できるのはlistかtableのみ。

    =ImportHtml("http://www.data.jma.go.jp/obd/stats/etrn/view/nml_sfc_ym.php?prec_no=44&block_no=47662&year=2019&month=12&day=&view=", "table", "0")

    天気に関するページからデータを取ってきてます。

    IMPORTXML

    
    //タイトル
    =IMPORTXML("https://www.yahoo.co.jp/","//title")
    
    //ディスクリプション
    =IMPORTXML("https://www.yahoo.co.jp/","//meta[@name='description']/@content")
    
    =IMPORTXML("https://www.yahoo.co.jp/","//a/@href")
    =IMPORTXML("https://www.yahoo.co.jp/","//a/text()")

    最初にURL
    次の引数はXpathです。

    デベロッパーツールでxpathを入手できるのですが
    なかなかうまく出力できません。
    //titleとかいれると、ページのタイトルが出てきます。

    上の例はリンク先一覧が出てきます。

    Xpathについて記事があったので貼っておきます
    https://qiita.com/rllllho/items/cb1187cec0fb17fc650a

    うーむ、やってもうまくいかない・・・

    https://logzitsu.tlog.work/%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%81%A7api%E3%81%8C%E4%BD%9C%E3%82%8C%E3%82%8B%E3%82%89%E3%81%97%E3%81%84%E3%81%AE%E3%81%A7%E8%A9%A6%E3%81%97%E3%81%A6/

    とってきたデータでjsonをつくると面白いかもしれません。

    サイトに出力利用する方法は以下

    https://logzitsu.tlog.work/json%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92php%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
  • スプレッドシートでapiが作れるらしいので試してみる

    元記事はこちらです
    https://qiita.com/gurigurico/items/2432ae08118050a280e8

    スプレッドシートからjsonファイルを提供できるらしいです。

    スプレッドシートを作ろう

    スクリプトエディタを起動

    スクリプトエディタからjsonを作る

    データを整形する。
    元記事のスクリプトを引用させていただきました。

    function doGet() {
      const sheet = SpreadsheetApp.getActive().getSheetByName('シート1')
      const rows = sheet.getDataRange().getValues()
      const keys = rows.splice(0, 1)[0] 
    
      const data = rows.map(function (row) {
        var item = {}
        row.map(function (val, i) {
          item[String(keys[i])] = val
        })
        return item
      })
    
      return ContentService.createTextOutput(JSON.stringify(data)).setMimeType(ContentService.MimeType.JSON)
    }

    公開する。
    全員に公開で、アプリケーションを承認するとURLが出てきます。 h

    https://script.googleusercontent.com/macros/echo?user_content_key=9a7pZ_BBAtLCjhH1866wT7fyzdKaxcwIWGwDkfdHQv0JzLSqM67IKcUsvTst2ussqGj4_yl-IFynOpE1VMvY_OJUzgJCpTSYm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnGmZMfbfOToA7xjsrq03DF80Az8Jlk1D_cIaUahVhh9oocK5TpRSqfMYZpTak_o22Q&lib=MCREZQWbIOU9IyyNmKrcX-B-j0EsM5XUi

    できました!

    ちゃんと表示されます。

    試してみる

    スプレッドシートを更新すると・・・?

    ちゃんとjsonにも反映されます。

    これはすごい。
    すごい可能性を感じるので、これについてもう少し掘り下げてみたいと思います。

    続き

    https://logzitsu.tlog.work/json%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92php%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

    おまけ

    function doGet() {
      //シートを取得する
      const sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
      const rows = sheet.getDataRange().getValues();
    
      //Browser.msgBox(JSON.stringify(rows));
      return ContentService.createTextOutput(JSON.stringify(rows)).setMimeType(ContentService.MimeType.JSON);
    }

    縦並びの場合は多分これでいける。

  • どっちがmargin(マージン)でどっちがpadding(パディング)か迷う人を救済する記事

    どっちも『余白』と説明される問題

    CSSを勉強し始めたばかりの人たちにとっては、『padding』や『margin』など、聞き慣れない英語がいっぱい出てきて、その上日本語訳が「内側の余白」「外側の余白」となると、もう覚えずらいことこの上ないですよね。今回は覚えるお手伝いをしたいと思います。

    解決策1:知っている言葉と関連付けて覚える

    padding(パディング)は和訳すると『詰め物』なんて意味があります。
    肩パッドなんかが連想しやすいと思います。
    肩パッドは内側につけるので、paddingはborderの内側という感じで覚えて見ましょう。

    marginは、paddingじゃない方だから、borderの外側。

    解決策2:イメージで覚える

    解決策1でpadding(パディング)は和訳すると『詰め物』と説明しました。
    では、なにかを梱包する想定で考えましょう。
    下のようなイメージです。

    ここでいうpaddingは、緩衝材の代わりにしている白いタオルです。

    ではmarginはどこでしょう。正解は箱の外側です。
    他の要素との隙間を空ける用途でよく使うと思いますので、箱を2つ並べてみました。

    最後に

    小さい頃と違って、おとなになると関連性のないことを覚えづらくなるらしいです。
    逆に、関連付けると頭に残り易くなります。
    今回のことに限らず「記憶力がおちた」と単純に考えず、なにかに関連付けて頭に入れるようにしてみてください。勉強したことが頭に残りやすくなりますよ!

  • もうこれでいいじゃん。Googleフォームをオリジナルデザインで使う方法!

    今まで知らなかったんですけど、うまーく工夫するとオリジナルのデザインでgoogleフォームが作れちゃうみたいです。
    メールフォームのためだけに、PHPの動くサーバーを借りなくていいという利点があります。
    まあ、だいたい一番安いプランで動きますけどね。
    HTMLの知識と、Chromeとかのデベロッパーツールを使う必要があります。

    参考にしました。

     https://qiita.com/sota6412/items/fa077cbf820faca30598

    まず普通にフォームを作ります

    今回はこちらのフォームのソースを使っちゃいました。

    http://www-creators.com/archives/2486

    自作でいいんですが参考にしてみると良いかと思います。

    Googleフォームで同じものを作ろう!

     https://docs.google.com/forms/

    作ったら、フォームページにアクセス

    これのリンクにアクセスします。

    fromの「action」とinputの「name」をそれぞれ取得

    ブラウザのデベロッパーツールを立ち上げましょう

    action

    name

    取得した情報を、作ったものに反映していきましょう。
    めんどくさい。

    ラジオボタンやチェックボタンもわかりにくいですがinputタグがあります。

    それぞれ、作ったフォームに当て込みます。
    ラジオボタンとチェックボックスは、valueの値をしっかり入れておきましょう。

    動くか試してみる

    PHPで動くシステムと違い、ローカルからPOSTしても問題なく動くのが素晴らしいですね。

    以下のような画面が表示されたら成功です。

    でもこの画面が表示されたらびっくりしてしまいますね。
    あとで解決したいと思います。
    その前に受信側の設定。

    スプレッドシートに結果が記載されるようにする

    フォーム作成画面から回答の表示画面に行けるのですが、その画面で上記のアイコンをクリックするとスプレッドシートが作成できます。
    送信結果がスプレッドシートで一覧として確認できます。

    上記のような感じ。
    フォームが届いたら通知が届くように設定しておきましょう。

    これで保存すると、フォームが届くたびに通知が届きますので、逃しません。

    送信後の画面を変更する

    ajaxで送信するんだそうですよ。

    参考にしました。

    Googleフォームをカスタマイズして導入、Ajax処理を行う
    https://qiita.com/sugitata/items/182173c01e0470a3a4a8#_reference-a3a8c18aab158ee0c9de

    jQueryのajaxを書き足します。

    <!-- jQueryの読み込み -->
    <script
    src="https://code.jquery.com/jquery-3.3.1.js"
    integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60="
    crossorigin="anonymous"></script>
    
    
    <script>
    function postToGoogle() {
    
    //フォームの隊を取得
    var field1 = $('[name="entry.2094131772"]').val();
    var field2 = $('[name="entry.1337467998"]').val();
    var field3 = $('[name="entry.1133430643"]').val();
    //ラジオボタンの取得は↓
    var field4 = $('[name="entry.204845324"]:checked').val();
    var field5 = $('[name="entry.770373466"]').val();
    
    //urlやentryは書き換えてね。
              $.ajax({
              url: "https://docs.google.com/forms/d/e/[key]/formResponse",
              data: {"entry.2094131772": field1,
    "entry.1337467998": field2,
    "entry.1133430643": field3,
    "entry.204845324": field4,
    "entry.770373466": field5
    },
              type: "POST",
              dataType: "xml",
              statusCode: {
                  0: function() {
                      //Success message
    location.href="https://(転送先のURL)";
                  },
                  200: function() {
                      //Success Message
    location.href="https://(転送先のURL)";
                  }
              }
          });
          }
    </script>

    送信ボタンはsubmitから上記の関数が動くように書き換え

     <input type="button" onClick="postToGoogle()" value="送信">

    サンクスページは作って、転送先URLに設定してください。

    これで動けばOK!

    お疲れ様でした!!

    あとはフォームバリデーションのプラグインとか使うともっと本格的になりそうです。
    あと、googleスクリプトとか使えば自動返信メールもできそうですね。

    googleフォームには通常のフォームにはない利点もありますので、使いようによってはwordpressやphpより便利に使うことも可能そうですね。

  • 【PHPの知識不要】PHP工房さんのフリーメールフォームの設置と使い方

    メールフォームの必要な案件はwordpressで行うことが多いのですが、そこまで複雑ではない案件はPHP工房のフリーメールフォームを使うことがあります。
    サポートが収益になってる部分もあると思いますので紹介と簡単な使い方のみにしたいと思います。
    カスタマイズやサポートなどは本家サイトの方で親切に回答してもらえるようですので是非利用してみてください。

    そもそもメールフォームとは

    企業などのサイトからのお問い合わせは「メールフォーム」を設置するのが一般的となっています。
    企業側のメリットとしては、メールアドレスをサイトに表示しなくてもメールを受け取れるので、スパム対策になるというのがあります。
    また、送信者側もメールアドレスへ直接メールをするのは抵抗があるが、メールフォームで項目がある程度決められている場合は送信に抵抗がないというのがあります。
    送信ミスなども少なく、自動返信や測定など、高度な機能を追加するのも容易です。

    PHPプログラムの自作は危険

    ちゃんと知識がある場合は問題ないですが、PHPはサーバーで様々なプログラムを動かすものですのでセキュリティに穴があり、悪用できてしまうと、サイトの改変などにあい、大変な被害を被る可能性があります。
    セキュリティに関する知識がない場合は、それらを熟知した人間の作成した既存のプログラムを使わせてもらうのが無難と言えます。

    PHP工房 フリーメールフォームとは

    https://www.php-factory.net/

    上記のサイトからアクセスしてください。
    無料で使えるメールフォームが配布されていますのでありがたく使わせてもらいましょう。
    (知識がなく断定できないので恐縮ですが)セキュリティ対策の設定を行うことができます。

    設置と利用にしぼって言えば、PHPの知識は特に必要ありません

    ダウンロードと実装方法

    ③ UTF-8 が一般的な形式です

    以上がダウンロード方法です。

    サーバーにアップロードしよう

    • mail.php
    • contact.html

    の2つのファイルがあると思います。

    mail.phpはプログラム本体です。
    contact.htmlはフォーム入力欄です。
    そのまま使ってもいいですが、カスタマイズしたり自分の作ったものに差し替えて使います。

    mail.phpを編集して設定を行います。
    コメントである程度解説が書いてありますので、それに従って情報を入力したり編集するといいと思います。
    とり合えず、$to (管理者メールアドレス)だけ正しい内容を入力すればメールの送信は可能だと思います。

    編集後PHPの動くサーバーに2つのファイルをアップロードしましょう。

    https://logzitsu.tlog.work/ftp/

    早速使ってみよう

    ブラウザからアップロードしたcontact.htmlにアクセスしましょう。
    メールフォームが表示されたはずです。
    前の欄でmail.phpの管理者メールアドレスを変更した場合はそこにメールが届きますので試してみましょう。
    確認画面や送信完了画面などが動作するのが確認できたと思います。
    メールにちゃんと送信内容がとどいていれば成功です。

    自分のメールフォームで使うには

    しっかりmail.phpの中身の設定を埋めておきましょう
    署名欄などありますのでしっかりといい感じの内容に変えておきましょう。

    さて、自作のメールフォームとmail.phpを結びつける方法です。

    formタグのaction属性をmail.phpとする

    actionはフォームデータの送信先なのでアップロードしたmail.phpを記載して繋げましょう。

    inputなどのname属性を項目の名前にする。

    「お名前」「電話番号」「メールアドレス」
    などなど、「日本語」で書いてしまいましょう。
    ここで記載された内容が確認や送信メールで反映されます。よくできていますね。

    注意点は上記の2つだけ

    使い方がわかってしまえばなんともないですね。
    使い方がわからなかったり、うまく動かない場合はPHP工房さんに問い合わせるといいと思います。
    カスタマイズなども行ってくれるみたいですよ。

    さらに

    もともと便利ですが、JSなどとくみあわせると本気で使えるメールフォームが出来上がっちゃいますよ。もっと便利な有料版も存在するようです。
    是非試してみてください。

  • ブログ大改造!?記事のリライトとSEO設定の見直し!

    最近アクセス数が伸びてきた実感があるので、ブログ更新にやる気が出てきましたしのはらです。

    最初のころの方が書きたいことを書いていて、割と有用な記事も多かったと思うのですが、正直あまり伸びていません。

    アクセスが伸びやすいタイトルのつけ方を模索し始めてから、やはり反応が変わってきた感じがあるので「ちゃんとタイトルを見直そう!」と思った次第です。

    せっかく大改修をするので、そのアクセスのビフォーアフターもお届けしたいと思っています。

    ブログを書いている中で、あとでちゃんと書こう、とか後日追記しますとか、そんなことを書いている気もしますので、その辺も見直したいと思います。

    リライトって何するの?

    私もよくわかってないです(笑)

    タイトルがよくない〜ってのがいっぱいあると思うので見直します。
    それとアクセス数の集めそうな記事はdesctiption(説明文)についてもしっかり考えてみてもいいかなと思っています。

    記事の統合もいいかもしれない。

    似たような記事が複数ある場合は、統合して一つの記事にまとめてしまうのもありかもしれませんね。
    あと、カテゴリやタグについても入力をしっかりしてみるというのも試してみたいと思います。

    よくわかんねーけどとりあえずやってみよう

    ブログに意思表示すると作業が捗るってところが少なからずあるので、記事にしている節があります。
    最初から完璧なんてことはないと思うので、とりあえずやってみたいと思います!

  • WEB制作で食べていきたいならまずこの記事を読みなさい。簡単WEB作成サービスの嘘とホント

    最初に

    初めましてしのぴと申します。

    超高圧的なタイトルですね。ごめんなさい。ちょっとSEO的に効果あるか試してるだけなんで許してください。

    それでは始めたいと思います。
    今回は Web 制作の方法についてまとめていきたいと考えています。
    「とりあえずホームページが欲しい」と言った方もこの記事の対象にして行きたいですが、ウェブデザイナーとして仕事をしたいと言う方も対象にしています。

    WIXやjimdoってどうなの?

    昨今は、簡単なウェブサイトができるようという謳い文句のメール制作サービスがいっぱいあります。
    これらを利用すると、ある程度のものはできますが結局のところ素人臭くなんだかダサいサイトになってしまうことが多いです。

    また、ちょっと変わったことがやりたいと思っても、できない。有料である。
    そんなことがおおいので、あまりお勧めできるものではありません

    「とりあえず」といったレベルの情報を載せておきたい、という場合は便利なのでこれらのサービスを利用すると良いと思います。

    要望があれば上記のようなインスタントな Web サイトの作り方などの使い方も記事にできたらいいなと思っていますがどうでしょうか。(反応がなさそうならやりません)

    WEB制作とインターネット

    今回は Web 制作とは何かという話をしていきたいと思います

    制作とは何かという話をしていきたいと思います結構 制作とは何かという話をしていきたいと思います結構簡単 制作とは何かという話をし

    さてまずインターネットという仕組みについてお話ししたいと思います

    インターネットというのは HTML 文章を共有するサービスのことです

    サーバーに htmlファイルをアップロードすることで全世界の人がそのファイルにアクセスし情報を閲覧できます。

    HTMLとは

    インターネットはHTML 文書を基本として成り立っています。
    例えばよく使われる「ワードの文章」などはそのままではサイトとして表示することはできません。

    HTML の書き方に則って文章を作成してあげなければいけません
    最初にこの HTML 文書の作り方を覚える必要があります。

    初期の HTML は文章と画像を載せるだけのシンプルなものだったのですが、現在は閲覧者から情報の入力を受け取り、表示内容を変えたりする、能動的なアプリケーションの役割をするウェブサイトも多くなっています

    これをよくリッチなウェブサイトなどと呼んだりしますね。

    HTML自体に装飾の仕組みがあるのですが、 HTML の中に装飾の情報を入れてしまうと文章として非常にごちゃごちゃして扱いにくいという問題がありました。

    これを解決するために 、CSS という装飾用の技術を組み合わせることによって装飾を行います。

    html も CSS の日々心配しており書き方が少しずつ変わってきていますので、常に最新の技術に注意を払っていくことが、WEB業界で生き残っていく秘訣です。

    そして HTML と CSS だけでは先ほど言ったアプリケーションのような動的なサイトを作ることは非常に難ししいです。
    基本的には静的なWEBサイトを作るものための言語です。

    JavaScriptについて

    HTML では JavaScript というプログラミング言語を用いることができます。

    JavaScript ではウェブサイトにアニメーションをつけたり、ちょっとしたメモアプリを作ったり、タイマーなどのちょっとしたアプリケーションを作ったりといったことが可能になります

    JavaScript は 閲覧者のパソコンの中で動く者なので情報の改変ができてしまったりまた閲覧者の環境によって動かなかったりなど不安定な要素がありますので信頼性の高いプログラミングには利用できないという特徴があります

    例えば掲示板やチャットシステムなどサーバーにデータを置いておきそれを更新し表示するといったプログラムがサーバーサイトのプログラミング言語でないと難しくなっています

    サーバーサイドの言語は PHP がよく用いられています。

    サーバーサイドの言語は何も複数ありますのでやりたいことに応じて学ぶ言語を選んで変えていくといいかもしれません

    サーバーサイドで動く JavaScript がありますので JavaScript を極めればかなりの多くのことができると考えて良いでしょう。

    HTML はサーバー上に設置する時に FTP ソフトというソフトを使わなければデータをアップロードできません。

    これは HTML 言語が分かる人間であればたいしたことではありませんか、新たにページを作ることがなかなか面倒くさくなってしまいます、

    そこで皆さんのブログもしくは SNS Twitter などを利用したことはないでしょうか

    これらのサービスがレベル上に入力欄が存在しそこに文字などを入力することによって新たなページを生成することができるようになっています

    こういった仕組みを CMS と呼びます

    ブログなどが CMS なの代表的なものですがドログバサービス提供者様々な権限がありますのでサービス提供者が気に入らないうつ昭和削除する ています

    10歳 Web 制作で主流になっているサービスが WordPress になります

    桑のストレスは自分のサーバーにプログラムもインストールして自分のサーバーにブログシステムを設置して使うことができるというイメージです

    WordPressを勉強した方が良い

    これから Web 制作を勉強したいと考えている人はこの WordPress の作成を部屋に入れて勉強していた方がいいでしょう

    WordPressについて勘違いされがちなこと

    WordPress の運用は非常に簡単で便利に行うことができる仕組みになっています。
    そのため WordPress による Web 制作は非常に簡単なものだと勘違いされがちです

    しかし WordPress テーマを一から作成するというのは前述した HTML と CSS の知識に加え WordPress は PHP でできているシステムですので PSP の知識と WordPress 独自のテンプレートタグと呼ばれるもののしくみも知っている必要があります。

    以上がプログラミングに関する知識です。

    根津製作に関してはこれだけではありません

    Web サイトの情報の位置を決める構成を作ったり見た目つまりデザインを考えたりする必要がありますまたその考えたデザインを形にするためにグラフィックソフトを扱うことも必要になります

    日本では Adobe というグラフィックソフトの会社がほとんどのデザイン会社で採用されています

    聞いたことがあるかもしれませんがフォローショーツはその後火のソフトです

    利用料はそれなりにかかりますが今後仕事にするのであれば契約して早めに使い慣れておくことをお勧めします

    グラフィックソフトが使えるだけでなく基本的な Web デザインの知識がウェブサイトを使って普段使い慣れていると言う森それを実際構成やデザインに残すことができるというスキルも非常に重要になってきます

    つまりまとめると WordPress による Web 制作を部屋に入れている人間は次のような知識が必要になります

    HTML と CSS の知識

    サイトデザインをする場合は
    デザインの知識
    デザインを形にするための Illustrator や Photoshop の知識
    ウェブサイト全般の基本的な知識
    PHPの知識
    WORDPRESSの知識
    Web 制作にはもう行った時にわたる手術が必要求められます

    多くの方はここでちょっとやりたくない気分になってしまうかもしれませんが心配することはありません就職するとなると多くの場合が部分用システムになっていますプログラミング 人間は数とプログラミングをやりますしデザインをやる人間はずっとデザインをやるという形が多いです

    またこの他にも信仰の管理をするディレクターやゆうあいと言うユーザーの使いやすさを専門とした職種である UI デザイナーなどもあります

    プログラミングだけひとつとっても CSS や JavaScript を担当するフロントエンドエンジニアサーバーサイドを担当するバックエンドエンジニアなどなど定期券メールを固執担当は HK メールを作成する担当は口座と呼ばれたりもします

    羽田最近は Web サイトに動画を埋め込むことも多いので動画担当者などの Web 制作の軍用の一般となっていることが多いです

    どちらかと言うと色々できる人間よりは一つのことに特化している人間の方がええわまたはいいことがありますので自分のやりたい分野を見つけてとにかく極めることが今後の自分の価値を高める手段になります。

    次の記事に続きます

    https://logzitsu.tlog.work/web/
  • 【悪用厳禁】みているページでJavaScriptを実行する方法 | chrome

    これができるってことを忘れることがあるんで、メモっておきます。

    まず、chromeでデベロッパーツールを開きます。

    続いてコンソールを表示させます。

    コンソールの

    ってなってるとこにコードを書き込みます。
    以上でーす。

    サンプルです
    このページでも動くはずなので試してみてくだあい

    //アラートを表示させる
    window.alert("わーい");
    
    //ボタンのクリック(クラスは変えてね)
    document.querySelector(".a2a_button_twitter").click();
    
    //テキスト入力
    document.querySelector( ".search-field" ).value = "ライフハック" ;

    直接CSS操作すればいいから意味ないけど

    //要素のcss変更
    document.querySelector(".site-title").style.color = "red";
    
    document.getElementsByClassName(".site-title").style.backgroundColor = "#ccc";
    
    document.getElementById("logo").style.display = "none";
    
    

    ボタンクリックテスト

    下の青いボタンをクリックできます。

    //ボタンのクリックその2
    document.querySelector("#count-btn").click();
    
    //ボタンを1秒ごとにクリック はできませんでした・・・
    setInterval(document.querySelector("#count-btn").click(),1000);

  • Macでコーテーションが勝手に変換されるのをやめる設定

    メモによくコードを蓄積してたびたび検索して使っていたりするのですが、クオーテーションが変換されてコードが動かなくなることがよくあります。

    ライターの人とかはこの方が便利かもしれませんが、コードをかく人にとってはは邪魔でしかない。
    地味ですが、設定で変えておきましょう。

    右上のIMEのボタンから「ユーザ辞書を編集…」をクリック

    これを

    よく見る素直なやつに変えます。

    以上です。

  • 利益を生む名著、「ザ・コピーライティング」を紹介します。

    今回はマーケティングの知識が詰まった 「ジョン・ケープルズ著 ザ・コピーライティング」を紹介したいと思います。

    あなたが今すぐにこの本を読むべき三つの理由

    と、まぁ本書に影響を受けまくっている見出しの付け方です。
    この本、430ページもありまして、まだ途中なのですがランディングページの作成について調べたり、見たり、聞いたりした内容がこの中に詰まってるではないか!と感じました。

    インターネット全盛期だからこそ役に立つ情報

    ザ・コピーライティングは80年以上前に書かれた本ですが、その内容は今もまったく衰えないものです。(中身は現代向けに改定されています)
    例に出てくるチラシとか、ランディングページの作りそのものではないか!

    そういった仕事をしている人はすぐに役にたつ書籍だと思います。

    コピー作成に根拠と自信が持てる

    この本の序盤で、「テストしなさい」「結果が全てだ」と書かれているのですが、そこに至る方法論がしっかりと書かれています。
    なので、いままでなんとなくでコピーを作ってしまっていたことに猛反省しました。見出しこそが超重要であり、そこに時間をかけなければならないことに気づかされました。
    読んですぐ身につくというわけではないと思うので、このブログで訓練しながらその感覚を身につけて、さらにアナリティクスなどの結果も見張っていこうかなと思っています。

    読んで終わりじゃない、実践あるのみ

    この本こそ、読んで「ふーん」で終わってはいけないと思いました。
    活かそうと思えば、あらゆるところで活かせると思います。
    (自分も絶賛実践中です。効果があるか楽しみです。)
    みなさんにも、役立つこと間違いなしです。

    ザ・コピーライティング 心の琴線にふれる言葉の法則 [ ジョン・ケープルズ ]

    価格:3,456円
    (2018/10/3 19:55時点)
    感想(25件)

  • ラズベリーパイを買ってみたのでメモ

    なんのために購入したの?

    lotとかnode.jsによるボットとか試してみようかな、と思ったからです。
    botに関して言えば、googleのサービスでも事足りるんですが、よりプライベートなプログラムを走らせることをしてみようかな、というものです。

    どれを買ったの?

    世代とか、スペックとかいくつかあるみたい。
    別に高機能は求めてないので、低電力低価格のラズパイゼロとやらでも良かったんですが

    Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Clear)-Physical Computing Lab

    新品価格
    ¥5,980から
    (2018/8/1 09:34時点)

    これにしました。sdカードにインストール済みだったり、各種コードがついてるもので一万円程度のものもあったんですが、そのへんはすでに持ってたのでこちらにしました。
    これはケースと、本体と、冷却用パーツのセットです。
    sdカードにosインストールに他のパソコンもいるよ。

    不安な人はこれで。それでも他に必要なものがあるよ。

    Raspberry Pi3 B コンプリートスターターキット (Standard, 16G)

    新品価格
    ¥9,980から
    (2018/8/1 09:37時点)

    モニタ

    I-O DATA モニター ディスプレイ 20.7型 EX-LD2071TB (ブルーライト軽減/スピーカー付/3年保証/土日もサポート)

    新品価格
    ¥10,980から
    (2018/8/1 09:39時点)

    これ使ってます。おすすめ。トラックパッド付きキーボード

    Logicool ロジクール ワイヤレス タッチキーボード K400pBK

    新品価格
    ¥2,409から
    (2018/8/1 09:40時点)

    届いたら・・・

    解説してるサイトを参照してね。
    https://qiita.com/cigalecigales/items/65e06116c9ccfb2307df

    RASPBIAN のGUIをインストールしたけど、ヘッドレスクロームが動かないので他のにした。
    調べたら動かす方法もありそうだけど、めんどくせーので諦めた。だってそれが主役だもん。

    ubuntuとかでやりてーな

    open suse というやつのインストールまではしたんですが、重い上に情報がない!
    すごくいいものだとは思うのだけれど、自分の使い方には残念ながらフィットしなかった・・・。
    時間食いすぎて他のことしたいなーという気持ちが強まったので、一旦これは放置します。

    64bitのOSがもっと出てきてほしいなぁ。

  • node.jsでtweetしてみる

    ヘッドレスクロームでつぶやくのはやってみたが・・・

    https://logzitsu.tlog.work/puppeteer-twitter-bot/

    node.js でやる場合はこんな感じ

    https://apps.twitter.com/app/
    ここでキーとアクセストークンを作る。
    アクセストークンは作成ボタン押さなきゃダメ

    var twitter = require('twitter');
    
    var client = new twitter({
        consumer_key: 'xxxxxxxxxxxxxxxxxxxxx',
        consumer_secret: 'xxxxxxxxxxxxxxxxxxxxx',
        access_token_key: 'xxxxxxxxxxxxxxxxxxxxx',
        access_token_secret: 'xxxxxxxxxxxxxxxxxxxxx'
    });
    
    var params = { screen_name: 'nodejs' };
    
    
    client.post('statuses/update',
        { status: 'テストツイートでございます' },
        function (error, tweet, response) {
            if (!error) {
                console.log(tweet)
            }
        });
    
    
    https://logzitsu.tlog.work/node-js%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/
  • Google Cloud Platform(GCP)を無料で使うよ。

    amazonのEC2みたいなやつです。
    クラウドで動かせる自分のPC(サーバー)が手に入ります。
    当然有料サービスなのですが、低スペックであれば無料で使えるみたいです。

    でも突然請求がきたりしたら怖い!

    というのが普通だとおもいます。
    しかし、どうやら永続無料枠もあり、かつ300ドルまで使えるクーポンがついてるみたいっすね。
    初心者に優しい。

    使い方!

    全然不安で紹介なんかできんわ
    以下で丁寧に紹介していますので参照してください。
    https://qiita.com/FukuharaYohei/items/0614354d6a4eda32d521

    自分はボットを作って遊んでいるよ。

    サーバーとかは普通のレンタルサーバーをすでに借りてます。
    常にPCを動かしておきたいbotシステムを試しに動かしてみてます。
    ubuntu 17?
    を入れたらchromeも動かせたようで、pupetter も動かせたのです。素晴らしい。
    また遊んでみて発見があればレポートします。

    メモ

    IP制限

    別サーバーのwordpressの投稿をしようとしたのだけどなぜか失敗。
    原因は、そのレンタルサーバーの「国外IP拒否」機能でした。

    ホワイトリストにGCPサーバーのIPを入れたらちゃんと投稿できました。
    なんでも解決するものですね。固定IPを設定していない場合は、再起動のたびに変わるので注意。

    時間の設定

    ubuntuの場合以下で設定できるよ

    //設定確認
    timedatectl
    
    //設定変更
    sudo timedatectl set-timezone Asia/Tokyo
    
  • Node.js の万能さの前で打ちのめされる

    できることが多すぎるので・・・・

    ちょっと前の記事でもちょっと書きましたが、Node.jsでできることが自分のやろうと思ってたことと合致しすぎてなにから手をつけていいやら迷っています。
    この状態に入ると、他のことが手につかないので、着実に一個づつ手をつけて行かなきゃなと思っています。
    言語はpythonでもよかったかな、と思いますがjsに結構慣れてるのでストレスが少なくすんなり行けるのが大きいです。

    こういう時ブログって便利だなと思う

    最近の記事はやった結果を体系的にまとめているというより、過程をそのまま書いています。
    割と自分で見直すことが多くて役に立つし、学習の動機にもなるのでなかなかいい感じです。
    ブログ書きながら調べ物してトライアンドエラーの結果を記録してくのおすすめです。

    やりたいことをまとめておこう

    いまやろうかなと思っていることをまとめておこうかと思います。

    • fxやビットコインの自動売買
    • 更新情報を取得して来てまとめるブログを作りたい
    • 空き家バンクバンク
    • アレクサのスキルを作る
    • lotデバイスをなんか作りたい
    • 文章を作るプログラム
    • 異世界少女 twitter
    • このブログの宣伝?更報告twitter
    • WEB技術収集Twitter

    2番目のやつは実は1つ作りました。
    でもデータが揃ってないので、データが溜まった1年後くらいにこのブログで紹介できたらいいなと思います。
    もう一つアイデアはあるんですが、効率のいいデータ収集の方式がまだまとまってないので、それが思いついたらいつか作りたいなーと思っています。

    自動売買プログラムは、自分で決済処理するのめんどくさいなーと思っており、口座を放置していて勿体無いので・・・ということです。
    高度な売買の仕組みは難しいと思いますが、ただ買うだけ売るだけなら API 使えばきっとすぐだと思うんですよね。

    わけのわからない単語も混ぜましたが、自分も漠然としたことしか考えてないしやらないかもしれません。

    とりあえず売買プログラムつくってみようかなー

    一番とっつきやすいのがこれかなぁ。
    どこまでちゃんとやるかですけど。

    やることいっぱいなので一個づつ着実に終わらせていきたいと思います。

  • Node.js で 記事を投稿できる、「node-wordpress」を試してみた

    node-wordpress の使い方です!

    タイトルと記事内容について自動投稿する方法は結構調べたら出てくるけど、メディア(画像)の自動投稿についての記事があんまり見つからないので、しょうがないっと記事を作ってみます。

    余談ですが技術書を買いました

    JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック
    自分のやりたいなーと漠然と思っていたことがいっぱい載ってました。
    しばらくこの分野のことを勉強したり、試作したりする生活を送りたい・・・・。

    つまり、データ出力場所としてのWordpressということです

    クローラーして集めたデータ/解析して加工した情報を定期的に自動投稿できたら良いなぁ、と思うわけなのでこれは避けて通れないことだなぁと思うのです。
    では始めていきたいと思います。

    試してみます

    node-wordpressを使います。
    https://github.com/scottgonzalez/node-wordpress/

    適当なフォルダで

    npm install wordpress
    

    そのフォルダにアップロードしたい画像をおきましょう。
    下のデモでは「img.jpg」という名前にしてあります。

    var wordpress = require('wordpress');
    const fs = require('fs');
    
    //接続設定
    const wpClient = wordpress.createClient({
        url: "わーどぷれすのURL",
        username: "ユーザーあいでぃー",
        password: "ぱすわーど"
    });
    
    //画像の場所を指定
    var filename = "img.jpg";
    var file = fs.readFileSync(filename);
    
    //画像のアップロード
    wpClient.uploadFile({
        name: filename,
        type: "image/jpg",
        bits: file
    }, function (error, data) {
        console.log(arguments);
        console.log(arguments[1].url);
    
        //コールバックで投稿アップロード
        wpClient.newPost({
            title: 'タイトル',
            status: 'publish',
            thumbnail: arguments[1].id,
            content: '内容',
            author: 1
            //customFields: [{ key: 'hoge', value: 'fuga' }]
        }, function (error, posts) {
            console.log(posts);
        })
    });
    

    まず画像をアップロードして、画像のIDをサムネイルに指定して記事を投稿。
    という流れになります。

    こう書いてみると、シンプルな流れですがけっこう試行錯誤しましたよ。
    これでほんとに色々できそうですよ。

    まずはあれをやろっかな(妄想)

    終わり

  • Electron で アプリ開発をしてみよーかなって話

    Node.jsはすごい!

    ここ数日 puppeteer と node.js を触って、世の中にこんな便利なものがあったかいな、詐欺やん!
    だれか教えてくれればよかったのに!

    とめちゃくちゃ感動していたのですが、一つ思いついたアプリがGUIがあった方がいいなーと思い始めていました。
    GUI作るならHTMLの画面を作ればいいなと思っていたんですけど、もっといい方法があったっぽいので調べながら実装してみようかなと思います。

    VScode や Atom に採用されている Electron

    今回取り扱うこの Electron というもの、日頃お世話になっている↑のアプリで採用されているものだったのです。
    Atomは知ってましたが、VScodeもHTMLでできてたんかいな・・・・。
    node.jsをつかえるなら、puppeteer の恩恵も活かせそうだな、と思ったので頑張って目的のものを作ってみようかと思っています。
    この記事ではさわりだけになるかもしれませんが。
    いままで扱ってきたアプリもGUIがあれば便利だな、と思っていた部分もあったので、とりあえずシンプルな入力欄だったり、取得してきた情報を一覧で表示したいなどできるところを目標にしたいと思っています。

    環境を整える

    nodeはインストールしておきましょう。
    vscodeを利用しています。

    適当なフォルダに移動し、以下を実行

    npm i -D electron
    npm init
    

    プロジェクトのフォルダを作りましょう。

    「project01」とします。
    そのフォルダに移動します。

    npm init
    

    package.jsonが作られます。
    main.jsを作りましょう。

    main.js

    var electron = require('electron');
    var app = electron.app;
    var BrowserWindow = electron.BrowserWindow;
    
    var mainWindow = null;
    
    app.on('window-all-closed', function () {
        if (process.platform != 'darwin')
            app.quit();
    });
    
    app.on('ready', function () {
    
        // ブラウザ(Chromium)の起動, 初期画面のロード
        mainWindow = new BrowserWindow({ width: 800, height: 600 });
        mainWindow.loadURL('file://' + __dirname + '/index.html');
    
        mainWindow.on('closed', function () {
            mainWindow = null;
        });
    });
    

    同フォルダ内に表示画面用のファイルを作成します。

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Electron Read Us</title>
    </head>
    <body>
    <h1>Hello, electron!</h1>
    </body>
    </html>
    

    以下で画面が立ち上がるはず

    electron .
    

    が、エラーで立ち上がらない・・・・
    自分の環境では以下を実行し、再度 electronをインストールしたらうまくいきました。

    npm install -g electron-prebuilt
    

    以下記事 参考にしました。
    Electronでアプリケーションを作ってみよう

    ここまできたら、index.htmlをアプリケーションぽくしていけばいいだけみたいです。
    ふつーにいろんなJSを使って。

    //インストール
    npm i electron-packager -g
    
    //パッケージする
    electron-packager . your-app
    

    puppeteer 動くのかとかいろいろ調べて、また何かわかれば追記します。

    以下追記
    https://qiita.com/Quramy/items/a4be32769366cfe55778http://

    引数
    https://qiita.com/furusin_oriver/items/f030d1eaa9e7b54233c3

  • puppeteer で twitter botを作るよ(使い道を考える)

    ちなみに、ふつうに呟く方が楽だよ。

    https://logzitsu.tlog.work/node-js-tweet/

    puppeteerの使い道

    すこーし考えてみました。
    – ログインが必要なサービスでデータを取得し、定期的にメールさせる
    – バックアップやアップデートの更新処理を勝手にやってくれるようにする
    – サイトから画像・テキストを集める、めっちゃメールを送る
    – 自分の代わりに投稿・更新させる

    こんなところかなぁとおもいます。一番上の情報収集に関してはオンライン会計ソフトで、ログイン情報を入れれば各種サイトの情報を取得してくる処理で「ヘッドレスブラウザ(かもしくは近しい技術)」でやってるみたいです。
    なるほどなーとおもいました。
    会計ソフトの例もそうですが、「いろんなサービスを横断的に利用できる」のが結構強みかな、と思いました。
    あと、人間を対象にしたものをどーにかこーにかするので、その分無駄が多いんですが、通常のプログラミングではややこしくめんどくさいところが結構無理やり解決できちゃうというか無視できちゃうんですごいです。高級言語って感じです。

    AIだなぁって思った

    人の代わりに人っぽいことをするものが「AI」だと思います。ブラウザを操って様々な作業をする。まさにAIですね。
    自律的に作業してくれるところまでまだ全然行けてませんが、決まった時間に発動させるくらいは今の状態でもできそう。
    3番目の「サイトから画像・テキストを集める、メールを送る」というのは完全にスパムの仕事ですね。
    集めた情報を使って画像の学習させるとか、そういった基礎資料集めには向いてると思いますが、短絡的に使うと迷惑行為になりかねないなぁと思います。

    メインのPCだとちょっときついよね

    ずっと立ち上げて処理を行ってほしいので、サーバー上で動かすのがいいと思うんですがそのためだけに借りるのもなーと思います。
    自宅にPCが余ってるのでそれを専用PCにしようかなと思っています。
    synology NASで動かすのがもしかしたら一番いいのかも。気分が乗ったら試してみようかな。

    DS216jにsshアクセスしてLinuxサーバーとして活用する方法
    http://www.web-walker.info/ds216j-ssh/
    追記:試してみましたが、chromeがうまく立ち上がらず断念。

    自動投稿とかもできちゃうよね

    wordpressにログインして、投稿するのも試してみました。
    でも画像の投稿が非常に難しく・・・・。それがやりたかったので、実用化するにはまだ研究が必要そうです。(情報もない)
    画像投稿ができるものならなんでもいいのでほかの何かを使いますかー。

    で、本題なんですが、twitterで定型文の定時ツイートくらいなら簡単にできちゃうと思うんですよね。
    試してみたいと思います。

    やってみた

    ログインがなかなかうまく行かなかず苦戦しましたが、なんとかなったです。

    const puppeteer = require('puppeteer');
    
    var user_name = "あかうんとめー";
    var user_pass = "ぱすわーど";
    
    function nowtime(){
        var d = new Date();
        var year = d.getYear()+1900;
        var month = d.getMonth()+1;
        var date = d.getDate();
        var hour = d.getHours();
        var minute = d.getMinutes();
        var second = d.getSeconds();
        d = year + "年" + month + "月" + date + "日" + hour + "時" + minute + "分でーす";
        return d;
    }
    
    (async () => {
        const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
        const page = await browser.newPage();
    
        //twitter ログイン
        await page.goto('https://twitter.com/login');
    
        await page.type('.email-input',user_name);
        await page.type('.js-username-field',user_name);
    
        await page.waitFor(2000);
        await page.keyboard.press('Tab');
    
        await page.keyboard.type(user_pass);
        await page.waitFor(2000);
        await page.click('button[type="submit"]');
        await page.waitFor(2000);
    
    
        // ツイートする
        await page.goto('https://twitter.com/');
        await page.waitFor(5000);
        await page.click('button#global-new-tweet-button');
        await page.waitFor(5000);
        await page.keyboard.type(nowtime());
        await page.waitFor(5000);
        await page.click('button.js-send-tweets');
        //await page.screenshot({ path: './ss.png'});
        console.log(nowtime());
    
        await browser.close();
    })();
    
    
    

    最終的にうまくいったwaitの時間を入れてますがもうすこし調整できるかも。
    スケジュールで実行してやれば定期的な宣伝ツイートとかもできちゃいますね

    集中的な8週間のマンツーマン訓練で、最先端のAIエンジニアを目指す
    https://logzitsu.tlog.work/node-js%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E5%AE%9A%E6%9C%9F%E7%9A%84%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B/
  • ヘッドレス Chrome を使えるようになりたいのだ!

    「ヘッドレス」 ブラウザってなに?

    みなさんがネット今見ているもの、それがブラウザです。
    「前に戻る」「アドレスバー」など様々な部品で構成されていますが、そういった目で見えるものがなく、クリックではなく命令言語で動かせる。
    それが「ヘッドレス ブラウザ」なのです。

    それってなんの意味があるの?

    よく「業務が自動化できる」ということがメリットに挙げられます。
    言葉としての意味はその通りなんでしょうが、なんとも非常にピンとこない。
    個人的にはこれからの時代は「AIがお金を稼いでくれる」という言葉にも同じものを感じます。
    噛み砕いて説明しますと、普段皆さんはブラウザで仕事をすることが多いと思います。
    たとえば「Aというサイトからとある製品の金額を調べてファイルに記載する」という作業があったとします。これを分解すると

    • ブラウザを立ち上げる
    • アドレスバーに「A 製品名 金額」などと検索ワードを打ちます。
    • 表示された検索結果から A社の目的の製品のページを探し、サイトを表示します。
    • 製品の金額を探しコピーします。
    • ファイルを開き、書き込み保存します

    といった流れになります。
    もしこれが毎日必要なタスクだったとすると、
    このタスクを「ヘッドレスブラウザで毎日自動で3時に行う」 と設定します。

    • 特に作業なし

    となります。ヘッドレスブラウザがちゃんと動くようにさえしておけば何もする必要がないのです。
    これが「業務の自動化」です。
    ただし、検索する製品が同じ場合に限ってしまいます。
    この製品を自動で見つけて検索させるとなると、非常に複雑な命令になってしまうと思います。きっと。

    ルーティーンで大量な作業をさせるのは非常に得意なものになります。
    「スパム」なんて一般的に言われてるものも、こういった自動化作業の負の産物なのかもしれません。

    ウェブスクレイピング というネット上から情報を集めてくるものもこれで可能になるはずです。

    どーやってつかうのさ

    PCのターミナル/コマンドラインというところから命令を送ります。
    それだと別にあんまり便利ではないので、命令を記載したファイルを用意しておきそれをアプリから実行することが可能です。
    node.jsというものを使うのが一般的みたいですね。pythonでも動かせるみたいです。
    自分のPCからnode.jsで動かすことはもちろん可能ですが、node.jsが動く「サーバー」で自動化作業をさせるのもよくあることみたいです。

    こうすると、自分のパソコンの電源を常に入れておく必要がなくより自動感がありますね。

    利用環境を整えよう

    今回はサーバーで動かすまで行かないで、自分のパソコンでヘッドレスブラウザを動かすところをやって見たいと思います。
    偉そうに講釈を垂れてますが、自分も触るのはこれが初めてです。

    参考 こちらの記事
    https://developers.google.com/web/updates/2017/04/headless-chrome?hl=ja

    なんか、簡単に扱えるライブラリがいくつか存在するみたいです。
    「chromy」 と 「puppeteer」

    比較してる記事がありました
    http://techblog.raccoon.ne.jp/archives/52414951.html

    「puppeteer」が一応公式開発のものみたいなのでこちらの情報を収集して頑張っていきたいと思います。

    OSは mac
    ターミナルは vscode によってやりたいと思います。

    一応「puppeteer」なしで動かします。

    とりあえず動かす。

    chromeをインストールして、

    適当なフォルダを作成。vscodeで開きます。

    chromeのインストール場所を指定します。(以下はmacの場合)

    alias chrome="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome.app"
    

    PDFの撮影をしてくれます。

    chrome --headless --disable-gpu --print-to-pdf https://google.com/
    

    puppeteer をインストールする

    先ほど作ったフォルダで継続して行います。
    nodeをインストールしてある環境なので「npm」でやっちゃいます。
    未導入の場合は以下からインストールで
    https://nodejs.org/ja/

    npm install puppeteer
    

    ではtest.jsを作っていきましょう。

    test.js

    const puppeteer = require('puppeteer');
    
    (async () => {
        const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
        const page = await browser.newPage();
        await page.goto('https://www.yahoo.co.jp');
        await page.screenshot({ path: 'screenshot.png', fullPage: true });
        await browser.close();
    })();
    

    実行は以下の通り

    node test.js
    

    「yahoo」のスクリーンショットを取ってくれます。(すげぇ)

    puppeteerでなにができるか知りたいんだよなぁ・・・

    配布先でapiの説明があります。
    https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md

    英語が苦手なのが恨めしいですなぁ

    googleで検索して1位のサイトをスクショ

    const puppeteer = require('puppeteer');
    
    (async () => {
        const browser = await puppeteer.launch({ headless: true });
        const page = await browser.newPage();
    
        // Googleにアクセス
        await page.goto('https://www.google.co.jp/');
        // 検索窓に「logzitsu」と入力
        await page.type('#lst-ib', 'logzitsu');
        // 検索ボタンクリック
        await page.focus('input[name="btnK"]');
        await page.click('input[name="btnK"]');
        // 遷移完了を待機
        await page.waitForNavigation();
        // 検索結果の先頭リンクをクリック
        await page.click('.rc > .r > a');
        await page.waitFor(5000);
        // ページタイトルを表示
        const title = await page.title();
        console.log(title);
    
        // スクリーンショット
        await page.screenshot({ path: 'ss.png', fullPage: true });
    
        await browser.close();
    })();
    

    googleサイトのロゴ画像を保存

    const puppeteer = require('puppeteer');
    const fs = require('fs');
    
    (async () => {
        const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
        const page = await browser.newPage();
    
        // ページ作成
        await page.goto('https://www.google.co.jp/');
        await page.waitFor(2000);
    
        // ページタイトル出力
        console.log(await page.title());
    
        // URL出力
        console.log(await page.url());
    
        //特定の場所のテキストを出力 今回は右上のナビのclassを指定
        const texts = await page.$eval('.gb_P', item => { return item.textContent });
        console.log(texts);
    
        // スクリーンショット撮影
        await page.screenshot({ path: 'screenshot01.png', fullPage: true });
    
        //ロゴ画像ソースの取得
        var imgurl = await page.$eval('#hplogo', el => el.src);
        var viewSource = await page.goto(imgurl);
        fs.writeFile("./logo.png", await viewSource.buffer(), function (err) {
            if (err) {
                return console.log(err);
            }
            console.log("画像を保存したよ");
        });
    
        await browser.close();
    })();
    

    めっちゃ汎用性あるなぁ。
    もーちょいいろいろ組み合わせるといろんなことができそうな予感です。
    メールで結果を送ったり、チャットワークにメッセージを送ったりね・・・。

    https://logzitsu.tlog.work/node-js-%E3%81%A7-%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E9%80%81%E3%82%8B/
  • WooCommerce でサイトを作ってみる2 カスタマイズ 編

    どうやら、プラグインと深く連携しているらしい。

    当たり前っちゃー当たり前なんですが、WooCommerce機能の部分はプラグインと密接に関連しており、通常のwordpress編集のやり方は通用しないっぽいです。
    それ以外のブログ的な部分は一般的なテンプレートが適用されると思いますので、storefrontテーマを元にsingle.phpなどを追加してあげれば理想の見た目になると思います。

    上記の理由から、おそらく一から作るのはオススメできず、あくまでstore-frontの子テーマとして作成するのが正攻法と言えるでしょう。

    https://logzitsu.tlog.work/woocommerce/

    とりあえず現状の気に入らないところをリストアップ

    • バナーを設置できるようなスライドショーが欲しい
    • ランキングは上に欲しい
    • 下の方にお知らせ一覧が欲しい

    それくらいあればよくあるECサイトの見た目になる気がします。

    つまりはトップページのみカスタマイズしたいのです。

    下層の会員ページとか、カートページ・購入ページはCSSの見た目変更だけで問題なく、
    ブログの部分などもおそらくwordpressテーマを作ったことのある人なら問題なく自由にカスタマイズできるでしょう。

    つまり、TOPページの作成さえできればいい。しかも、ニュース(ブログ)の一覧はWordpress的な文法で解決できるでしょう。
    スライドショーも同様。(プラグインを入れてもいいし、普通に追加してもいい。自分はACFでバナー追加できるようにするかなー)

    • ランキングの読み込み(表示)
    • 商品一覧の読み込み(表示)

    これさえわかればとりあえず大体の制作に対応できる気がします。

    テンプレートを見たら、なんかカスタマイズの方法が書いてあった。

    Homepage Control プラグインの追加で、TOPのコンテンツを操作できるよ、と。
    入れたらカスタマイズで表示非表示の切り替えと、並び替えが可能になっていました。

    多分これで問題ないかな・・・?

    でもやっぱ物足りないと思って調べたら商品は「product」カスタム投稿だった

    ここまでわかれば、様々な問題が解決したも同然。TOPでサブループを回せば商品一覧は表示できそうです。


    <? //single slug は 「product」 //ページリンクURL the_permalink(); //商品名 the_title(); //商品説明 the_content(); //商品画像 the_post_thumbnail(); //金額 echo get_post_meta( get_the_ID(), '_price', true ); ?> //カートに追加するボタン <a href="/?add-to-cart=<?php the_ID(); ?>">カートに追加</a>

    上記で大体事足りるのではないでしょうか?

    Homepage Control と ニュースの出力など組み合わせれば色々できるし、ACFプラグインも使えば楽天のように長いLPの後に購入の入力欄のあるページも作ることが可能なのではないでしょうか。
    ながーい記事に付属するタイプのものであれば、記事に商品IDのカスタムフィールドを作り商品と連携するのも容易いかもしれません。

    実際運用して見ないことには足りない機能や不満などがわからないと思いますので、実際のECサイトを運用し、半年後くらいに所見を共有できたらいいなと思います。

    (とりあえず現状の)

    まとめ

    • woocommerceは無料のプラグインで簡単に wordpressの ECサイトが作れる
    • ほかのショッピングサイト作成ツールと異なり、wordpressの制作スキルが行かせることが大きい
    • 便利な拡張機能や、かっこいいテーマは有料である
    • しかし無料の範囲でも多くのことができるし、購入テーマを使うなら初心者でもおすすめかもしれない
    • カートや、会員ページなどはめっちゃ使える品質。カスタマイズが必要なのは主にTOPページ
    • 商品はslug product のカスタム投稿なので、いわゆるカスタム投稿の表示方法で操作できる
    • 決済は「paypal」と「Stripe」 要アカウント

    てなところです。

  • WooCommerce でサイトを作ってみる 準備編

    WooCommerce ってなに?

    ECサイトを作れるwordpressプラグインらしいです。
    どうせ有料だろって思ってたんですが、無料みたいです。
    wordpress.com が作ってるプラグインらしいので、自分はなるほど無料もアリエル!と納得しました(?)

    WooCommerce は色んな物を販売できる、自由なデザインも可能なECプラグインです。WooCommerce はWordPressとシームレスに統合され、世界で多くのショップオーナーや開発者から支持されている人気のあるECシステムです。
    柔軟性があり、数百の機能拡張WordPress プラグインがあり、世界の30%のオンラインショップがWooCommerce を採用されています。– 世界では他のプラットフォームより多く使われています。

    当然ながら、より便利に使える各種機能追加は有料みたいですね。
    その辺の情報もわかりやすく提供できたらいいのかなと思います。

    この記事の対象者は

    • wordpress をインストールできる人
    • ECサイトを WooCommerce で作りたい人

    となります。HTMLとCSSわかんねぇとか、という人は対象外です。ごめんね。

    公式サイトはどこ?

    プラグイン配布先
    https://ja.wordpress.org/plugins/woocommerce/
    公式サイト
    https://woocommerce.com/
    当然ながら英語ですね。

    なにはともあれ、試してみよう

    今回はさらのwordpressを用意して、公式テーマで何ができるのかを検証して見たいと思います。
    まずはプラグインを導入して見ましょう。
    ほかのプラグインのように「新規追加」で「woocommerce」と検索すると出ますので追加します。

    通常のプラグインと違い登録ページに飛びます(びっくり)
    スクショ
    入力してもいい気がしますが、とりあえず自分はあとで入力を選択しました。

    この設定画面はダッシュボードに出てくるメッセージの「設定ウィザードを開始」からいつでも戻って来れるようです。

    テーマを入れよう

    とりあえず公式のテーマを入れて見たいと思います。
    storefront
    https://woocommerce.com/storefront/
    0$だったけど、なんか購入手続きふむ必要があります。めんどくさ・・・。
    、と思ったけど、管理画面のテーマ検索から「Storefront」で出てくるもの同じみたいです。
    無駄な個人情報を明け渡してしまった。人柱だぁ・・・。

    storefrontの使い心地は果たして

    ・・・これ、store.jp とか、 base ぐらい簡単にできるやん!
    これの子テーマ作って、カスタマイズするぐらいでもかなりいいんじゃないだろうか。
    テーマのカスタマイズページで、吹き出しのポップアップで「ここ編集してね」が出るので、それに合わせて編集してくだけです。
    めっちゃ楽やんけ。

    カスタマイズ
    この画面でロゴなんかを決めていくだけ。

    しかし問題は、金額がドル表示になってること。
    これは、上でパスした「設定ウィザードを追加」をやると設定が直せます。さらに、カートページにもしっかりアクセスできるようになります。

    デザインがなんかぱっとしない・・・

    これでちゃんとしてたらテーマ売れないから当たり前ですかね。
    ちょっと見たところ有料のテーマが多いみたいですね。

    商品ページのサイドバーが邪魔な気がするので、消します。
    商品カスタマイズ画面 → ウィジット → サイドバー メニュー項目を全部消すとワンカラムのサイトになります。うん。
    デザインちゃんとして必要な項目があれば悪くなさそうですけどね。
    カートもちゃんと動きますし、いい感じです。

    在庫数などは商品管理ページから入れるみたいです。ここはwordpress慣れてる人じゃないとめんどくさく感じるポイントかも。
    商品一覧のインポートエキスポートにも対応してるみたいです。

    でもやっぱりパッとしませんね。
    商品登録画面でちゃんと画像を登録すること、カテゴリーにもサムネイルを登録すると、少しは見れる感じになります。

    追加機能の部分はやはり有料のものが多かったです。
    – 定期購入
    – 予約購入
    – 会員登録
    なんかが一番推してる機能みたいですね。なるほど、たしかに。
    しかしそんなに高価でもなさそうなので、制作を生業としてる人は制作費でまかなえてしまうのではないでしょうか?

    これでpaypalとStripeのアカウントを取れば結構いい感じなのではないでしょうか。paypal と Stripe の契約がどんな感じなのかわからないですけどね。ちょっと調べてみようと思います。

    あ、これもうちゃんとまとめてる人のサイト貼った方が早そうですね。
    https://crosspiece.jp/stripe-review/

    めっちゃよさそう。つーかwordpressで決済使えるならわりといろいろ幅が広がりそうですよね。

    たぶんカスタマイズ編に続きます

    追記
    以下を追加CSSに入れるとある程度改善されますのでお試しあれ。書き方結構汚いけど許して

    .product_title,
    .woocommerce-tabs .panel h2:first-of-type{
        font-size: 1.2rem;
    }
    .section-title{
        font-size: 1.6rem;
    }
    ul.products li.product.product-category img,
    ul.products li.product img{
        border:1px solid #ccc;
    }
    .single-product div.product p.price{
        font-size: 2rem;
        margin:10px 0;
    }
    p {
        margin: 0 0 0.8rem;
    }
    .woocommerce-tabs ul.tabs li.active a, ul.products li.product .price, .onsale, .widget_search form:before, .widget_product_search form:before{
        font-size:1.6rem;
    }
    ul.products li.product .woocommerce-loop-product__title, ul.products li.product h2, ul.products li.product h3{
        font-weight:bold;
        font-size:1.4rem;
    }
    ul.products li.product .button {
        padding:20px ;
    }
    .single-product div.product .woocommerce-product-gallery .flex-viewport{
        margin-bottom:15px;
    }
    .single-product div.product form.cart{
        margin-bottom:0;
    }
    .stock.in-stock{
        margin-bottom:0;
    }
    .woocommerce-tabs{
        padding-top:0;
    }
    .storefront-breadcrumb{
        margin-bottom:0;
    }
    .storefront-full-width-content.single-product div.product .summary{
        margin-bottom:20px;
    }
    .storefront-full-width-content.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-5 .flex-control-thumbs li{
        margin:0 15px 15px 0;
    }
    .site-header{
            padding-top: 20px;
    }
    .main-navigation ul.menu>li>a, .main-navigation ul.nav-menu>li>a,.site-header-cart .cart-contents{
        padding: 10px 20px;
        margin-bottom:20px;
    }
    .storefront-full-width-content .woocommerce-products-header, .storefront-full-width-content.woocommerce-account .entry-header, .storefront-full-width-content.woocommerce-cart .entry-header, .storefront-full-width-content.woocommerce-checkout .entry-header{
        padding-bottom:30px;
    }
    .site-search .widget_product_search form::before {
        top: 11px;
        left: 6px;
    }
    

    https://logzitsu.tlog.work/woocommerce2/

  • Shinologyの NASを導入してみた

    すごく便利です

    目的としては、macのタイムマシンをワイヤレスで常にやっときたいなーと思ったことです。
    macの容量を増やしたんですが、これがぶっこわれたらやべーな、という思いから導入を決めました。

    まずNASについて調べてみたんですよ

    NASとは「ネットワークに繋がったHDD」といったイメージのものです。
    通常のパソコンをファイルサーバーで使う場合、それ用にできてないので無駄にオーバースペックだったり、継続して起動し続けることに最適化されていなかったりします。

    NASはファイルを共有することに特化しており、PCと考えると低スペックだがその代わりに安定性が高く消費電力も非常低く、継続利用するために最適化されています。

    NASを買う目的って
    ・PCのバックアップが取りたい
    ・音楽置き場にしたい
    ・動画置き場にしたい
    ・写真置き場にしたい

    といったところだと思うんですね。自分は一番上のものだけなんですけど、下の3つも対応機器と連携できるみたいなのですごく便利そうです。

    HDD付属のものと、取り付けが必要なタイプが有る

    HDD付属のものは、必要な機能が揃っていてすぐ使える初心者向けの製品。
    もとから用意されたことしかできない。

    HDDを自分で取り付けるタイプのものは、多少知識がある人向けでいろんなアプリケーションが用意されており、やり方次第でかなりいろんなことができる。
    サーバーとしてサイト公開もできちゃう、みたいな製品です。
    (公開しちゃいけないデータをいっぱい入れると思うんで、できるからと言ってやらないほうがよさそうですが)

    後者のいろいろできるやつ面白そう、とおもって導入してみました。
    買ったのは shinologyのNASです。

    HDDを2台積んでそれぞれを同じ内容を書き込み、どちらかが壊れてももんだいないようにする仕組みが一般的みたいです。だから、2台以上HDDを積める製品が多いんですね。

    でも自分は仕事で使うとはいえ個人利用だし、タイムマシンが目的なので本体PCとバックアップが同時に死ぬことは少ないだろうという楽観的な感覚でHDDは一台のみにすることにしました。
    しかし、NASはHDDを2台積めるタイプにしておきました。拡張性大事です。

    設定とかしてみる

    PCに慣れてる人なら造作のない組み立てを行い、LAN内の他のPCからURLに接続して、ファイルをダウンロードしてソフトをHDDにインストールして・・・・

    やっぱり初心者向けのデバイスではないかもですね。多少知識がないと躓くポイントがありそう。
    個人的にはしばらく待つだけでかんたんに使えちゃった、という印象でした。

    タイムマシンを適用

    タイムマシン用のユーザーを用意してあげる感じです。
    使い方のページに手順が載ってました。
    「DISKえらべる!やったぜ!」
    って感じでした。

    ちょっと使った感想だと、
    やっぱり遅くて、初回のバックアップはべらぼうに時間がかかります。しばらく放置する時間が必要です。
    初期設定だと一時間毎にバックアップを取ってくれるみたいなんですが、「多いわ!」って感じました。
    一日一回ぐらいでいいかなぁ。一日以内の作業量だったら諦めがつきます。
    そんなことない?

    おや?これは便利だぞ?

    出先でかんたんにアクセスできるんすよ!
    ファイルをちゃんと置いとけば、これに助けられることもありそう、っていうかネット環境がしっかりしてるところなら作業環境がどこでもいっしょな感じです。

    ついてるアプリケーションがおもしろい

    小規模な会社なら、これ一つあるだけでだいぶ便利に使えるな、と思いました。
    まずファイル置き場にできるし、チャットもできちゃうし、googleドライブみたいなソフトもついてる(すごくよくできてる)。

    そういう仕事系のサービスは結構有料だったりするので、意外と経費の節約になるんじゃないかな?と思いました。
    通常のサーバーみたいにも使えるみたいなので、社内用のツールを動かしたり、開発用のテストで使うこともできそうな感じです。

    あと、ファイルをパスワード付きでダウンロード公開にするのが、めちゃ簡単でびっくりしました。
    アップローダいらないじゃん。設定も細かくできるじゃん。
    googledriveとかdropboxのファイルサイズ制限ないやつやん!ってなりました。
    今後もしかしたら役立つときが来るかもしれません。
    NASを晒すのはちょっと怖い感じもするので、信用できる人とのやりとりのみにしようかなと思いました。

    googledriveの同期を切った

    nasの中で同期をしておいて、出先はそれにアクセスすればいいだけなのです。
    なのでノートPCの同期設定は切りました。
    ちょっぴり負荷が減った感じで、容量にもすこ~し空きがでました。(8GB)
    内蔵の容量が128GBだったときは致命的な容量だったんですが、1TBだとほんとにちょっとですね。
    大容量はパワーですわ・・・。

    googleはメインで2つのアカウントを使ってるんですけど、両方同期できました。
    公式の同期ツールだとけっこう制限がありそうなこのようなことも全然問題なくできたので「やべぇ」と思いました。

    思ってたより全然すごい

    すごく便利です。
    便利な半面、セキュリティのリスクはある気がします。
    本来なら、タイムマシン目的なのでその用途だけに使い、出先で接続なんでしないほうが安全に決まってます。

    でも便利さには抗えねぇ。使っちゃうんですねー。

    自分はわりと「蓄積していく」ってのがあまり得意じゃないんですよね。
    過去は精算したいし、ファイル全消しとかしたくなっちゃう。

    実際古いファイルもっていて役にたったなーと思うことはほとんどなく、わりと近い範囲で「バックアップとっときゃよかった」ってなる程度です。

    うまいこと使っていけば「身になるデータ蓄積」も身につくようになるのかなぁ?
    しばらく使ってまたレポートしたいと思います。

  • windowsに仮想PCでubuntuをインストールしてみた。

    やりたいこと

    linuxの共有フォルダをtimemachineにしたい。

    macのバックアップを取りたい。
    windowsの共有サーバーではどうやら難しいらしい。
    windows内の仮想PCにlinuxをインストールして共有もどうやら可能らしい

    とりあえずインストールしてみた

    仮想PCをインストールするのはそんなに難しくない

    isoファイルをダウンロードしてきて、仮想化ソフトでインストールするだけ。

    linuxはオープンソースなのでいろんなものが存在します。(androidとかもその一つ)
    サーバー用のものは真っ黒な画面で、他のPCから接続することを前提とした省エネなやつもあるんですが、そういうのはとっつきにくいので、割と普通PCみたいに使える「ubuntu」を選択してみました。

    自分のWindows PCはメモリ16GBも積んでいて、宝の持ち腐れがはんぱないので、4GB割り当ててみた。
    最初ちょっと古い14?とかのバージョンを入れてみましたが、なにかとエラーが出ました。あとちょっともったりする感じがある。16にしたら見た目もちょっとよくなっていい感じです。

    ファイルサーバー立てるのがよくわかんねー

    通常のpcにlinuxをインストールしてファイル共有するやり方が結構出てるんですけど、そこに仮想PCという要素が乗ってくるともう頭がこんがらがっちまいますね。
    NASを買ってくれば簡単に解決すると思うと、「もういいや!買ってくる!」となる気持ちもよくわかる・・・・。

    ファイルサーバー以外の気づき

    microsoftのvs codeとか普通に動きますね。
    このソフトをメインで使ってるなら、もうwindowsでもmacでもlinuxでもなんでもいいじゃん。って思いました。
    chromeも動くしね。
    chromeにログインしちゃえばどこも一緒ですからね。

    あとはpsdファイルさえちゃんと処理できればね。

    まだ苦闘中

    時間あるときにちまちまやります