著者アーカイブ 村上

村上 著者:村上

【Windows7】「現在サービスが実行されていないため、Windows Update で更新プログラムを確認できません」の対処法

普段使用しているパソコンは、Windows 10なのですが、たまにWindows7 のパソコンを使うことがあります。
で、こちらのパソコン、大体月1くらいでしか使わないので、毎回起動時に Windows Updateを確認するのですが、急に Windows Update が正常に動作しないという不具合が発生しました。

更新プログラムの確認」ボタンを押すと、「現在サービスが実行されていないため、Windows Update で更新プログラムを確認できません。このコンピュータの再起動が必要な可能性があります」というアラートが表示されるようになりました…。
エラーコードも表示されないので、どうしたものかと思いましたが…案外すんなり解決策が掲載されたサイトがヒットしたので、対処法を試してみました。

 

今回参考にしたサイトはこちら。

対処法その1:
現在サービスが実行されていないため、Windows Update で更新プログラムを確認できません
http://pasofaq.jp/windows/update/disablewuauserv.htm

対処法その2:
「現在サービスが実行されていないため、Windows Update – マイクロソフト コミュニティ
https://answers.microsoft.com/ja-jp/windows/forum/windows_7-update/%E7%8F%BE%E5%9C%A8%E3%82%B5%E3%83%BC%E3%83%93/6366117b-aa44-47d8-bb82-cbf2b777fd6b?auth=1

ちなみに、私は1個目の対処法では解決できませんでした。

まず、対処方法その1。
スタートボタンをクリックし、検索ボックスから「サービス」を検索します。
そして、検索にヒットした歯車アイコンの「サービス」をクリックします。
サービスが起動したら、「Windows Update」を探し、ダブルクリックします。
すると ウィンドウが開くので、その中から「スタートアップの種類」で「自動(遅延開始)」を選択します。
そうしたら、「適用」ボタンをクリックし、「開始」ボタンをクリックします。
作業はこれで完了です。
その後、このウィンドウを閉じ、再度 Windows Update を開くと、正常に動作しているとのこと。
…でしたが、私の環境では、こちらの方法ではダメでした。
そもそも、Windows Updateのサービス自体は停止していなかったんですよね。

次に対処方法その2。
「メモ帳」を起動し、下記のコード10行をコピー&ペーストします。

net stop wuauserv
cd %systemroot%
ren SoftwareDistribution SoftwareDistributionold
net start wuauserv
net stop bits
net start bits
net stop cryptsvc
cd %systemroot%\system32
ren catroot2 catroot2old
net start cryptsvc

こちらをデスクトップに、適当な名前を付けて保存します。
「abc.txt」などでOKです。
そうしたら、保存したファイルを右クリックし、「名前の変更」を選択します。
「abc.txt」を「abc.bat」に変更します。
なおこの時、拡張子が表示されない設定になっている場合は、表示する設定に変更してください。

拡張子を変更すると、名前変更の警告が出るかと思いますが、「はい」を押してください。
名前が変更出来たら、ファイルを右クリックし、「管理者として実行」をクリックします。
コマンドプロンプトが起動し、処理が実行されるので、処理が終わったらパソコンを再起動します。
再起動後、Windows Update を実行すると、正常に動作します。

 

私の場合は、対処法その2で Windows Update が動作するようになりましたが、実はそれもすんなりとはいかず…一度再起動しただけでは、エラーコードありのエラーが発生しました。
が、後日再度パソコンを起動して Windows Updateを実行したところ…今度は正常に動作しました。
一度目のエラーは謎ですが…解決したので良しとします。

もし、同じエラーでお困りの方は、是非こちらの方法を試してみてください。

村上 著者:村上

【jQuery】スマートフォンでのタッチイベントについて

本日の記事は、何だか久しぶりな気がするjQueryについての技術ネタ!

