月別アーカイブ 7月 2018

著者:asabakento

循環参照をつぶしてみる

今日は、Excelで表処理するときに循環参照をしてしまうことがあったのでその解決法を備忘録として残します。

 

循環参照とは、関数式の書いてあるセルを含む計算式を定義してしまい

永遠にその式を繰り返してしまい演算結果がかえってこない参照のことを指します。

 

これを放置していると、式としてはエラーはないものの

このような警告が頻繁にダイアログとして表示されるので

作業効率がぐっと落ちてしまいます。

 

 

規模の大きいファイルを作る場合

間違いのセルを見つけることは一見難しそうに感じますが

簡単に探してつぶせます。

 

まずは、数式タグを開いてワークシート分析内の

エラーチェックという項目の右矢印をクリックします。

すると、循環参照という項目があるので、矢印に従ってカーソルを合わせると

下のスクショにように、循環参照の対象セルを特定することができます。

 

あとは対象のセルを修正すればエラーチェック完了です!

 

ちなみに自分はExcel2010を使っているのでそれ以外のバージョン

だともしかしたら方法が異なるかもしれないです。

 

これ以外にも厄介なエラーがあるのですが、その解決法はまたの機会に紹介させていただきます。

 

 

 

  • この記事いいね! (0)
著者:ym

礼儀2.0

礼儀1.0 と 礼儀2.0

日本人は礼儀もアップデートできていない。礼儀2.0世代が感じる「相手の時間を奪う」非効率なマナー – BUSINESS INSIDER JAPAN

面白い。w

礼儀2.0 は、「相手の時間を奪わない」

礼儀の定義が変わってきてる気がした
礼儀1.0
相手を重んじる。自分の時間を犠牲にし、時間を相手のために使う。直接会う。スーツなど服装をわきまえる。
礼儀2.0
相手の時間を奪わないようにする(電話しない、リモートで済むものはリモート)

見極めが必要なのだそうです。

「礼儀1.0」と「礼儀2.0」は単なるプロトコルの違い。自分と相手がどちらに属しているかを見極め、必要であれば“プロトコルを変換させる”と考えるべきだ、とGOROmanさんはいう。

礼儀も2.0にアップデートして世界と戦えるレベルに追いついて行かなければ、日本もどんんどん遅れをとりますね。

  • この記事いいね! (1)
著者:ym

DNSアップデート

前の家から一緒に引っ越してきた13年もののエアコンがとうとう壊れ、温風しか出さなくなってしまったので新しいエアコンを購入することになりました。しかも子供部屋にも必要ということで2台。一つ5万円くらいかとおもったら、なんやかんやで倍位以上。やむを得ず5年ローンを組みました。

私はエアコン無しでも生活できるのですけどね。とんだ週末、まいりました。

今日はBINDのバージョンアップです。

しばらく、脆弱性への影響が無いものばかりだったのでほったらかしていましたが、あまりにも空きすぎたのでアップグレードを行ってみました。

そろそろ、新しいメジャーバージョンへ追いつきたいところですが。

DNS サーバとしては 4 台可動していて、権威サーバが2台、キャッシュが2台というシンプルな構成で可動しているので、まずは片側をアップグレードして様子をみます。約 1 週間間を置いて、冗長相手側をアップグレードする予定です。

JPRS DNS 関連技術情報

DNS サーバを運用している方は、こちらの日本のJPドメイン名を管理する JPRS のページに情報が掲載されるのでチェックしておくと良いです。

  • この記事いいね! (0)
takahashi 著者:takahashi

Apache 2.2系で”_default_”の重複エラーが出るときの解決法

今回、少し古めの環境を再現する必要があったため構築作業を行っていたのですが、少しハマったので備忘録。

Apache2.2系とCentOS6を使ったテスト環境を作成していたのですが、設定完了し、configtestを行ったところ…

# apachectl configtest
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[Tue Jul 17 14:41:13 2018] [warn] _default_ VirtualHost overlap on port 80, the first has precedence
Syntax OK

とのエラーが。
“_default_” の指定はVirtualHostで指定されたどのドメインにもマッチしなかった場合や、IPアドレスでアクセスされた場合に使われる”デフォルトの”VirtualHostを指定するときに使います。
超簡単に書くと

<VirtualHost _default_:80>
    ServerName example.com
    DocumentRoot /path/to/directory
</VirtualHost>

