空の下でひっそりと

てきとーに更新していきます。レーザーカッターや3Dプリンタが好き

awsでなぞの料金発生?ec2を停止したけど課金されてた

今年の6月くらいになんかwebサービス作ってみようと思って、awsのec2を使い始めました。

腕試しくらいで作ろうと思ってたので学生無料枠を利用しつつ12ヶ月くらいは置いとこうと思って作り始めました。

最初の2ヶ月くらいは無料(もしくは30円くらい)で使ってたのですが、いつの間にか400円くらい課金されてたので、原因を調べてみました。

elastic IPがあやしい👻

どこで請求が発生してるか調べるために、料金明細を調べていきます。

サービス→請求

f:id:yabu_sw:20181230171149p:plain

請求→料金明細

f:id:yabu_sw:20181230171144p:plain

料金明細を見てみると、このような表示が。 f:id:yabu_sw:20181230171141p:plain

Elastic IPが時間で課金されてるのがわかります。

あれ?1つ無料じゃなかったっけ?

Elastic IPは一つ無料だったような気がしていたので調べてみると、

「起動しているインスタンスでElastic IPを一つだけ使用している場合のみ無料」

参考はこちら→EIPで料金発生するパターンとしないパターン #AWS | DevelopersIO

なるほどです。ぼくがec2を起動している時は料金は発生しなかったけど、サービスの開発をやめてインスタンス切ったので料金が発生していたようです。

まとめ

料金明細からどこに課金されてるかを確認するのは重要ですね、、、

同じようなことで困ってる人の力になれば幸いです!

dev.classmethod.jp

qiita.com

aws.amazon.com

サーバレスでHPを作ってみたい!

ちょうど一ヶ月前にこんな記事が目にとまりました。

https://qiita.com/asmsuechan/items/17f168f151346ac5cf65

とある大学の研究室のHPをサーバレスで作った話です。 この記事をみて「僕もこういうのやりたかった大学人生だった、、」 という話を同級生としてたら、「やってみたらいいじゃん」と言われたのでやってみようと思いました。

ただ、この記事をみた時点の自分の感想は、「さーばれすとかわかんない??ChatOps?Vue.jsミタコトアルネ」みたいな状態だったので、一旦わかる部分とわからない部分を明確にしておきます。

フロントエンド

React.jsを少しだけ触ったことがあるくらいです。

Vue.jsは使ってみたいとずっと思ってたので、この記事にならってVue.jsを使おうかなと思っています。

AWS lamdaとserverless framework

awsはec2とかしか使ったことないです。

lambdaとserverless frameworkは初見さん。

Slack bot

slackのapiは使ったことがないのでこれも初見です。

twitterapiは何回か触ったことがあるので、サーバレスの部分とかよりはなんとかなりそう。

それにChatOpsは調べたらたくさん事例が出てきたので大丈夫そう。

DB

データベースも記事ならってDynamoDBを使う予定です。

いちおう一通りのデータベース操作はできてるつもり。

どんな感じで進める?

全くわからないlambdaとserverless frameworkから勉強して、どんな感じで使えるか理解していきたい。

次にVue.jsとslackをやって、ある程度理解できたらserverless frameworkと組み合わせてみて、どんな動きするか確かめながらやってこうかなって感じです。

フォーラムに大量のスパムコメントが来たので一括削除した

f:id:yabu_sw:20181220032121p:plain

昨夜からこのようなスパムがきていたらしく気づいたらコメント数が6万以上来ていました。

調べてみるとbbpressで作成したフォーラムにコメントとして書かれまくってた様子。

放置しても邪魔になるので一括で消したいなと思いつつ、一つ一つ削除するのは面倒だなと思っていたので、データベースから削除する方法を参考にして一括削除をしました。

参考サイトはこちら↓

incloop.com

1.データベースのバックアップをとる。

phpmyadminを利用してデータベースを管理していたので、export機能を使って全体のバックアップをとりました。

2.wp1_postmetaを削除する。

データベースを見てみるとwp1_postmetaとwp1_postsの量が圧倒的に増えています。