スマートフォンサイトで、地図とマップピンを表示させることがあったのですが、その際に、「ドラッグではピンの位置はそのままで、地図をタップした時のみマップピンを移動させる」という処理をさせたい、ということがありました。
上記のように、ドラッグとタップで処理を変えるときなどに、タッチイベントを活用したので、自分の覚え書きとしてまとめます。

タッチイベントの種類は下記の通り。

  • touchstart
  • touchend
  • touchmove

他にも、touchcancel というのがあるらしいですが、なかなか使う機会が分からなかったので、今回は割愛します。

 

まずは、それぞれのイベントについて簡単にまとめ。
最初は、touchstart について。
こちらは、タッチされたときに実行されるイベントです。

$("#main").on('touchstart', function(){
    // 画面がタッチされた時に実行したい処理
});

id に main が指定された要素に対して touchstart イベントを指定しているので、main がタッチされた瞬間に発火します。
こちらは click とほぼ同じイメージで動作するので、分かりやすく使いやすいです。

次は、touchend について。
こちらは 画面から指が離れたタイミングで発火します。

$("#main").on('touchend', function(){
    // 画面をタップして指が離れた時に実行したい処理
});

ただし、touchend では、event.changedTouches[0].pageX や event.changedTouches[0].pageY で、X座標・Y座標の位置を取得できないので注意が必要とのこと。
私は 地図の表示に Mapbox を利用しているので、問題なかったのですが、jQueryでX座標・Y座標を取得したい場合は、touchstart を使うか、touchmove を併用して変数に格納するのが良いとのこと。
このあたりはお好みで使い分けてもいいと思います。

最後は、touchmove について。

$("#main").on('touchmove', function(){
    // 画面がドラッグしている時に実行したい処理
});

こちらはドラッグをしている間に呼ばれるイベントです。
繰り返し呼ばれるので、座標の位置情報を変数に格納するなど、簡単な処理を書くだけにとどめたほうが良いとのこと。
また、指を移動させないと、touchmove が発火しないことがあるとのことでしたので、このあたりも注意したほうがよさそうです。

 

で、最後に私が実際に書いたコードがこちら。

var isDrag = false;  // ドラッグ中かの判定
// マップがドラッグされたときに実行される<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>
$("#map").on('touchmove', function (e) {
    if(!isDrag){
        // ドラッグ中なので、値を true に変更
        isDrag = true;
    }
});
// マップをタップし指を離したときに実行される
$("#map").on('touchend', function (e) {
    if(!isDrag){
        // 画面から指を離した際に実行したい処理
        // 例:マップピンを移動する など
    }
    isDrag = false;
});

もしかしたらもっといい方法があるのかもしれませんが…意図していた通り、「ドラッグ中は地図のドラッグだけを行い、タップした時のみマップピンが移動する」という処理ができたので、これでOKということにします。

 

touchstart、touchend、touchmove の3つをご紹介しましたが、単なるタッチイベントなら、一番最初の touchstart だけ覚えておけば正直問題なさそうな気もしますね。

村上 著者:村上

【Excel】セルにドロップダウンリストを追加する方法

飽きもせず、Excelネタです。
自分でも、大体ハマったところは書ききったと思っていたのですが…まだありました。

 

今回は、タイトルにもあるようにセルにドロップダウンリストを追加する方法について。
Excelでは、下の画像のように、セルに入力する値や文字列をドロップダウンリストから選べるようにできる便利な設定があります。

これの設定方法についてです。

まず、このドロップダウンリストを設定したいセルを選択した状態で、上のリボンメニューから「データ」を選択します。
データメニューの中央やや右寄りに、「データの入力規則」というボタンがあるのでそちらをクリック

すると、ウィンドウが現れるので、まず「入力値の種類」から「リスト」を選択します。

そして、「元の値」というテキスト欄に、リストの項目を半角カンマ区切りで入力し、OKを押したら完了です。

 

こうしてまとめてみるといたって簡単なのですが、最初の「データの入力規則を選択」を忘れてしまって、結局毎回調べる羽目になるんですよね…。
「データの入力規則」から、どうしても「ドロップダウンリスト」が連想できないんですよね。
が、こればっかりは覚えるしかなさそう。

