aoma blog

エンジニアの日常とか技術とか

ディズニーホテルに超格安で泊まる方法!

はじめに

ディズニーランド、ディズニーシーに行くならやっぱり泊まりで帰りを気にせず楽しみたいですよね!

でもホテル代は抑えたいもの。そんなあなたに超格安で泊まれるかもしれない方法を知ったので教えます!

Cansell知ってますか?

突然ですがCansellというサービス知っていますでしょうか?

jp.cansell.com

私もこの前まで全く知らなかったんですがすごいんですこのサービス!

ホテルを予約してたけど都合が悪くなりどうしてもキャンセルしないといけない時、ありますよねー?

Cansellはそんなとき予約を売ることができるサービスなんです!

自分で販売金額を設定することもできるし、販売に比べると小額にはなりますがCansellに買い取ってもらうことも可能です。

先日宿泊当日にキャンセルしなければいけなくなり、全額キャンセル代を支払うのが嫌で何か方法がないかとググッていたらこのサービスに出会いました!

当日で買い手がつくかもわからなかったのでCansellに買い取ってもらいました。870円ほどでしたが、少しでもお金が返ってきたので良かったです。

舞浜駅近辺でお得に泊まる方法

もうお判りかと思いますが、ディズニー近辺のホテルに格安で泊まりたい場合はまずCansellで舞浜を検索してみることをオススメします!

運が良ければ大人2名5000円というお得価格で泊まれたりするかもしれません!

f:id:aoma23:20190705110431p:plain

当日になればなるほどキャンセルの可能性は上がると思いますので、日帰りで遊びに行く予定だったけどとりあえずCansell調べておくかって使い方もありかと。

また今回はディズニー、舞浜を例にしましたが、当然それ以外の場所でも超格安でホテルに泊まれる可能性があります。

Cansellもっと流行ってほしい

まだまだ世の中には泣く泣くキャンセル代を払ってる人が大半だと思います。

Cansellはキャンセルしたい人とホテルを探している人にとってWin-Winなサービスなので是非メジャーになってほしいと思います。

【Twitter】1000人フォローしたら何人フォロバしてくれるか検証してみた

※この検証をしたのは2019年6月中旬頃の話です。

はじめに

昨日からのシリーズ第2弾です!

1000人の読者になったら何人フォロバしてくれるか検証してみた - aoma blog

なぜやるのか、目的や経緯は↑の記事を読んでみてください。

主にエンジニアをフォローしまくる

フォローする人は主にエンジニアにしました。
さまざまな情報が入ってくるしね!何より友達の少ない私はやはりエンジニアと繋がりたい。

ということでプロフィール欄を見て、PHPerを中心にエンジニアと思われる人を、数日数週間かけてひたすらフォローさせていただきました。

PHPとかアジャイルとかで検索して手動で。今回は前回と違い自動化などはせず。いろんな人がいてツイッター面白い。

そして1000人をフォローした

結果発表ーーー!!

