頭の中は異空間

ものづくり中心

Macbook Air、iTunesでiPhone等バックアップするために

 

Macbook Airに定期的にiPhoneバックアップをするのですが、これが人によっては数十GBは必要とするので結構な容量になってしまいます。対策として外付けHDDへ保存したいところ。ということで、簡単にメモを書きます。

 

一応この手の記事はすでにあるのですが、それらを見ても肝心のBackUpファイルの場所が分かりませんでした。そこでiTunesを使って確実にBackupファイルの場所を特定する方法が大事になります。

 

用意するもの

 

特定方法

iTunesを開き、環境設定からデバイスを選択。英語設定ですが日本語で読み替えること。

f:id:notwo:20170501080615p:plain
f:id:notwo:20170501080758p:plain

このようなフォルダが開く

ここでiPhoneの名前(デフォルトだと◯◯のiPhoneなど)を選択して右クリック→フォルダを開く

f:id:notwo:20170501080812p:plain
f:id:notwo:20170501080826p:plain

これでBackupフォルダを特定できました。ただ、名前だけ見てもどれがどれだかわかりませんが...普段から要らないBackupは削除したほうが良いでしょう。

 

HDDへ保存

外付けドライブをUSBポートに接続し、対象のBackupを移動するだけ。簡単ですね。iTunesの保存設定を変えたりも出来ますが、HDDをつけっぱなしにするのでもなければバックアップする際だけつけるとすればこの方法が一番ラクです。

【Mac】Heroku + Python環境構築

Heroku初心者向けに環境構築ネタということで書きます。まだ自分のアプリがない状態で、1からherokuで開発をすすめるためのメモです。

(まあ自分も初心者なんですけどね)

 

 

前提、やること

MacOS上で、CLIを使ってHerokuにPythonアプリをリリースします。

 

準備

Python

MacOSならPythonはプリインストールされています。予めバージョンは確認しましょう。今なら3系のはずです。

f:id:notwo:20170418082045p:plain

仮に2系なら、3系が必要なので下記リンク先の手順に従ってバージョンアップします。

qiita.com

バージョンアップが終わったら、下記コマンドで現行バージョンを確認して次へ。ここでは現時点で最新の3.6.0を使ってみたかったのですが、definition not foundだったので諦めて3.5.1にしました。

バージョンのリストは

pyenv install --list

で確認できます。

インストールしてみます。

f:id:notwo:20170418082200p:plain

もし上画像のように失敗したら、

qiita.com

の通りにやってみる。

f:id:notwo:20170418082122p:plain

今度バージョン確認したら、問題なくバージョンアップされていました。

以下、追記。

↑で変わったと書きましたが勘違いで、実際python -Vしたらまだ2系のままでした(泣)ん!?間違ったかな?

なので~/.bash_profileを開いて、

eval "$(pyenv init -)"

の1行が入っているかをチェック。私の場合は入っていませんでしたので追記してsource ~/.bash_profileします。python -Vしてみると、今度こそ変わりました。

 

pip

Pythonのバージョンアップ/インストールが完了していればもうインストールされているはずですので、バージョン確認します。

f:id:notwo:20170418082350p:plain

 

virtualenv

qiita.com

の通りにインストール。

 

postgresql

qiita.com

の通りにインストール。

でも、後でgettingstarted/settings.pyの中の設定を見ているとデフォルトでSQLite3が設定されているので、もしかしたら要らないかも?...ないと何か起こるのでしょうか。

 

Heroku

Herokuにアカウントを作ります。サイトに行けば説明が書いてあるし簡単すぎるのでここでは割愛します。

アカウントが出来たらPythonのappを作成します。

f:id:notwo:20170417080140p:plain

 

 

f:id:notwo:20170417080943p:plain

青枠3点を追加で確認します。pipがインストールされていなければインストールします。 VirtualenvとPostgreSQLもインストールします。上で既にやっていますね。

次のページに進みます。

 

Heroku  CLI

下画像の赤枠をクリックし、

f:id:notwo:20170419075706p:plain

Macインストーラを開きます。

f:id:notwo:20170419080511p:plain

pkgファイルのリンクに変わるので、Macにダウンロード&インストールします。これでherokuコマンドが使えるようになりました。そのまま同ページ内のheroku loginもやってしまいましょう。

そこまで終わったら、下記コマンドを打ってテストアプリを落とします。