ということで、セルにドロップダウンリスト追加する方法でした。
覚えておくと便利だし、入力ミスも防げるので、ぜひご活用ください。

村上 著者:村上

【技術書】読みやすいコードを書くための「リーダブルコード」

年末年始は、購入してから一度読んだだけの「リーダブルコード」を再度読み直してみました。
が、思いのほか出掛ける用事が多く、あまり読み進められませんでした…。
そのため、最初の数章しか読めていないのですが、やっぱり読みやすくてなかなか面白い!

 

▼リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック

「美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、
自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ」(本書「はじめに」より)。

コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。
名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。
またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。

※こちらはAmazonの紹介文から転載させていただきました。

 

普段読むのが小説ばかりなため、読みにくいと感じてしまうと途中で挫折してしまうのですが…こちらは表紙やタイトルから想像するよりも堅苦しくなくて読みやすいです。
サンプルのコードも多くて分かりやすいですし、挿絵のイラストもちょっとシュールで、そこまで肩の力を入れずに、気軽に読めるように思います。
新人エンジニアにおすすめの参考書 〇選」というようなリストにも毎回入っている本ですし、好みもあるかもしれませんが、私的には読みやすくておすすめです。
興味があれば、是非購入してみてはいかがでしょうか。

村上 著者:村上

【Excel】関数の条件で「空白以外」を指定する方法

皆様、新年明けましておめでとうございます。
本年もどうぞよろしくお願い申し上げます。

 

と、簡易的にではありますが新年のご挨拶も終わったところで、今年最初の小ネタをご紹介。

昨年から引き続き、Excelを使用した業務を行っておりますが、その際に、「何かしらデータが格納されているセルをカウントする方法」がわからなかったので、備忘録としてまとめます。

使用する関数は、COUNTIF関数、もしくはCOUNTIFS関数です。
指定の方法はいたって簡単で、第2引数の部分に「“*”」と指定するだけ。
具体的には下記のとおりです。

=COUNTIF(A1:A10,"*")
※ A1からA10のセルの範囲で、空白でないセルをカウントする

任意の文字を意味するワイルドカードである「*(アスタリスク)」を使うことで、「何らかの文字が入力されている」という条件を指定できます。
…わかってしまえば、確かに!となるのですが、今回は思いつきませんでしたね。

 

なお、今回は必ず文字列が入力されることがわかっていたので、この方法を使いましたが、もし数字が含まれる場合は、上記の方法ではだめとのこと。
もし数字が入力されることを考慮する場合は、

=COUNTIF(A1:A10, "<>" & "")

上記のように指定する必要があります。

見慣れない「<>」というものが出てきましたが、こちらはExcelで「等しくない」という意味があります。
で、「&」が文字列の結合を意味するので、第二引数は「空白ではない」という意味になります。
ちなみに下記のように、後ろの「&」と「””」を省略することもできます。

=COUNTIF(A1:A10, "<>")

お好みに応じて使い分けてください。

 

以上、Excelの関数で「空白以外」という条件を指定する方法でした。

村上 著者:村上

【おすすめアプリ】辛い偏頭痛を気象病・天気痛対策アプリ「頭痛ーる」で予測!

最近、また偏頭痛が起こるようになってしまいました。
確かにここ数日急に寒くなり、昨日は少し雪がちらついたりと、あまり良くないお天気だったからしょうがないのかもしれません。

と、いうことで、今日はそんな偏頭痛が起こる時期を予測してくれるというアプリをご紹介。
頭痛ーる」というアプリで、Android・iOSの両方に対応しています。
最近アップデートをしたようで、デザインが少し変わっていました。

公式サイトはこちらから。

頭痛ーる:気圧予報で体調管理 全国700万人の気象病対策アプリ
https://zutool.jp/

アプリをインストールしていなくても、こちらのサイトからでも気圧の変化を確認することができます。