のように指定すると、すべてのVirtualHostで記述のないホスト名で接続された場合や、VirtualHostディレクティブで指定されていないIPでアクセスされた場合は、この”_default_”が指定されたVirtualHostの設定が適用されます。
デフォルトの動作を定めるオプションなので、全設定ファイル中1箇所でしか指定できません。
この_default_の指定を複数個所で指定してしまった際に出てくるエラー(Warning)が

_default_ VirtualHost overlap on port 80, the first has precedence

です。
ただ、今回の場合”_default_”は一か所でしか指定していなかったにもかかわらず、上記のエラーが出てしまっているのでちょっと首をひねっていました。
Warningなので無視をしてもApacheを動かすことはできますが、予期しない動作をしてしまうことがあるので直しておきたいところ。

いろいろ調べたところ原因が判明しました。

Apache2.2系でVirtualHostする場合は”NameVirtualHost *:80″の指定が必要

Apache2.2系の場合、VirtualHostを設定する場合はNameVirtualHostを指定する必要があります。
指定するときは

NameVirtualHost 対象のIPアドレス:対象のポート

とします。
IPアドレスが定まっていない、あるいはサーバに割り当てられているIPすべてに適用したい場合は

NameVirtualHost *:80

と指定することも可能です

“_default_ VirtualHost overlap”エラーはこのNameVirtualHostが指定されていないときも出力されるようで、今回はこれが原因でした。

ただし、Apache2.4からはNameVirtualHostは指定しなくてもエラーは出ません。(NameVirtualHostの指定なしでVirtualHostを指定できます。)
これから新しい環境を作る際にApacheを用いる際、大抵の場合はApache2.4を使われるかと思いますので気にする機会は少ないかとは思いますが、Apache2.2系の環境を作られる機会があった場合は注意が必要です。

  • この記事いいね! (0)
著者:asabakento

mapboxのポップアップについて

今回は、mapbox上でピンをタッチすると、画像がポップアップとして出てくるコードを紹介します。

 

ポップアップを付けるときに、画像を撮影した場所にピンを付与して、それをクリックすると

画像がポップアップとして出てくる機能を追加する作業をしていたので備忘録として載せておきます。

 

ざっくりですが説明します。

ポップアップを表示するメソッドを作ったあとに


var el = document.createElement('div');

でピンのオブジェクトを生成します。

 

その後に

 
popup = new mapboxgl.Popup({offset: [16, 0]})

で、ポップアップオブジェクトを生成して使用可能にします。

 

次に、画像をポップアップとして扱うコードなのですが

.setHTMLメソッドを使って表示します。

本来は、htmlの文字列を表示する役割ですが、ここでは

 

 
src = '+image+'

引数のimageを取って中の画像のurlを渡すことができます。

 

ピンが複数立っている時は、そのピンをクリックするときに引数に画像のurlを持たせて

そのurlに合わせて表示するポップアップを変えていると考えるとわかりやすいかもしれません。

 

後は

setLngLat([lmg,lat])

 

 

で、引数のlatとlngを渡せば撮影した場所にピンが立ちま

す。

以上ですが、ここでは肝だけ説明させていただきました。

 

mapboxは柔軟性が高く、細かい箇所まで地図をカスタマイズできるので

慣れてきたらシムシティ感覚で楽しくなってくると思います!

  • この記事いいね! (0)
村上 著者:村上

【MySQL】「Column ‘[カラム名]’ in order clause is ambiguous」エラーの対処法

どちらかと言えば、初心者がやりがちなMySQLのエラーですが、私はいまだにやらかすのでまとめ。
MySQLの構文エラーです。

エラー文はこちら。

ERROR 1052 (23000): Column ‘[カラム名]’ in order clause is ambiguous

Google翻訳にで訳すと、「order節の ‘[カラム名]’列があいまいです」とのことでした。

 

こちらのエラーは、JOIN を使って テーブルを結合するときに発生することがあります。
原因は、結合するテーブルの両方に存在する、同名のカラム名をソート条件で使っているためです。

例えば、下記のようなテーブルがあり、これを結合してみます。
テーブル1:profile

id name year blood
1 田中 20 2
2 鈴木 31 3
3 佐藤 26 1

テーブル2:blood_type

id blood_type
1 A
2 B
3 O
4 AB

SQL文はこのようになるかと思います。

SELECT name, year, blood_type FROM profile INNER JOIN blood_type ON profile.blood = blood_type.id;