git clone https://github.com/heroku/python-getting-started.git cd python-getting-started

close成功したら、下記コマンドを実行します。

heroku create

ログが出てアプリがherokuに作成されます。ログ中のURLをブラウザにコピペしてアクセスしてみます。

f:id:notwo:20170423083127p:plain

下画像のような画面が出ればOK。 

f:id:notwo:20170423083136p:plain

下記コマンドでデプロイ。

git push heroku master

何やらたくさんログが流れて、先程作成したアプリがherokuにデプロイされます。

デプロイが完了したら、先程アクセスしたURLを更新してみます。すると下画像のような画面に変わるはずです。

f:id:notwo:20170423083148p:plain

その後は

heroku open

でブラウザオープンしてサイトを開くことが出来ます。ひとまずここまで知っていれば自分のアプリをデプロイすることが可能になります。

公式サイトのそこから先を読み進めると、ログの見方やローカルでアプリを実行する方法、環境変数の設定方法、DBのプロビジョニングの方法などがまとまっています。逐一全ページをここで解説するのも骨が折れるし、説明が冗長になってしまうので、このくらいにしておきます。

 

ディレクトリの中身

作成されたディレクトリを見てみると、python-getting-started以下にhelloというサンプルプロジェクトが作成されているのがわかります。

~~~-MacBook-Air:python-getting-started ~~~$ ls
Procfile		app.json		manage.py
Procfile.windows	gettingstarted		requirements.txt
README.md		hello			runtime.txt

ファイル構成からして、またhello/views.pyの中身からしDjangoフレームワークとしているようです。

[~~@]$ cat app.json
{
  "name": "Start on Heroku: Python",
  "description": "A barebones Python app, which can easily be deployed to Heroku.",
  "image": "heroku/python",
  "repository": "https://github.com/heroku/python-getting-started",
  "keywords": ["python", "django" ],
  "addons": [ "heroku-postgresql" ]
}

app.jsonを見るとaddonはデフォルトでpostgresqlのみ。ほか、リポジトリやプロジェクト名など見れます。

gettingstarted

[~~@]$ ls gettingstarted/
__init__.py	settings.py	static		urls.py		wsgi.py

hello 

[~~@]$ ls hello/
__init__.py	migrations	static		tests.py
admin.py	models.py	templates	views.py

 

Djangoでの書き方とPostgreの使い方が分かればあとは自由に改変出来ますね。

 

無料枠の注意点

以上はすべて無料枠で出来ます。しかしherokuの無料枠の仕様は適宜変更されます。用途によって有料化するか否かを決めるべきでしょう。料金体系については

qiita.com

が分かりやすかったです。どうやらいくつものアプリを24h稼働、は有料化する必要があります。しかし今やAWSやらAzureやらGoogle Apps Engineやら、クラウドサービスは競合があって選べるので、有料化する際にはherokuが本当に良いのか、他に移るべきか、見極めも必要と思います。

以上、ここでは本当に走りだけですが今後も新しく何か作ったりするたびに記事にしていきます。

 

まとめると

以上、PythonでHeroku上で開発ができるようになりました。既にこのネタはQiitaなどにも散々まとめられています。だから何番煎じかわかりません。それでも自分用メモとして残しておき、また画面からたどることで本当に初心者でもとっつきやすいメモになった自信はあります。何より記事を書きながら開発を進めていくのは楽しいし、仕事で淡々と作る時とは意欲に明確な違いがあります。このエネルギーが元で一気に開発が進めばいいし、躓いたらいつでも自分で書いた記事を見て振り返ることが出来ます。以前にもRailsAWSで初心者なりにやってみたことはまとめたので、それらが今後何かの役に立つことを願います。

【Ruby】カレンダー表示用日付配列を作成してみる

仕事で必要になって年度ごとカレンダーを表示するためのクラスを作ったので、ついでにメモしておきます。

 

code

Rails

def make_calendar
  today = Date.today
  calendar = {}
  start_day = today.beginning_of_month
  start_week = [1, 2, 3, 4, 5, 6, 7]
  end_week = ["", "", "", "", "", "", ""]
  end_day = today.end_of_month
  middle_week = []
  middle_days = []

  start_week.count.times do |index|
    index >= start_day.wday ? start_week[index] = index - start_day.wday + 1 : start_week[index] = ""
  end
  (end_day.wday + 1).times do |index|
    end_week.unshift(end_day.day - index)
    end_week.delete_at(-1)
  end

  week_day = 7
  last_day = start_week[start_week.count - 1]
  ((end_week[0] - start_week[start_week.count - 1] - 1) / week_day).times do |index|
    middle_days = []
    week_day.times do |day|
      middle_days.push last_day + day + 1
    end
    last_day = middle_days[middle_days.count - 1]
    middle_week.push middle_days
  end
  { start_week: start_week, middle_week: middle_week, end_week: end_week }