また、Twitter公式アカウントもあるそうなので、こちらをフォローしても良さそうです。

頭痛ーる:気圧予報で体調管理・頭痛対策(@terunekootenkiさん)|Twitter
https://twitter.com/terunekootenki

札幌、仙台、東京、名古屋、大阪、福岡の6か所の翌日の予報を配信しています。

 

起動直後の画面はこんな感じ。

気圧の上がり下がりをグラフで表されており、かつ、上の画面のように「やや注意」「OK」などが表示されています。
これなら天気に関する基礎知識などがなくても、偏頭痛が起こりそうなタイミングがわかりやすいです。
また、片頭痛が起こりそうな天気の時は、プッシュ通知も送られてくるので、わざわざ毎日アプリを起動して確認する必要もなし!

また、直近の変化だけでなく、下記のように今日・明日・明後日の気圧や天気などがわかるページもあります。

これなら気圧だけでなく、お天気アプリとしても使えそうですね。

さらには、こんな感じでお天気についての基礎知識が掲載されているページもあります。

トップページにいる博士とマロの会話形式で書かれているので、楽しく読めます。
時間があるときにでも、全部読んでみたいですね。

 

偏頭痛が起こりそうな時期を予測できる「頭痛ーる」アプリの紹介でした。
偏頭痛持ちの方は是非インストールしてみてはいかがでしょう。

村上 著者:村上

【PHP】PHPExcelでグラフを一から作る方法

昨日もPHPExcelについての記事を書きましたが、本日も引き続き同じネタについてまとめ。
当初はグラフ入りテンプレートを使ってグラフを描写する予定でしたが、思っていた以上に「複雑なグラフ」のボーダーラインが低く、どうしても作りたいグラフが消されてしまうので、プログラムでグラフ作成をすることにしました。

 

ライブラリ導入から、現在のシート選択の部分は割愛します。
やっていることは意外と単純で、まず、グラフの表示範囲や参照先のセルを指定します。

//グラフ描画設定
$options = [
    'title' => 'グラフタイトル',
    'topPos' => 'A3',   //描画するグラフの左上の位置
    'bottomPos' => 'I24',   //描画するグラフの右下の位置
    'labelPos1' => $sheet.'!$B$2',  //グラフのデータラベル
    'xAxisRange' => $sheet.'!$A$3:$A$12',   //グラフのx軸の値の範囲
    'dataValueRange1' => $sheet.'!$B$3:$B$12'  //実際のデータ範囲
];
なお、$sheet は、現在アクティブなエクセルのシートを指定します。

実際にグラフを書いているのは下記のコード。

// グラフのデータラベル設定
$dataSeriesLabels = [
    new PHPExcel_Chart_DataSeriesValues('String', $options['labelPos1'], null, 1)
];

// グラフのX軸項目設定
$xAxisTickValues = [
    new PHPExcel_Chart_DataSeriesValues('String', $options['xAxisRange'], null, 10)
];

// グラフの系列設定
$dataSeriesValues = [
    new PHPExcel_Chart_DataSeriesValues('Number', $options['dataValueRange1'], null, 10)
];

//  グラフ描画設定
$series1 = new PHPExcel_Chart_DataSeries(
    PHPExcel_Chart_DataSeries::TYPE_BARCHART,               // 横棒グラフ
    PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED,          // plotGrouping
    range(0, count($dataSeriesValues)-1),                  // plotOrder
    $dataSeriesLabels,                                     // plotLabel
    $xAxisTickValues,                                      // plotCategory
    $dataSeriesValues                                      // plotValues
);
$series1->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_BAR);

//  プロットエリアの設定
$plotarea1 = new PHPExcel_Chart_PlotArea(null, [$series1]);
//  グラフ内での凡例のポジション設定
$legend1 = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_BOTTOM, null, false);
//  y軸のラベル設定
$yAxisLabel1 = new PHPExcel_Chart_Title('');
//  タイトルがある場合、タイトルの設定
$title1 = new PHPExcel_Chart_Title($options['title']);

