月別アーカイブ 8月 2018

著者:杉浦

javascriptにおける型変換による計算のさわり

 javascriptは型変換を行うことによって記述から予想される実行結果と実際の実行結果が異なることが起きやすい語です。それぐらい大きく変化の起きる型変換を用いた小ネタです。

+[]

 これの実行結果が
 
 です。javascriptは正負の様な数式符号がついた対象を数字として扱う動作があります。大体、空っぽい対象は0、trueっぽい対象は1として評価されます。そのためこの様な結果になります。これを利用すると次の様なこともできます。

 この手の型変換をこれでもかと利用した方法に記号プログラミングというものがあります。例えば、Aを表すコードは次になります。

(([][($+[])[-~-~-~[]]+(({})+[])[-~[]]+([][![]]+[])[-~[]]+(![]+[])[-~-~-~[]]+(!![]+[])[+[]]+(!![]+[])[-~[]]+($+[])[-~[]]+($+[])[-~-~-~[]]+(!![]+[])[+[]]+(({})+[])[-~[]]+(!![]+[])[-~[]]])+[])[-~-~-~[]*-~-~-~[]]
  • この記事いいね! (0)
asabakento 著者:asabakento

IFERROR関数

今回は値があるかどうか確認したいときに使える関数を紹介します。

ある表計算をしていると偶に出てくる#DIV/0!があります。そんな時はIFERROR関数で#DIV/0!やNAME?といった警告(正確にはエラーではなく値が無いですよいう通知)を表示させなくすることができます。

方法は、ある関数を書いた後にIFERROR関数で囲むだけです。

これだけで煩わしい#DIV/0!を消し去ることができ、資料などもすっきりとした見栄えになると思います。

2番目の引数は、もし値が無かった場合の代替え表示の値や文字列になります。画像のように0とすれば、#DIV/0!の代わりに0を表示させます。

自分が試したのがExcel2010なので、新しい2013ではこの書き方で動くか正直未知数です。が覚えておくとスマートに表計算ができてすごく便利だなって感じたので、#DIV/0!がでてきてうざったいと悩んでいた方も使ってみてください。

 

参考にさせていただいたリンクー>https://www.cando.co.jp/column/column_13.html

 

 

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

【Cordova】AndroidのSDKバージョン数の記述場所まとめ

AndroidアプリをCordovaで開発中なのですが、Android StudioでSDKバージョンを記述している箇所が多く、ちょっと苦労したのでまとめ。
現在、Androidアプリのリリースを行う際、アプリのSDKのバージョンを26以上にするようにとの変更があったのですが、このバージョンが何故か上げられず…。
原因は、複数あるSDKバージョンを記述している箇所の一か所を更新し忘れていたことが原因だったのですが、そもそもその記述箇所多くない?と。
ということで、ほぼ自分の備忘録のために、SDKバージョンを記述している箇所をまとめてみました。

 

まず、Android Studioのメニューバーの「File」から「Project Structure」を選択します。

すると、下のようなウィンドウが表示されるので、サイドバーのメニューの Modules グループから、それぞれのSDKのバージョンを確認します。

なお、ここで指定しているバージョンについては、build.gradle からも確認できます。

で、あとは忘れがちな AndroidManifest.xml
ちなみに、私はここの記述を見逃していました。
このファイルの中に、「uses-sdk」というタグがあり、そこでSDKのバージョンを指定しています。
なので、こちらの値を build.gradle でも指定しているSDKのバージョンと揃えます。

作業としては、以上で完了です。

 

以上、Corodvaで開発中のAndroidアプリのSDKバージョンを確認する方法でした。

ちなみにAndroidアプリをリリースする際のSDKバージョンですが、2018年の8月(つまり今月)に新しいアプリを公開する場合、アプリのターゲットAPIレベルは26(Android 8.0)以降が必須になります。
そして、2018年11月には、既に公開済みの既存のアプリのアップデートで、ターゲットAPI レベルは26以降が必須になります。
なお、この変更はアップデートを行っていない既存のアプリには影響しないとのこと。

上記について、参考にさせていただいた記事はこちらから確認できます。