end

 

HTML(erb)

<% calendar = make_calendar %>
~~~
<%# 最初の週 %>
<% calendar[:start_week].each do |day| %>
  <%= day %>
<% end %>
<%# 間の週 %>
<% calendar[:middle_week].each do |middle_week| %>
  <% middle_week.each do |day| %>
    <%= day %>
  <% end %>
<%# この辺で折り返しさせたい %> <% end %> <%# 最後の週 %> <% calendar[:end_week].each do |end_week| %> <%= day %> <% end %>

 

考察

カレンダーをPCなり壁がけの紙でも良いので見てみると、最初と最後の週には前後の月の日付が入っていることに気づくはずです。ここではその前後の月にあたる日付を省いた、その表示したい月の日付のみを表示させます。first_week、 end_weekがそれに当たります。繰り返しのところに改行を挟んで表示させればそれっぽく見えるでしょう。CSSまで当てれば自分のオリジナルカレンダーが作れます。

ここではRubyで書いていますが、他の言語でも勿論応用可能。todayの部分を引数で渡せば好きな月のカレンダーを表示できます。

GAS(Google Apps Script)とフィルタを使ってGmailの整理を楽にしよう

Gmailを使って効率よくメール管理するための方法を簡単にまとめます。

 

 

 

ラベル作成

歯車マークをクリック→設定→ラベル→新しいラベルを作成

f:id:notwo:20170406080416p:plain
f:id:notwo:20170406081321p:plain

このとき、ラベルを階層構造にしたいなら、次のラベルの下位にネストをクリックして親ラベルを選択してください。

f:id:notwo:20170406082051p:plain

 これで、仕分けしたいメールの必要な分だけラベルをまず作成します。あとで見て分かりやすいように。

 

フィルタ作成

歯車マークをクリック→設定→フィルタとブロック中のアドレス→新しいフィルタを作成

f:id:notwo:20170407075133p:plain
f:id:notwo:20170407075146p:plain

フィルタは差出人(from)単位で作成します。ただし、このときメールアドレスの@から先のみを記述すること。これで、amazon.co.jpなど出品元がたくさんあっても@以下が同一の複数の差出人からのメールをまとめて同一にラベリングできます※1。

件名単位は便利そうですが使いません。スレッドという形で自動でまとめられるからです。

 

※1 例えばaaaaa@amazon.co.jpとbbbbb@amazon.co.jpが同一ラベリングされるということ。

 

GAS作成

スクリプトでは古いメールの定期削除をします。メールの量や頻度によりますが、例えばここでは3ヶ月前のメールを削除するとします。スクリプト自体は

notwodaily.hatenablog.com

で紹介しました。本記事では割愛します。

 

定期実行設定

スクリプト画面の時計マークをクリック

f:id:notwo:20170408094337p:plain

ダイアログが出るので、No triggers set up. Click here to add one now.をクリック

f:id:notwo:20170408094428p:plain

Current Project's triggersの設定をします。Runには今作った関数名を、Eventsで実行タイミングを設定します。ここでは毎月実行させるものとします。下画像のようにTime-driven, Month timerを設定。横の1は月に1度という意味になります。実行時間はMidnigh to 1 amの欄で変えられます。

f:id:notwo:20170408101108p:plain

 

考察点

ここでは60日前までを削除、つまり現在から約2ヶ月分はメールを保持します。昔のメールはまず見ないという体験を元に考えました。もしどうしても消したくないメールがあるなら事前に別のメールアドレスに転送するか、アーカイブしておいてアーカイブ済みメールは対象から除くなどしても良いでしょう。

 

まとめ

ここまでで、メールをフィルタ、ラベルで整理するとともにラベルごとに古いメールを自動で定期実行する設定までが完了しました。スクリプトや設定を変えれば、メールを転送したりアーカイブしたり、実行頻度を変えたり、検索条件を変えることで様々な要件に対応出来るようになります。大事なメールは自動でアーカイブするよう設定して、アーカイブ済みメールは別のメールアドレスに転送する、のような機能も面白いかもしれません。整理の仕方は色々です。