//  グラフ作成
$chart1 = new PHPExcel_Chart('chart1',       // グラフの名前
                             $title1,        // グラフタイトル
                             $legend1,       // 凡例
                             $plotarea1,     // グラフのプロットエリア
                             false,           // 表示されているセルだけをプロット
                             0,              // 空白セルをどうするか
                             null,           // x軸のラベル
                             null            // y軸のラベル
);

//  グラフがワークシートのどこに描画されるかの設定
$chart1->setTopLeftPosition($options['topPos']);
$chart1->setBottomRightPosition($options['bottomPos']);

//ワークシートにグラフの追加
$objWorksheet->addChart($chart1);

こちらのコードでは横棒グラフを作成しています。
表示位置やタイトルを任意で決められるので、なかなか自由度は高めですね。

 

作成できるグラフの種類も豊富で、棒グラフ以外にも、折れ線グラフやレーダーチャート、あとは設定名的に察するに、バブルチャートなんかも使えそうでした。
…が、よく使うのは棒グラフ・折れ線グラフ・円グラフぐらいかな。

便利&簡単なPHPExcelですが、若干ハマっている箇所もあり、どうしても縦軸の項目名とグラフの凡例が正しく表示されません…。
データ自体は指定してあるので、設定が間違っているのだと思っています。
もし、この不具合がわかる方いらっしゃいましたら、どうぞコメントでご指摘をお願い致します。

村上 著者:村上

【PHP】PHPExcelでグラフ入りのテンプレートを使用する方法

以前、「【PHP】PHPExcelを使うときにセルの書式設定を変更する方法」という記事を投稿しましたが、本日の記事は、またこの PHPExcel について。
今回は、PHPExcelでテンプレートファイルを使う際に、グラフが入っていた場合の処理についてまとめです。

今回参考にした投稿はこちら。

PHPExcelでテンプレートファイルからグラフを作ってみよう – Qiita
https://qiita.com/tutida/items/2d163ed7662bb499a082

やりたいことがすべて書いてありました…!

 

早速、コードを書いていきますが、PHPExcelオブジェクト生成から、シートの選択まではこんな感じ

// PHPExcelオブジェクトを生成する
$book = new PHPExcel();
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
// 読み込むテンプレートファイルにグラフが含まれていることを宣言
$objReader->setIncludeCharts(TRUE);
// テンプレート読み込み
$book = $objReader->load('テンプレートのエクセルファイルのパス');
$book->setActiveSheetIndex(0);
// カレントシート選択
$sheet = $book->getActiveSheet();

上記のコードで重要なのは、5行目の「読み込むテンプレートファイルにグラフが含まれていることを宣言する」、という

$objReader->setIncludeCharts(TRUE);

上記の記述です。
この一行を入れないと、読み込んだテンプレートファイルからグラフが消えてしまいます。

また、読み込み時だけでなく、下記のようにエクセルファイルの出力・保存の時にも同じ記述を入れる必要があります。

// ファイル名
$filename = 'PHPExcel-sample.xlsx';
$writer = PHPExcel_IOFactory::createWriter($book, 'Excel2007');
// 書き出すエクセルファイルにグラフが含まれていることを宣言
$writer->setIncludeCharts(TRUE);
$writer->save("/tmp/".$file);
File::download("/tmp/".$file, $file);

こんな感じ。
出力時にも、エクセルファイルにグラフが含まれていることを宣言する5行目の記述を必ず入れましょう。

 

ただ、グラフを扱う際には注意が必要で、あまり複雑な指定をすると、グラフが含まれていることを宣言していてもグラフが消える場合があります。
現に、私もそれで悩まされています。
グラフ入りのテンプレートを入れる場合は、極力簡単でシンプルなものを使うようにしましょう。

なお、グラフが消える・簡略化される条件は下記のようなものがあげられるとのこと。

  • X軸を設定している
  • Y軸を2種類設定している場合、2つ目は消える
  • 詳細な設定はほぼ消える