で、このSQL文に、ソート条件として、profile テーブルの idカラムを指定したとします。
その時に、下記のように記述してしまうと、今回のエラーが発生します。

SELECT name, year, blood_type FROM profile INNER JOIN blood_type ON profile.blood = blood_type.id ORDER BY id;

単に id というカラムは、結合している blood_type テーブルにも存在しているため、どちらの id でソートするかが明記されていないためです。
そのため、下記のように修正します。

SELECT name, year, blood_type FROM profile INNER JOIN blood_type ON profile.blood = blood_type.id ORDER BY profile.id;

ソートしたいカラムがどのテーブルのものかを指定したので、問題なく実行できました。

 

以上、SQL文のエラーの対処法でした。
カラムが多いテーブル名を扱うときに、よくカラムが重複しているのに気づかずこのエラーに遭遇することがあります。
また、ORDER条件の時だけでなく、SELECTの後ろで取得したいカラム名を指定するときにも、重複しているカラム名を指定してしまうと、どのテーブルのカラム?と聞かれてしまうので注意しましょう。
まあ、SELECT文なので、ミスをしてもデータが消えたり、書き換えられたりすることはないので、MySQL初心者でも恐れずに、どんどんエラーを発生させて対処法を学びましょう。

  • この記事いいね! (1)
著者:杉浦

変数や関数の使用されている場所を探す

 変数や関数の使用されている場所を探すにはファイルを横断して検索を掛けるという方法が考えられます。正規表現を用いた正規表現によっていくらかは絞り込めますが、完璧に行うには正規表現のみでは力不足です。
 変数名や関数名といった識別子を検索すれば、ある程度、変数や関数の使用されている場所を探すことができます。

 このままではhogeやhogebも検索結果に含んでしまいます。識別子でない文字で括られていることを判断する正規表現で、余分な識別子を検索結果から弾きます。

 [^a-zA-Z\$_]の部分は言語によって異なります。上記の正規表現はJavaScriptの規則に従っています。

JavaScript の識別子は必ずアルファベットかアンダースコア (_) かドル記号 ($) から始まらなくてはなりません。続く文字は数字 (0-9) も使えます。JavaScript は大文字・小文字を区別するため、使えるアルファベットは “A” から “Z”(大文字)と “a” から “z”(小文字)です。
引用 変数 – JavaScript | MDN

 ざっくばらんに行うならこの方法で十分ですがこの方法には問題点があります。問題点はスコープを無視するという点と、変数と関数と文字列の区別をつけない、という点にあります。下の様なコードを検索した場合、一つ目の変数hogeの呼び出しカ所を知りたいのに、関数名hogeや文字列hoge、即時関数内のhogeを検索結果に含んでしまいます。

var hoge = 0;
console.log(hoge);
(function hoge(){
	var hoge = 1;
  console.log(hoge);
})();
console.log(' hoge ');

 スコープを無視する、変数、関数の区別がつかない、という問題の単純な解決法は同名の識別子で宣言を行わないことです。固有な識別子をそれぞれが持つならば、このような問題は起こりません。

  • この記事いいね! (0)
takahashi 著者:takahashi

Apacheをどう設定しても403になる時はSELinuxを疑え!

ここ最近、サーバーを構築する機会が何度かあったのですが、Apacheの構築中しばしば同じところでハマることがあったので備忘録。

Apacheでは通常、公開するディレクトリ(ドキュメントルートとするディレクトリ)のアクセス権限を下記のように与えてやれば、Webブラウザからのアクセスが可能になります。
例えば、

#2.2系
<Directory /var/www/html>
Order Deny,Allow
Deny from All
</Directory>
または
#2.4系
<Directory /var/www/html>
Require all granted
</Directory>

とすれば
/var/www/html
配下がアクセス可能になるはずです。
勿論、OS側のアクセス権限も調整する必要がありますが、Directoryディレクティブを設定し、なおかつOS側のファイルアクセス権限も問題ないはずなのに、ブラウザで開くと何故かステータスコード403(Forbidden)が返され、コンテンツが見えない、といった事情が起こりました。

ドキュメントルートのディレクトリよりもさらに上のディレクトリに、実行権限がついてるかどうかを確認したり、権限を一括で書き換えたりなど行いましたが、一向にアクセスできず。

いろいろ調べたところようやく原因に多とりつきました。

SELinuxです。