ヒューマンパワーと精神論に頼る時代遅れな方法よりも、こういう便利機能を使って手間を減らしていきましょう!

国庫金送金通知書が来てからやること

f:id:notwo:20170218083428j:plain

フリーランサーなどにはおなじみ、確定申告の時期になってきました。準備をしないといけません。

さて、それとは別に払いすぎた税金のキャッシュバックの手段として、「国庫金送金通知書」なるものが送られてきました。去年の分なので今更なのですが(笑)まあともかく、これが来てから何すりゃいいの?となりがちなので、簡単にメモを書きます。数万円戻ってくることはかなり大きいのでチャンスを逃さないように!

 

 

やること

書類に記載の郵便局に行って金を受け取るだけ。

ただ、この郵便局がどこかが問題です。例えば筆者の場合、ゆうちょ銀行本店品川出張所でした。駅チカなので助かりました。ところが最初にgoogle mapで調べると品川シーサイド無人ATMの出張所を指しており、これでどうやって受け取るんだ?と思ったものです。筆者が馬鹿だったのでしょうか?

 

場所について

記載の場所がわかりづらいなら、最寄りの郵便局でこれ受け取りたいんですが、とでも聞きましょう。案内の人か窓口の人が、どこの郵便局でなら受取可能なのか、親切に教えてくれます。

 

持ち物

  • ハンコ
  • 国庫金送金通知書
  • 送付書に記載のある住所と同一の住所が分かるもの→免許証など

後者の住所については引っ越し後だと残っていない可能性が高いですが、一応受取は可能です。照会に少し時間がかかってしまいますが...要するに本人が特定出来ればいいのです。

それにしてもまだハンコが必要なことに驚きです。もっと画期的なシステムを導入すればお互いに楽になるのに。古き悪しきシステムということですね。

 

注意点

郵便局に行くと、現地で現金手渡しされます。あまり金を持ち歩きたくない人はさっさと口座に入れるなりしましょう。

場所以外には受取の期限があります。送付書が届いてから1年以内にやらないと郵便局での受取が不可能になります。代わりにどうすればいいかは送付書にあるので、絶対になくさないこと。

iphoneが壊れた時に考えるべきこと

iphoneが去年いかれてしまったので、別のに変えました。そして今年また調子が悪くまた変えました。いい加減出費がひどくて嫌になります。通常、どのキャリアの携帯もサポート期間中だろうと本体を無償で交換、というサービスを提供しません。そこはまあ突っ込まないというより仕方ないとして、実際壊れたら購入の流れになるところですが、ここが考えどころです。金を無尽蔵に出せるわけではないので、よく考えて購入しないと泣きを見そうでね。

 

本当にすぐ買い換える必要があるのか?

ここでよく考えたいのが、実際にすぐ買い換える必要があるのか、人によってはなくてもそこまで困らないんじゃないかということ。特に筆者のように友人が少ない人には

高い金を出して買い換えるのが予算的にどうしてもって人は、借金して買う前に踏みとどまるべし。

一人暮らしなら、今やSkypeやLINEというアプリがあるではないですか。自宅デスクトップPCもしくはノートにそれを入れれば、普段外出しない人は事足ります。iPadなどのタブレット端末やMNP済みで電話が出来ないスマホ(SIMの入れ替えをするなら壊れた携帯と同じキャリアに限る。キャリアが違うならネット専用かな...)など壊れた携帯以外にポータブルデバイスを持っているなら、かつポケットWiFiを契約済みならそれを普段持ち歩いて必要な時にネットを見れば良い。電話についてもメールについてもLINEくらい今はネットリテラシーがない人でさえ当たり前に入れてますから、それで出来ればいいと思います。調べてみたら回線契約なしでも電話出来そうだし、やり取りも既読かどうか見れるのでLINEの方が便利。それが難しい場合は、後述のような中古の端末を購入するのが合理的。

実家暮らしなら、実家の電話番号を教えてそこにかけてもらえばOK。もしくは一人暮らしと同様の手段。

今時の人もそうでない人もFacebook/Twitter/LINEを押さえておけばどれかしらやってるはずなので、そこで連絡取ってくれって言うだけ。楽。少し古いですが総務省のサイトにもある通り、今やSNS経由の連絡は劇的に増えているので、使っていて当たり前くらいの感覚になります。だから意外と携帯の電話やメールがなくっても意外となんとかなっちゃいますね。メールについてはGmail, Yahoo mailなどのフリーメール機能もあることですからそちらを利用すればOK