ツイッターで1000人をフォローしたところ、、、なんと350人近くがフォロバしてくれました!すみません、正確な数字は記録忘れてました(^^;;

ありがとうございます!これからaomaをよろしくお願いします。

かなり嬉しい結果なのですが、検証中にこの記事Googleの新技術<portal>タグを試してみた - aoma blogでちょいバズを経験したので、面白い人かなと思ってフォローしてくれた人が多かったのかもしれません。

ということでツイッターはフォローすると35%がフォロバしてくれる!という結果になりましたー!

結論

Twitterでは気軽に繋がってもいいって考えの人が多いのかな??

いろんな人と出会えて楽しいよツイッター

1000人の読者になったら何人フォロバしてくれるか検証してみた

※この検証をしたのは2019/5/8頃の話です。
※嫌われそうなのでこんな事公表する人もなかなかいないと思いますが嫌わないでください。

はじめに

今年はバズりたい。

バズるためにはどうすればいいか本気出して考えてみた - aoma blog

上の記事でも書きましたが、バズるためにはどうすればいいか、まずは多くの人に見てもらえるようになる必要があります。

つまりフォロワーを増やしたい。

そこで、フォローしたらフォロバしてくれるんじゃないか、と思ったんです。

きっと誰しもが思うこと。でもやらないこと。やってみましたよ。

はてなブログの読者になりまくる

aomaのブログは雑多系ですが、やはりエンジニアな記事が多いのでIT業界の人に読者になってもらいたい。
そこで、読者になる対象はプログラミンググループに投稿しているユーザーにしました。

hatenablog.com

このページは最新投稿順にソートされている模様。

数日、数週間かけてひたすら読者になりました。

といっても一応エンジニアなので、闇雲に頑張って読者になったわけではなく、スクレイピングしてスプレッドシートにユーザー一覧を作り効率よく読者になっていきました。

そして1000人の読者になった

結果発表ーーー!!

1000人の読者になったところ、、、なんと49人がフォロバして(読者になって)くれました。

ありがとうございます!これからも楽しんでいただけると幸いです。

ということで、読者になると約5%の確率でフォロバしてくれる、という結果になりましたー。うーん。

結論

読者機能ってあんまり使われてないのかな??

あんまり効果がないのでマネしちゃダメだよ!!

調整さんのデフォルト開始時間を変更するブックマークレットを作ったよ!

みなさん、友人や会社メンバーと飲み会の日程調整する時どうしてますか?

そう!やっぱり『調整さん』ですよね!便利!いつもお世話になってます。

しかしひとつ不満が。。

デフォルト開始時間が変更できない

f:id:aoma23:20190808185817p:plain

候補日をクリックしたときのデフォルト開始時間は19:00~となっています。
これ候補日が3日くらいなら手動で変えるからいいんですが、たくさんあると直すのしんどい。 候補日全て19:30開始にしたいんだよー!とかね。

デフォルト時間を変更できるブックマークレット作りました!

このリンクをブックマークバーにドラッグ&ドロップで追加できます。
調整さんの開始時間変更

もしくは下記をブックマークに追加して利用ください。

javascript:(function(){if('https://chouseisan.com'!=location.origin)location.href='https://chouseisan.com';else{var b=prompt('\u30c7\u30d5\u30a9\u30eb\u30c8\u958b\u59cb\u6642\u9593\u3092\u8a2d\u5b9a\u3057\u307e\u3059','19:30\uff5e');$('#datepicker').datepicker('option','onSelect',function(c,d){var a=$('#kouho').val();''!==a&&(a+='\n');$('#kouho').val(a+c+' '+b)})}})();

使い方

  1. 調整さんのページで先程追加したブックマークをクリック
  2. ダイアログが表示されるので開始時間を編集
  3. あとは候補日を選ぶだけ!

f:id:aoma23:20190809154403g:plain

どうです?地味に便利でしょう?

まごころ機能

別ページにいる時にブックマークレットをクリックすると調整さんにリダイレクトするようになってます。やさしさ!

さいごに

みなさん是非使ってくださいね!

【MySQL】デッドロックしているプロセスをkillする

はじめに

生きてるとたまーにデッドロックに遭遇することありますよね。

トランザクションの貼り方がいけてない、というか考慮されてない、というかよくわからず処理全体をトランザクションで覆っただろおまえ!みたいなアプリケーションのせいで。

そんなときサクッとプロセス削除できるようにメモ。

MySQLデッドロックの原因となっているクエリをkillする

原因のプロセスを探す

show processlist;

Idを指定してkill

kill 1234567;

以上、簡単ですね。

デッドロックとは?

そもそもデッドロックって何?何で起きるの?という人向けに簡単な例を。

usersテーブルの例

usersテーブルがあったとします。

mysql> select * from users;
+----+---------+
| id | name    |
+----+---------+
|  1 | aoki    |
|  2 | iida    |
|  3 | ueda    |
|  4 | enomoto |
|  5 | okada   |
|  6 | tanaka  |
|  7 | yamada  |
+----+---------+

ある日、Aさんがレコードを1→2→3の順に削除していました。

start transaction;
delete from users where id = 1;
delete from users where id = 2;
delete from users where id = 3;

時を同じくして、Bさんが5→4→3の順に削除しています。

start transaction;
delete from users where id = 5;
delete from users where id = 4;
delete from users where id = 3;

するとどうでしょう。Aさんがすでにid=3のレコードをいじっていたため応答が返ってきません。 Bさんは立ち尽くします。

そんなことも知らずAさんは4のレコードを削除しようとしました。

delete from users where id = 4;

するとどうでしょう。Bさんがすでにid=4のレコードをいじっていたため応答が返ってきません。 Aさんは立ち尽くします。

AさんBさんの二人はそのままいつまでも途方に暮れていましたとさ。。。
これがデッドロック!!!!!

ちなみに

さいごに

トランザクションは適切に貼ってアプリ開発しようね!

処理の途中でDBとのコネクション切れちゃった時にデータの整合性がとれなくなっちゃうー!って部分をトランザクションで囲みましょう。
切れても問題なしってところはトランザクション分けれるポイントですね。

JavaScriptの即時関数とreadyとloadの違いまとめ

たまに新規にJS書くとき、グローバルスコープを汚染したくないので即時関数で囲ってやることが多いんですが、毎回書き方どうだっけ?ってなるのでメモ。

ついでにonready(jQueryでの呼び名)とonloadについても。

実行タイミング

  • 即時関数
    • その名の通り即時
  • ready
    • DOMツリーの構築が終わったあと
  • load
    • DOMツリーの構築が終わって、画像等を読み込み終わったあと

コード

即時関数

毎回忘れる即時関数。ちなみにIIFEと呼ぶらしい。

(function () {
    console.log('test1');
})();

アロー関数を使うとこんな感じ。慣れない。

(() => {
    console.log('test1');
})();

ready

document.addEventListener("DOMContentLoaded", function(event) {
    console.log('test2');
});

road

window.addEventListener("load", function(event) {
    console.log('test3');
  });

下記でもいけるが、複数指定できない(一番最後のやつで上書きされる)ので注意。

window.onload = function(){
    console.log('test3');
}

jQueryによる記述方法

jQueryを使用した書き方もよく見かける。とてもわかりやすいQiitaがあったのでこちらを参照! https://qiita.com/mimoe/items/74cb3a01a30162759fdd

ちなみにjQueryを使用した即時関数はない。下記のような記述は引数にjQueryを渡しているだけ。

(function($){
    
})(jQuery);

【JavaScript】varとletとconstとブロックスコープについて検証してみた

はじめに

以前までJavaScriptにはvarしかなくブロックスコープはありませんでした。
最近はletconstが現れ、こちらはブロックスコープになります。
ググると『JavaScriptブロックスコープはない』ってのがヒットしますが古い情報なので注意してね。

検証コード

ブロックスコープの挙動については下記console.logの結果に注目しながらご確認ください。
ちなみにconstは上書き禁止の宣言ですが、スコープが異なれば当然別物になりますのでそのあたりも気にしながら! ついでに変数巻き上げについても見ていきます!

// ----------------------------------------
// 変数a, b, c をグローバル変数で宣言し、挙動見ていく
var a = "A";
let b = "B";
const c = "C";
console.log(a, b, c); // A B C

// ----------------------------------------
// 関数スコープでは全て別物
(function () {
  console.log(a); // undefined ※変数巻き上げのため
  //console.log(b); // Uncaught ReferenceError: Cannot access 'b' before initialization
  //console.log(c); // Uncaught ReferenceError: Cannot access 'c' before initialization
  var a = "AA";
  let b = "BB";
  const c = "CC";
  console.log(a, b, c); // AA BB CC
})();
console.log(a, b, c); // A B C

// ----------------------------------------
// varはブロックスコープではないので上書きされる
{
  console.log(a); // A
  //console.log(b); // Uncaught ReferenceError: Cannot access 'b' before initialization
  //console.log(c); // Uncaught ReferenceError: Cannot access 'b' before initialization
  var a = "AA";
  let b = "BB";
  const c = "CC";
  console.log(a, b, c); // AA BB CC
}
console.log(a, b, c); // AA B C

// ----------------------------------------
// ブロックスコープ内で上書き
{
  a = "AAA";
  b = "BBB";
  //c = "C"; // Uncaught TypeError: Assignment to constant variable.
}
console.log(a, b, c); // AAA BBB C

// ----------------------------------------
// グローバルスコープ上で再定義
var a = "AAAA";
//let b = "BBBBB"; // Uncaught SyntaxError: Identifier 'b' has already been declared
//const c = "CCCC"; // Uncaught SyntaxError: Identifier 'c' has already been declared
console.log(a, b, c); // AAAA BBB C

ややこしいですが状況に応じて使い分けていきましょう!

さいごに

JSの挙動確認するときはRunstant Liteがオススメです!
上記ソースをコピペして試してみてね。