そこにスパム投稿とそれに関する情報が入ってそうなので、そこを調べていきます。

f:id:yabu_sw:20181220032356p:plain

wp1_postmetaの中身を見てみるとどれがフォーラムに投稿されたデータかを判別できないので、wp1_postsと結合させて調べます。

フォーラムへの投稿を削除したいので、guidの列に”forums"が含まれている部分のみを検索しました。

今回自分の場合は、直近3日間のフォーラムへのコメントが全てスパムだったので、日付と"forums”のみで判別しています。

———————————————SERECT———————————————
SELECT * 
FROM `wp1_postmeta` 
INNER JOIN wp1_posts 
        ON wp1_postmeta.post_id = wp1_posts.ID
WHERE post_date LIKE "2018-12-17%"
AND guid LIKE "%forums%"

———————————————DELETE———————————————
DELETE `wp1_postmeta` 
FROM `wp1_postmeta` 
INNER JOIN wp1_posts 
    ON wp1_postmeta.post_id = wp1_posts.ID
WHERE post_date LIKE "2018-12-18%"
AND guid LIKE "%forums%"

“SELECT"で検索して値があるか確認し、”DELETE"で削除します。

3.wp1_postsも削除する。

wp1_postmetaと同じように日付とguidの文字列に”forums”が含まれていたら抽出、ざっくり確認したら削除という手順で実行します。

———————————————SERECT———————————————
SELECT * 
FROM `wp1_posts` 
WHERE post_date LIKE "2018-12-18%"
AND guid LIKE "%forums%”

———————————————DELETE———————————————
DELETE `wp1_posts`
FROM `wp1_posts` 
WHERE post_date LIKE "2018-12-18%"
AND guid LIKE "%forums%"

ぼくは3日分のコメントが溜まっていたので、2と3の作業を3回実行しました。

4.スパム対策

今回のスパムは一旦削除することができたので、次から来ないように対策をします。

スパム対策にはakismetを使用しました。

それと今回はコメントに大量のスパムが投稿され続けてしまったので、連続投稿の間隔を10秒→1分に変更しました。

参考にしたリンクはこちらです。

akismetの設定

pasolack.com

bbpressの設定

wordpressで掲示板を作るならbbpress!使い方の完全マニュアル

この記事もspam対策にはよさそうだったので、akismetで防げない場合は試してみたい。

netaone.com

感想

初めから対策しとけよって感じですね、、、 bbpressを使っての対策であれば、投稿スロットル時間の間隔を長くすること。 Akismetは使っていたけど、もうちょいちゃんとするならreCapthchaとかも使った方がいいかなと思いました。

参考リンク :

incloop.com

qiita.com

pasolack.com

wordpressで掲示板を作るならbbpress!使い方の完全マニュアル

netaone.com

スライダーの画像へマウスオーバー(hover)した時に黒いマスクをかける方法

こんにちは!

bootstrapのcarouselとの組み合わせで作成されたスライダーに、マウスオーバー(hover)すると黒いマスクがかけられる+説明文が出てくる方法を紹介します。