興味があればこの方法でやってみてどうも不便だと感じれば購入したらいいでしょう。

 

買い換えるなら中古 or 新verが出た直後

今や毎年のようにiphoneの新型が発売されています。ITのニュースサイトやそれ関連のサイトを見ると、すでにiphone8の噂が出ています。

news.livedoor.com

gigazine.net

技術の進歩は早い!と実感しますね。さて新たにスマホを購入するなら、新型を欲しくなるかも。でもそれって本当に必要でしょうか?という疑問が。

筆者の場合、必要最低限のスペックと機能がどれかを調べます。つい最近までは譲り受けたiphone4Sを使っており、これが3GでしかもiOSバージョンの問題か知りませんが動作が半端じゃなく遅いのでかなりストレスでした。だからこそ、買い替えを決断しました。iPadMNP済み携帯も持ってますがこれはこれで別の用途に使いたいし、今持っているWifi端末は3月末には解約する予定っていうのもあります。

そこで今回購入したのはこれ

5Sも今は古いと言われるかもしれませんが、ほとんど傷がなく、税込送料込で15000円。中々悪くない買い物でした。

f:id:notwo:20170214005449j:plain f:id:notwo:20170214005457j:plain

6では2万円超えが当たり前だったので控えました。ちょっと探せばこのようにリーズナブルな価格で代替出来るものが見つかります。

もし最新版が良ければ、中古でなくSIMフリーが良さそう。とは言え今のところSIMフリー端末についてはまだ詳細を調べていないためここには書きません。既に他所の多くのブログやニュースサイトに取り上げられているとおり、大手3キャリアによる2年縛りの解除SIMロック解除義務化といったニュースは記憶に新しいです。従来とは大分料金体系も違っているので、購入前には改めて調べなおして損のない支払いプランを選択したいもの。今後もっとリーズナブルなプランを提供する業者が現れることを期待して、それまでは手元のスマホを長持ちさせてみてはいかがでしょうか。

 

そもそも最新でなくても困らない

スマホのトレンドを常に追っかけている人でもなければ常に最新、なんてのは不要かと。今使っている5Sで実用に耐えますし、事足りています。さすがに4S以前は無理がありますが。2017年2月現時点で出ている7も、故障しない限り現役でいられるはず。Androidでも考え方は一緒。買い換えるきっかけは故障以外にはどうしてもそのバージョンで特定のアプリが動かないとか、スマホ自体の動作がおそすぎるとか、最新バージョンのスマホがどうしても欲しい理由があるときに限るかと。多少古かろうが誰かに迷惑がかかるわけでもなし、こだわりがなければ買い換えずにずっと使うことは賢い選択だと思います。

 

まとめると

買う前に調べたり必要な機能が何か洗い出したりやるべきことはあるので、そんなときこそ冷静になろうって話でした。携帯代は削ろうと思えば削れる出費ですし、毎月のしかかってきますので、出来る限り工夫しましょう。

jQuery、JSまわりでよく起こすであろうバグをざっくりと。

f:id:notwo:20170108184111p:plain

焦ったり急いでコーディングしてると忘れがちで結構やらかしている事が多いミス。JSは自由度が高すぎる言語なので決まりをある程度設けないと滅茶苦茶なコードになってしまいますね。前に実際にやらかしたミスや今後も気をつけないと繰り返しそうな凡ミスの例を書き出してみます。

 

バグの温床

data, attr, propでのデータ取得(get)/更新(set)

qiita.com

上記事に分かりやすくまとまっています。それぞれどのような特徴があるかを知った上で使い分ければミスしません。

 

$(this)の中身

関数が入れ子になっていると起こりうる現象。thisの参照先が異なるためにバグの温床になりやすいです。他サイトでも説明されきってる感じですが一応。