Google Developers Japan: 今後の Google Play でのアプリのセキュリティおよびパフォーマンスの改善について
https://developers-jp.googleblog.com/2017/12/improving-app-security-and-performance.html

こちらはアプリを公開する際に、条件を満たしていない場合は警告として表示されるので、もし警告が表示されてしまった場合は修正するようにしましょう。

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

Windows 10 版Google Chrome Ver.68 でついにネイティブ通知が実装! 50%のユーザーでテスト中らしい!!

ある日、ふとPCを起動したところ…

…!?

!?!?

なんと!普段から見ているGoogle Chromeからの通知が、Windows10標準の通知センターから行われるようになっていました!!!

Google Chromeは、Windows 10のネイティブ通知に対応 – AMW
以前からGoogle Chrome 68についてはいろいろと記事にしていますが、まさかネイティブ通知が実装されていたとは…

実はこの機能、ずっと前から個人的に切望してしていた機能でもあります。
本来のデフォルトのGoogle Chromeの通知はこんな感じでした。

見た目の部分は見やすくて全く問題なかったのですが、以前実装されていたGoogleChromeの通知センターが廃止されて以降、Chrome通知で見逃した物を再確認する手段が無くなってしまっていました。
また、マルチディスプレイ環境であったり、解像度の変更を行ったりした際に、しばしば表示崩れを起こすことも…

また、Windows10で実装された通知ミュート機能(プレゼン中などにはとても役に立つ機能です)も、Chrome通知に対しては効かなかったりと、なかなか不便な一面がありました。

ちなみにmacOS版Google Chromeでは、 Ver.32からすでにネイティブ通知に対応しており、macOSの通知センターと連携させることができました。

Google ChromeがMac OS Xでネイティブ・プッシュ通知に対応 – Gigazine

Windows10がリリースされ、macOSのような通知センターがWindowsでも利用できるようになったため、Windows版Chromeでもネイティブ通知が実装されてほしいなぁとずっと思っていたので、今回のネイティブ通知実装はかなり嬉しいニュースです。

なお、現在はテスト段階のようで、デフォルトでは全Google Chromeユーザーの50%に対してのみ有効(所謂A/Bテスト)にしているようです。そのため、”えー自分のChromeもバージョン68なのに昔の通知が出てくる”という方も多いかと思います。

正式実装を待つ、という方法もありますが、「そんなの待ってられねぇよ!!!」という方は例によって”chrome://flags”から有効化できます。
URL欄に

chrome://flags/#enable-native-notifications

と入力してエンターキーを押すと

“Enable native notifications.”

という項目が出てくるかと思いますので、この項目のプルダウンメニューを
“Default”
から
“Enabled”
に変更し、再起動します。

これで、Google Chrome経由の通知がすべてWindowsの通知センター経由で表示されるようになっているはずです。

Var.67ではPWAのサポートも実装されましたし、今後ブラウザ経由で通知を受け取る機会はどんどん増えていくかと思います。
GoogleChrome経由で多くの通知を受け取っている方は、設定して損はないかと思いますので、是非試してみてはいかがでしょうか?

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

ブラックリスト方式とホワイトリスト方式

 何かを受け入れる、受け入れないという処理を行う時、処理の対象と仕方のリストを作成することになります。リストにはブラックリスト方式とホワイトリスト方式があります。
 ブラックリスト方式は、基本的に受け入れを行い、リストに載っている対象のみを受け入れない方式です。
 ホワイトリスト方式は、基本的に受け入れを行わず、リストに載っている対象のみを受け入れる方式です。
 対象の領域が広いリストになってくると両方が組み合わさったような印象のリストができあがったりもします。例えば、ファイアウォールです。通信はプロトコル、送信先/元のIPアドレスとポートなどの要素で分類できます。