白馬鑓ヶ岳はぱくたそ(https://www.pakutaso.com/)さんにあったので今回サンプルとして使用させていただいています。

いつか登ってみたいです。笑

通常のカルーセル

f:id:yabu_sw:20181128152814g:plain

黒いマスクをかけてみる

f:id:yabu_sw:20181128154727g:plain



ソースコード

今回作成したソースコードはこちらです。

scssも書いているので、scssのソースが欲しい方はgitからもらってください。

github.com



今回編集した場所

今回編集した箇所は.carousel-itemの中の部分です。

f:id:yabu_sw:20181130154419p:plain



作成した手順

  • 画像を配置する。(.show_image部分)
  • 画像透過(hover)時に画像真ん中に文字を表示する部分。(.show_contents部分)
  • 背景色に黒を用意。(.show_hero部分)
  • hoverアクションを追加。



順序よく説明

画像を配置する。(.show_image部分)

f:id:yabu_sw:20181130172734p:plain

画像はhtmlに背景画像としてstyleを書いています。

<div class="show_image" style="background-image:url(https://www.pakutaso.com/shared/img/thumb/TKL180916028_TP_V.jpg);">

背景画像を中央揃え、領域を完全に覆うためにbackground-size:coverbackground-position:50% 50%を使用して位置を整えています。

高さは495pxで固定です。

cssはこちら
.show_image {
    background-size: cover; //背景領域を完全に覆う最小サイズになるように背景画像を拡大縮小する。[object-fit:cover]の背景版のようなイメージ。
    background-position: 50% 50%;  //背景領域の中心に画像を配置する。上の[background-size: cover;]との組み合わせで[object-fit:cover]を背景画像で再現。
    background-repeat: no-repeat;
    height: 495px;
    width: 100%;
    transition: 1.0s;
}



背景色に黒を用意。(.show_hero部分)

f:id:yabu_sw:20181130160741p:plain

画像透過(hover)時に黒のマスクがかかったような表現ができるように、背景色に黒を用意します。 今回は横幅は100%、高さは子クラス(.show_image)に合わせるように作成します。

cssはこちら
.show_hero {
    height: auto; //子クラス(.show_image)の高さに合わせる。
    width: 100%;
    background-color: black; //背景を黒に。
    position: relative;
    transition: 1.0s;
}



画像透過(hover)時に画像真ん中に文字を表示する部分。(.show_contents部分)

f:id:yabu_sw:20181130160723p:plain

opacity:0にすることで何もしていない状態では表示されないようにしています。(画像ではわかりやすいように表示させています。)

親要素を基準に絶対的な位置を指定することができるposition:absolute(絶対位置)を使用して、上から9remの位置に固定しています。

CSSのpositionを総まとめ!absoluteやfixedの使い方は?

margin:autoで画面の中央に配置しています。

CSSで中央寄せする9つの方法(縦・横にセンタリング)

今回の場合は.show_heroを親要素にして.show_contentsを子要素にしています。

f:id:yabu_sw:20181130144854p:plain

cssはこちら
.show_contents{
    opacity: 0; //show_imageにhoverされた時に透明度を上げながら表示するために使用。初期値を0にして非表示にしている。
    width: 50%;
    text-align: left;
    position: absolute; //show_imageの上にコンテンツを配置するために使用。
    color: white;
    top: 9rem;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
    transition: 1.0s;
}



hoverアクションを追加

hoverで透明度(opacity)を変更します。

.show_hero:hover > .show_imageこの書き方で、.show_heroがhoverされた時に.show_imageのクラスを変更することができます。

cssはこちら
.show_hero:hover > .show_image {
  opacity: 0.2;
}

.show_hero:hover > .hero_content {
  opacity: 1;
}



ここまで書いて思ったこと

画像の部分をhtmlにstyle直書きしているけど、imgでできるはずなので書いたら更新します。笑 というかなんで背景画像にしていたんだろう、、、(思い出せない

最後に、スライダー部分のソースコードを載せておきます。



ソースコード

htmlはこちら
<section class="main_contents">
    <div id="myCarousel" class="carousel slide carousel-fade" data-ride="carousel" data-interval="4000"> 
        <div class="carousel-inner" role="listbox">
            <div class="carousel-item active">
                <a href="https://www.hakuba-sanso.co.jp">
                    <div class="show_hero">
                        <div class="show_image" style="background-image:url(https://www.pakutaso.com/shared/img/thumb/TKL180916028_TP_V.jpg);">
<!--                        <div class="d-flex justify-content-between hero_description">
                               <div class="element"><p>北アルプス | 後立山連峰</p></div>
                               <div class="element"><p></p></div>
                           </div> -->
                        </div>
                        <div class="hero_content">
                            <h2>白馬鑓ヶ岳</h2>
                            <p>星空を独り占め!?温泉から見える景色は最高の眺め!山登りで疲れたあなたを癒してくれます</p>
                            <p>北アルプス | 後立山連峰</p>
                        </div>
                    </div>
                </a>
            </div>
            <div class="carousel-item">
                <a href="https://www.hakuba-sanso.co.jp">
                    <div class="show_hero">
                        <div class="show_image" style="background-image:url(https://www.pakutaso.com/shared/img/thumb/yamasha1102054_TP_V.jpg);">
<!--                        <div class="d-flex justify-content-between hero_description">
                               <div class="element"><p>北アルプス | 後立山連峰</p></div>
                               <div class="element"><p></p></div>
                           </div> -->
                        </div>
                        <div class="hero_content">
                            <h2>白馬鑓ヶ岳</h2>
                            <p>山登りは北アルプスで!飛騨山脈にある山々を制覇しに行きましょう!</p>
                            <p>北アルプス | 後立山連峰</p>
                        </div>
                    </div>
                </a>
            </div>
            <div class="carousel-item">
                <a href="https://www.hakuba-sanso.co.jp">
                    <div class="show_hero">
                        <div class="show_image" style="background-image:url(https://www.pakutaso.com/shared/img/thumb/yamasha1102058_TP_V.jpg);">
<!--                        <div class="d-flex justify-content-between hero_description">
                               <div class="element"><p>北アルプス | 後立山連峰</p></div>
                               <div class="element"><p></p></div>
                           </div> -->
                        </div>
                        <div class="hero_content">
                            <h2>白馬鑓ヶ岳</h2>
                            <p>山登りは北アルプスで!飛騨山脈にある山々を制覇しに行きましょう!</p>
                            <p>北アルプス | 後立山連峰</p>
                        </div>
                    </div>
                </a>
            </div>
        </div>
    </div>
</section>

cssはこんな感じ(モバイル版も対応)

/*test.css*/
@charset "UTF-8";
body {
  padding: 0;
  background-color: #FFFFFF;
  font-family: 'Avenir','Helvetica Neue','Helvetica','Arial','Hiragino Sans','ヒラギノ角ゴシック',YuGothic,'Yu Gothic','メイリオ', Meiryo,'MS Pゴシック','MS PGothic';
  color: #000000;
  min-width: 1200px;
}

.carousel-item {
  padding: 1rem 3rem 0;
  background: none;
  height: auto;
}

.show_hero {
  height: auto;
  width: 100%;
  background-color: black;
  position: relative;
  transition: 1.0s;
}

.show_image {
  background-size: cover;
  background-position: 50% 50%;
  background-repeat: no-repeat;
  height: 495px;
  width: 100%;
  transition: 1.0s;
}

.hero_content {
  opacity: 0;
  width: 50%;
  text-align: left;
  position: absolute;
  color: white;
  top: 9rem;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  transition: 1.0s;
}

.hero_description {
  position: absolute;
  width: 100%;
  color: #3D5AFE;
  top: 28rem;
  right: 0;
  bottom: 0;
  left: 0;
  background-color: #76FF03;
  transition: 1.0s;
  opacity: 0.7;
  font-weight: bold;
}

.hero_description .element {
  margin: auto 1rem;
}

.hero_description p {
  margin: 0;
}

.show_hero:hover > .show_image {
  opacity: 0.2;
}

.show_hero:hover > .show_image > .hero_description {
  opacity: 0;
}

.show_hero:hover > .hero_content {
  opacity: 1;
}

@media (max-width: 992px) {
  .carousel-item {
    padding: 0;
    background: none;
    height: auto;
  }
  .carousel {
    margin-bottom: 2rem;
  }
  .show_image {
    height: 300px;
  }
  .show_hero {
    height: 300px;
  }
  .hero_content {
    top: 4rem;
  }
  .hero_content p {
    font-size: 0.7rem;
  }
  .hero_description {
    top: 16.5rem;
  }
  .hero_description p {
    font-size: 0.7rem;
  }
}

@media (max-width: 480px) {
  h1 {
    font-size: 1.5rem;
  }
  .show_image {
    height: 200px;
  }
  .show_hero {
    height: 200px;
  }
  .hero_content {
    top: 2rem;
    width: 60%;
  }
  .hero_description {
    top: 10.5rem;
  }
  .hero_description p {
    font-size: 0.5rem;
  }
}

ソースコード

今回作成したソースコードはこちらです。

scssも書いているので、scssのソースが欲しい方はgitからもらってください。

github.com

参考リンク :

getbootstrap.com

saruwakakun.com

saruwakakun.com

ローカルで簡単にwordpressの環境を作れるLocal by flywheelがすごい

こんにちは!ya-buです。

wordpressでサイトを立てようと思うと、このテーマどうかな?って試したいことって結構あると思います。

virtualboxvagrant使ったり、MANPP使ってとか、ローカルでテスト環境作るのもうちょい楽にならないかなと思っていました。

これを紹介したい!

面倒だなと思ってたある日、こんな記事をみつけました。

blog.shumbo.org

公式はこれ↓

local.getflywheel.com

LocalByFlyWheelを使えば、wordpress環境に関してはコマンドからの操作なく簡単にwordpressが使用可能な状態のローカルのサーバを立てることができます。

個人的には、めっちゃ楽だな〜と思って使ってます。

Local by flywheelに関しては上のリンクがわかりやすく丁寧に説明しています。 今回この記事でやるのはLocal by flywheelで立てたローカルのwordpress環境にテーマ”onepress"をインストールするところまでです。(wordpressのテーマの適用方法は知ってるよ!って人はこの先見ずにLocal by flywheel使ってみてほしい!めっちゃ便利)

LocalByFlywheelで作成したwordoress環境にテーマ"onepress"をインストールする。

1.サイトを作成する

LocalByFlyWheelを起動する。左下の+ボタンから新しいwordpress環境を作成する。サイト名は自分が作るサイト内容を設定する。 今回は"test"にしました。

f:id:yabu_sw:20180826154644p:plain

2.環境を設定する。

次のchoose your environmentでPHP Versionを5.6.20にする。(7にしてしまうとonepressが動かない部分がある。)

f:id:yabu_sw:20180826155043p:plain

3.テーマをインストールする

今回はonepressというテーマを使います。onepressは新規追加から検索することができます。

f:id:yabu_sw:20180826155343p:plain

4.デモを入れよう

デモをインストールしましょう。ダッシュボードの外観→OnePressテーマを選択すると、そこにデモをインストールする手順が書かれています。タイトルの隣にある赤い丸で囲まれた数字を目印にするとわかりやすいです。

f:id:yabu_sw:20180826160330p:plain デモをいれるとカスタマイズ済みのテンプレートが大量に生成されるので、作業がしやすくなります。

これで準備は完了!あとはカスタマイズ画面から自分好みの設定に変えていきましょう。
参考リンク :

blog.shumbo.org

local.getflywheel.com

はてなブログのソースコード部分を見やすくする

こんにちは!ya-buです。

ブログのソースコードの表示が少し見ずらかったので変えてみました。 手軽にできるものなので、今回はその方法を紹介します。

今回できること

before

f:id:yabu_sw:20180810000935p:plain:w400

after

f:id:yabu_sw:20180810000933p:plain:w400

対象読者

はてなブログソースコードの見た目を変えたい人、css触ったことあるよ!って人  

1. 見た目を変更したい場所を確認する

  まずは変更したい場所を確認します。 google chromeの検証機能を使うと簡単にできます。

saruwakakun.com

この記事を参考にして、自分ブログにアクセスしてどんな変更を加えればいいか確認することができます。

ポイントは実際に変えたい場所のクラスにcssをいれてみて、変更したい場所以外に影響がでてないか確認しながらやるといいと思います。

f:id:yabu_sw:20180810004156p:plain:w200

変更した場所

背景色(background-color)文字色(color)行の高さ(line-height)を変更しました。

僕の場合は、背景色を白から黒っぽい色に変えたかったのと行の高さを小さくしました。

背景色変えたら文字色も見づらくなってしまったので、ついでに白に変えました。

保存しておく

変更するためのcss部分と上のクラスを、エディタかなにかに保存しておきます。

cssが変更できない

ちなみに、cssがうまく適用させられないことが結構あると思います。

そんな時はセレクタの優先順位が原因なことが多いので、ここを参考に直していくといいと思います。

CSSの優先順位 セレクタの強さ | ホームページビルダー私でも出来たホームページ

2.実際にはてなブログcssを変更してみる

自分のはてなブログに反映させるためには、 デザイン設定→🔧カスタマイズ→デザインcss

デザインcssに変更したいcssを入れることで変更することができます。

.entry-content pre{
    background-color: #202136;
    line-height: normal;
    color: white;
}

デザインcss追記したら、上にある「変更を保存する」ボタンを押して完了です。

かっこよくなりました✨

参考リンク :

saruwakakun.com

www.htmq.com

CSSの優先順位 セレクタの強さ | ホームページビルダー私でも出来たホームページ

 

 

 

carouselで画像のサイズ保ったままレスポンシブさせる(bootstrap4)

こんにちは!(^o^)/

今月の出費がなぜか先月より2万ほど減りました。ya-buです。

carouselのサンプルだとレスポンシブしようとした時に画像が横に縮まってしまうのですが、それを防ぐ方法を紹介します。

縮まってしまう現象

f:id:yabu_sw:20180724215916p:plain:w200f:id:yabu_sw:20180724215908p:plain:w200

今回の記事で実装できるのはこちら

f:id:yabu_sw:20180724213727g:plain

対象読者

bootstrap4を使ってる人、carouselのレスポンシブも画像比率を保って欲しい!人

ソースコード

今回作成したソースコードはこちらです。

github.com

1. carouselをレスポンシブさせる

cssを変更しようと思ったのですがなかなかうまくいかなかったので、ググってみると自分が思い描いてる通りのものを見つけました。

CodePen - Full width carousel with entire slide clickable

こちらを参考にしつつ実装してみます。

htmlはこちら
<!-- carousel.html -->
<div id="carousel-2" class="carousel slide carousel-fade" data-ride="carousel" data-interval="6000">
  <ol class="carousel-indicators">
    <li data-target="#carousel-2" data-slide-to="0" class="active"></li>
    <li data-target="#carousel-2" data-slide-to="1"></li>
    <li data-target="#carousel-2" data-slide-to="2"></li>
  </ol>
  <div class="carousel-inner" role="listbox">
    <div class="carousel-item active">
      <a href="">
        <img src="https://www.pakutaso.com/shared/img/thumb/pakutaso-4860_TP_V.jpg" alt="responsive image" class="d-block img-fluid">
      </a>
    </div>
    <div class="carousel-item">
      <a href="">
        <img src="https://www.pakutaso.com/shared/img/thumb/cyusonjitukimisaka1211IMGL0982_TP_V.jpg" alt="responsive image" class="d-block img-fluid">
      </a>
    </div>
    <div class="carousel-item">
      <a href="">
        <img src="https://www.pakutaso.com/shared/img/thumb/171116AMEMAN010_TP_V.jpg" alt="responsive image" class="d-block img-fluid">
      </a>
    </div>
  </div>
</div>

cssはこんな感じ

/*style.css*/
.carousel-item .img-fluid {
  width:100%;
  height:auto;
}

.carousel-item{
  height: auto;
}

.carousel-item a {
  display: block;
  width:100%;
}

.carousel-item .show-image {
  display: block;
  width:100%;
}

結果がこちらです。

f:id:yabu_sw:20180724213727g:plain

うまくいきました\(^o^)/

2. 一定の高さを保ちつつ、レスポンシブさせる

今度はcarouselの高さは統一し横幅は画面いっぱいにしつつ、アスペクト比はそのままにしたい。 変更点はcssの1~8行目の部分。

/*style_height.css*/
.carousel-item .img-fluid {
  width:100%;
  height:auto;
}

.carousel-item{
  height: auto;
}

たったこれだけの変更で、こんな感じで実装できます。

f:id:yabu_sw:20180724231925g:plain

このように簡単にレスポンシブさせることができます。

参考になればうれしいです!

ソースコード

今回作成したソースコードはこちらです。

github.com

参考リンク :

Carousel · Bootstrap

1行追加でOK!CSSだけで画像をトリミングできる「object-fit」プロパティー | Webクリエイターボックス

CodePen - Full width carousel with entire slide clickable