SELinuxはアクセス制御を行うモジュールで、米国NSAがオープンソースで提供しています。

非常に強力なのですが、サーバーのように一般的によくアクセスされる場合は障害になることも多いので、基本的には無効にします。
ただ最近は、インストール時に既に無効になっているものも多いのですが、今回使ったCentOSの場合はデフォルトで有効になっていたようで、SELinuxが動いていることに気づかずにそのまま作業してしまっていました。

SELinuxの設定の確認は

getenfotce

とすると確認ができます。

無効化すは

setenfotce 0

でできますが、これだけだとOSを再起動した際に復活してしまうので、

/etc/selinux/conf

SELINUX=enforcing

の記述を

SELINUX=permissive

に変更しておきます。
これで、再起動時もSELinuxが無効のままにしておくことができます。

なんど設定しなおしてもうまくいかない…!という方は一度SELinuxの設定を確認してみてください。

  • この記事いいね! (0)
著者:杉浦

早めに処理を抜けるソースコード

 条件文を重ねてネストが深くなったソードコードは往々にして読みにくいものです。何々なら処理を行うという意味で作られた条件文を何々なら処理を行わないという条件文に書き換えることでソースコードを読みやすくできることがあります。
 次のコードは、もしデータが未定義でなく、データのidが数字ならば、処理を行う、という動作をそのまま書き下したソースコードです。

function (data){
	if(data !== undefined){
		if(typeof data.id === 'number'){
			//処理
		}else{
			return;
		}
	}else{
		return;
	}
}

 実際のコードでは”//処理”の部分が大きくなり、else以下を読もうとした時このelseの元のifはなんだったか、となることがあります。ならなくともifの中を覚えておくことに記憶領域を一部占有されます。
 このコードの条件文による分岐で行いたいことは”条件に合えば処理を行う”ということであり、これは”条件に合わなければ処理を行わない”と言い換えられます。この言い換えの通りに先のコードを書き換えると次の様になります。

function (data){
	if(data === undefined){
		return;
	}
	if(typeof data.id !== 'number'){
		return;
	}
	//処理
}

 元のコードではelse以下の文を読む時ifの中を記憶したまま”//処理”の部分を通る必要がありましたが、書き換えたコードならば処理を行わない条件に当てはまった場合、処理を行わずに抜けるということがすぐにわかります。これにより条件文の中身を覚えておく必要がなくなりました。またこの例の場合、単純で短い条件文二つ程度なのでさらにまとめて下の様にするのもよいです。

function (data){
	if((data === undefined) || (typeof data.id !== 'number')){
		return;
	}
	//処理
}

 一見、data===undefinedの時にdata.idを参照することによってnull参照でエラーが起きる、と思えますがそうはならない言語が多数です。大体の言語には評価が決まった時点で評価を返す機能である短絡評価機能が備わっています。そのためdata===undefinedの時にはdata===undefinedを読んだ時点で条件はtrueと評価されif節の中に入ります。結果data.idは参照されずエラーは起きません。

  • この記事いいね! (0)
著者:asabakento

さわやかに予約システムが導入されていた!?

静岡県民なら一度は食べたことのあるさわやかのハンバーグ。

 

県外からのお客さんも多く、休日昼に近所のさわやかを通る時は必ずといっていいほど行列を目にします。

 

そんなさわやかにもついにスマートフォンを使った予約システムが導入されたようです。

今まではボードに名前を書いて待っていたのですが、あまりに長いと外で買い物したりして時間つぶしますよね。でもいつ呼ばれるか分からない、名前飛ばされたらどうしようって不安にかられてしまいます。

 

でも、導入された予約システムを使えば自分の番がいつなのか簡単に知ることができるみたいです。

 

使い方は二つあり、一つ目は受付の発券機を使って人数を入力します。機械にも番号が保存されるので、券を持っていれば飛ばされることがなく確実に自分の番がきます。(せっかく書いた名前がスルーされるってよくあるみたいです。)

 

二つ目は、QRコードをつきます。これを読み込んで自分が今何番目かを知ることができます。人がいっぱいでに外に出たいなって時に使えば、自分が後どのくらいでよばれるかをスマホで確認することができます。

 

自分はつい最近知人から教えてもらったので、地元のローカルなレストランがこんな近代的なシステムを使っているのにびっくりしました。

機会があれば覗いてみたいと思います。

 

 

 

 

  • この記事いいね! (0)