if(プロトコルがhttps){
	if(送信元アドレスが以前攻撃してきた相手Aのアドレスではない){
		受信する
	}
	if(送信元アドレスが以前攻撃してきた相手Bのアドレスではない){
		受信する
	}
}
受信しない

 上のコードの場合、大本はプロトコルhttpsのみを認めるホワイトリスト方式ですが、最初のifを過ぎた後は以前攻撃してきた相手のアドレスを弾くブラックリスト方式です。プロトコルhttpsの範囲が広く、リスト中のリストが作れるため、この様になります。
 リストを使用するシステムで問題が起きる時、その原因はよくリストの漏れにあります。リストの漏れによって起きる動作は、ブラックリスト方式が異常な対象を受け入れる、ホワイトリスト方式が正常な対象を弾く、です。異常な対象を受け入れた時に起きる問題の規模が大きければ大きいほど、ホワイトリスト方式を選ぶ理由が大きくなります。
 リストの変更頻度を抑えるという方針を考えた場合、新たに現れた分類の様なリストに載せられない未知の対象に対する振る舞いの定義が土台のリストの方式を決定づけます。とりあえず受け入れるならブラックリスト、弾くならホワイトリストです。

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

悪徳プロバイダー業者にご用心!!!!

少し前の話ですが、身内がNTTを名乗る業者にプロバイダを変えられそうになった話をします。

今はもうないと思いますが、数年前にNTT西日本を名乗るよく分からない業者から、お使いのTNCよりも安い料金でプロバイダを使うことが出来ますよという電話がかかってきました。

その時はTNCを初めてもう6年位立っており、当時安いプロバイダも少なく手続きも面倒くさかったので何も考えず承諾してしまいました。

しばらくしたらなんと遠隔操作をされてなにやらいじいじしている様子。

「今は仮契約の状態です。一度電話をかけなおして契約内容を提示して、良ければプロバイダの変更手続きを行います。なお、仮契約の時点で違約金がかかります。」

住所も電話番号も教えていないのにこんなことを一方的に言われたので、怪しいと思い速攻でぶっちしました。

調べてみたら出るわ出るわプロバイターの勧誘トラブル。NTTともOCNとも関係のない謎の業者がプロバイダーの変更を促してくる事例が結構あるみたいです。

パソコンに疎い人がもしこの電話を受け取ったらついお得だと勘違いしてしまいますが、まずかかってきたら業者名を教えてくれと聞いてください。ここで偽名の会社を使えば、当会社は詐欺罪の対象となるので絶対に正規の会社名を答えなければいけないからです。

それに遠隔操作は相手に個人情報の橋渡しをしているようなものなので、漏洩した個人情報をネットで悪用されないように丁重に断ってください。

今思うと了承が得られないのに違約金を設定するなんて規約違反なんですよね、思いっきり。

他にも色々な形態があるみたいですが・・・もし、今後このような怪しい電話がかかってきたら光の速さで切ってくださいね。

 

 

 

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

【JavaScript】部分一致のある複数のキーワードをそれぞれ置換する方法

JavaScriptで複数の文字列を置換するとき、置換したいキーワードの一部が他のキーワードと重複しているため、置換後の文字列が意図しない結果になるという状況に陥りました。
例えば、「#○○○」などのハッシュタグをタグで囲もうとしたとき、ハッシュタグに「#浜松」と「#浜松市中区」というキーワードが一部重複している箇所があるため、「#浜松」の部分が意図せずに2回も置換されてしまうという感じです。

今回は、それの対処法です。
もしかしたらもっといい方法があるのかもしれませんが…個人的に一番しっくり来たのでこの方法を採用しました。

 

対処法ですが、まず置換したい文字列(ここではハッシュタグ)をいったん別の文字に置き換えます。
この時、他のキーワードと一致しないように特殊な文字列にするようにしましょう。
例えば、%をキーワードの頭と末尾に2つずつつけてみるとか。
サンプルコードは下記のとおりです。