// 実際には下記のように書かずに$(".hoge").on('change', ~~~と書きますが分かりやすくするために。
$(".hoge").each(function() {
  // ここの$(this)と
  $(this).find('input').on('change', function() {
// ここの$(this)は違う console.log($(this));
}); };

 

id読み込み時の挙動

id属性はuniqueである必要があるので、idが重複していた場合通常は正しくJSが動作しないはず。

昔のIEではJSの挙動がおかしくなっていましたが、ChromeFireFoxではなんと中で独自に解釈したのか、ID重複後もエラーを吐かずに動作していました。なぜなんだろう。。

最新Ver(現時点で55.0.2883.87 m (64-bit))のChromeで試しにやってみると、・・・

 <body>
<div id="hoge">最初のid</div>
<div id="hoge">2つめのid</div>
<div id="hoge">3つめのid</div>
</body>

に対して

f:id:notwo:20170108193008p:plain

この通り、動くみたいです。最初のidに合致する要素を取ってきています。

しかし異常な挙動であることに代わりはないので、うっかりダブらせてしまったら速攻で削除してやるべし。

 

true/falseの空判定

!!"false"

これはtrueになります。文字列のfalseもtrueもtrueとして扱われるので、わかりづらいです。文字列でfalseになるのは""のみ。関数や変数の中身で判定する時、文字列が返ってくるとわかっているなら必ず === ""の空判定をするべし。

もう一つ、勘違いしやすい判定として

if []

もしくは

if {}

これはfalseになるかと思えばtrue。if文にundefinedやfalse, nullが入れば当然falseとして扱われますが、[]/{}自体は中身が空にもかかわらず1つの空でないオブジェクトとして扱われるのが原因。配列を判定するとわかっていれば

変数.length > 0

連想配列jsonであれば

Object.keys(変数).length > 0

とすれば中身が空かどうか判定出来ます。

最後に、曖昧比較(==)と厳密比較(===)。前者は変数の型を半ば無視して判定するので、本来falseなはずがtrueにしちゃう。例えば

100 == "100"

これはCやJavaなどでは明確にfalseになるのですが、JSでは==を使う限りtrue扱いです。StringとNumberで比較して同一とか何の冗談だと。でも企業のコードでこういうの多いです。PHPとかJSみたいな動的型付け言語では変数の型がわかりづらいことで、バグの温床になります。関数に渡す変数の型が違ったせいでエラーを吐いていた場合、この変数の型違いによるものが起こりうるので、余程の理由(ってなんだ?)がない限りは厳密比較を使うべし。

 

null.~~

例えば要素取得してattributeへアクセスする場合。$("~~")が存在しない場合nullになり、null.attribute名でCannot read propertyとなります。

要素名をtypoによって引き起こすことはテストによって排除出来るので、動的な要素変更があった場合に起こりうるバグです。class名やid属性変更後は特に注意です。

 

find, closest等による要素取得

viewのツリー構造が予めわかっていればfindだけでなくclosest, next等で要素を狙って取得できますが、ツリー構造に変更があった場合はその取得の仕方も変えないといけません。id属性やclass属性で取得していればclass名、id名を変えない限り影響はないのでまだ安心です(変える時は注意)。

 

自由度が高いからと言って好き放題やらない

1つのロジックを作るのにも多くの手段がありますが、実際書き方1つ違うだけでシンプルできれいなコードにもクソコードにもなります。

クソコードの例としては

unkode-mania.net

を見れば大体わかりそうなものです。本当にひどい例です(笑)

そうならないためには、言語ごとに役割を明確にもたせておくのが良いかと。

 

他の酷い例

関数名とreturn内容が合ってなかったり

  // タイトルを返すと書いてあるのにコメントを返している
  function title() {
    ~~(処理)
    return comment;
  };

(残念ながら某所で↑の例を実際に見ました...)

HTMLにif, forなどの複雑な構文を埋め込む(erbとして書きます)

<div class="~~~">
<% if hoge %>
  <% fuga.each do |f| %>
    <span class="~~">xxx</span>
    <% if piyo >
      book = Book.find ~~
      ...
    <% end %>
  <% end %>
<% end %>
</div>

Viewの役割に複雑な構文を突っ込んでいるだけでなく、クエリも走らせています。これでは見づらくて仕方ない。

こういう酷い例を見たら多少リスクを犯してでもついでに直しておいて、次見た時読みやすくしておくのがまともなエンジニアってもんでしょう。リファクタリングで多少のミスが出てもそれが致命的なものでないなら、それは大した傷ではないと思います。寧ろクソコードが新しく生み出され続けることのほうが余程重症なので。

ここではJS、特にjQueryを使った際のバグについて書きましたが、他の言語でも色々ひどい例は見てきたので、また何か酷いのを見つけたら書くと思います(笑)