…かなり簡単なものしか扱えなさそうですね。
これならいっそ、テンプレートから読み込まず、PHPExcelでグラフを作成したほうがいいかもしれません。

ゼロからグラフを作成する方法については、冒頭で挙げた投稿を書かれた方が記事を挙げているので、こちらが参考になるかと思います。

PHPExcelでゼロからグラフを書いてみよう – Qiita
https://qiita.com/tutida/items/643baa8832beedd53499

村上 著者:村上

【jQuery】要素を削除する.remove()と.empty()の違い

JavaScriptで要素を削除するメソッドに、.empty().remove()があります。
どちらも要素を削除する、という点では同じなのですが、挙動が少し違うので、これを機にまとめてみました。

.remove()
こちらは単純に指定した要素そのものを削除します。
例としては下記のように要素が指定されていた時に、

<ul id="list01">
    <li id="item01">item01</li>
    <li id="item02">item02</li>
    <li id="item03">item03</li>
</ul>
/* javascript */
$("#item01").remove();

上記のJavaScriptを実行すると、idに「item01」が指定された li 要素が削除されるというもの。
指定する要素は、id だけでなく、勿論classでもOKです。
なお、class を指定した場合は、一致する class がすべて削除されます。

 

.empty()
こちらは指定した要素の中にある子要素を削除します。
サンプルコードは下記の通り。
id に「list01」が指定された ul 要素に対して、.empty() メソッドを指定すると、ul の子要素である li がすべて削除されます。

<ul id="list01">
    <li id="item01">item01</li>
    <li id="item02">item02</li>
    <li id="item03">item03</li>
</ul>
/* javascript */
$("#list01").empty();

.empty() メソッドについては、「指定した要素の中身を空にする」と覚えるとわかりやすいかな。
なお、あくまでも指定した要素の子要素を削除するメソッドなので、指定した親要素自身は残ります。

 

簡単にではありますが、大きな違いはこんな感じ。
.remove() は単純明快なので、ある特定の要素を消す、というときに使用します。
一方で .empty() については、一度リストなどを再描画する際、ul などは残しつつ、リストの項目である li だけを削除する、というときに使えます。
以前投稿した、要素を追加するメソッドとセットで覚えるのがおすすめですね。

【備忘録】jQueryの要素追加のメソッド一覧
https://cpoint-lab.co.jp/【備忘録】jqueryの要素追加のメソッド一覧/

特に .empty() については、.append() とセットで覚えると、様々な処理やより扱いやすいかと思います。

村上 著者:村上

【Excel】積み上げ棒グラフに区分線を追加する方法

最近エクセルについての記事を連投しておりますが…しょうがない、業務で使っているんだもの。
ということで、今回はエクセルのグラフについてです。

 

エクセルで棒グラフを作っているときに、それぞれの値の増減が一目でわかりやすいように、比較線を入れたい場合があるかと思います。

が、この線を設定するのに、ちょっとだけ手間取ったので備忘録もかねて投稿。

 

やり方自体はいたって簡単。

編集したいグラフを選択すると、「グラフツール」という項目が上のメニューバーに追加されるので、その中から「デザイン」のタブをクリック。
すると、メニュー左端に「グラフ要素を追加」という項目があるため、それをクリックし、表示された一覧から「」→「区分線」をクリックするだけ。

知っていれば、こんなこと、と思うくらい簡単でしたが、普段使わないようなメニューのため今まで知りませんでした。
あとは、こちらの設定は、グラフを選択した際に右上に表示される「+」アイコンのメニューから設定できると思い込んでいたので、それも少し手間取った要因の一つでしたね。

 

ちなみにこの方法については、線の名称がわからなかったため、「エクセル グラフ 遷移線」という凄く適当な単語で調べてしまいましたが、運よくヒットしました。
正式名称は「区分線」というそうなので、これを機にきちんと覚えたいと思います。