var text = '[ハッシュタグを含む置換したい文字列]';
var result = str.replace(/(#\S+)/g, '%%$1%%');

上記のコードを実行すると、ハッシュタグが2つの%で囲まれた特殊な文字列に置き換えられます。
なお、正規表現でグループ化を使うと、$1 に一致した文字列が代入されるので、これを利用して文字列を置換していきます。

あとは、この文字列を最終的に置き換えたい文字列の形になるように置換します。
ここでは、タグでハッシュタグを囲んでいます。
サンプルは下記に。

result = result.replace(/%%(#\S+)%%/g, '<a href="[リンク先]">$1</a>');

全部通しで書くと下記のようになります。

var text = '[ハッシュタグを含む置換したい文字列]';

// %%[ハッシュタグ]%% となるように置換
var result = str.replace(/(#\S+)/g, '%%$1%%');

// %%[ハッシュタグ]%% を <a href="[リンク先]">[ハッシュタグ]</a> に置換
result = result.replace(/%%(#\S+)%%/g, '<a href="[リンク先]">$1</a>');

作業は以上で完了です。

 

以上、部分一致のある複数のキーワードをそれぞれ置換する方法でした。
今回はJavaScriptで紹介しましたが、もちろんPHPなどでも使うことができます。
是非、ご活用ください。

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

再起動しなくてもUbuntu OSアップデートが自動適用できる! “Canonical LivePatch”

今までOSのアップデートを適用する際、とくにカーネルのアップデートなどは必ず再起動が必要となっていました。
しかし、Linuxカーネル4.0からライブパッチ機能が正式に実装され、再起動を行うことなく更新が取り込めるようになりました。

Linux 4.0リリース候補版にライブパッチ機能が導入 – ZDNet Japan

しかし、この機能は飽くまで”カーネルに機能として存在している”形で、ユーザーが簡単に利用できるようになるかどうかはディストリビュージョン次第、となっています。

そんな中、UbuntuのCanonicalがUbuntu向けに”Canonical LivePatch”の提供を開始しました。

この機能はUbuntu16.04から利用可能となり、18.04からGUIインターフェースが用意され、インストール時やインストール後に、ユーザーが簡単に設定できるようになりました。(※Ubuntu Oneへの登録が必要。無料ユーザーは3マシンまで)
有効化方法などは下記のサイトを見ていただければ分かりやすいかと思います。

【Ubuntu18.04】新機能 LivePatchについて – ガジェット好きの日記

自分も自宅で仮想でサーバーマシンを動かしており、そのホストOSとしてUbuntuを利用しています。
ホストOSを再起動するためには、複数台動作している仮想OSをすべて停止しないといけないためかなり大変でした。

今回のLivePatchサービスのリリースで、再起動することなくセキュリティパッチの修正を受けられるのは非常にありがたいです。
ちなみに、適用するとSSHなどでログインした際に

このように表示され、正常に動作していることが確認できます。

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

hp procurve switch hubのファン

現役を引退した後もオフィスのスイッチとして十数年稼働している hp procurve swtich 。

ファンの警告ランプが激しく点灯し始めた。

幸い使用していた製品はライフタイム保証の対象製品でしたので、ライフタイム保障 を依頼してみることにします。当時の資料を見る限り、ディスコン製品の場合は現状品に交換と書かれてもいますが・・・。

なんか申し訳無いなという感じがしてしまいますが、窓口の方もしっかり対応していただいて感謝!

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

【Cordova】アプリアイコンにバッヂを表示する方法【解決済み】

以前、アプリのアイコンにバッヂを表示するCordovaのプラグインをご紹介しました。
その時は、何故かバッヂが表示されず、解決方法についても調べきれていなかったのですが、先日対処法が判明しましたのでご紹介。

ちなみに、前回の記事はこちらから。

【Cordova】アプリアイコンにバッヂを追加するプラグイン「cordova-plugin-badge」
https://cpoint-lab.co.jp/article/201807/【cordova】アプリアイコンにバッヂを追加するプラグ/

 

さて、気になるその解決策ですが…単にAndroidとiOSのプラットフォームを一度削除し、再度追加するだけでした。
本当にそれだけでした!
何らかの原因で、プラグインがうまく各プラットフォームに追加できなかったのかな、と思われます。

ちなみに、こちらに気が付いたきっかけはブラウザで実行した時のエラー内容です。
実際のエラー文は保存し忘れてしまいましたが、「プラグインの関数が存在しない」という意味のエラーでした。
で、もしかして…と思い至り、プラグインの再インストールをしたところ、解決したという流れです。

 

以上、cordova-plugin-badge プラグインが動かない時の対処方法でした。
同じことでお悩みの方は、是非お試しください。

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