月別アーカイブ 8月 2018

著者:杉浦

文字コードを利用して文字をforで回す

 文字コードは文字を数字で扱う仕組みです。各数字と各文字が一対一の関係で対応しています。この記事では文字コードの一つであるASCIIを利用します。ASCIIの対応の大きな分類は次の表のとおりです。ASCII – Wikipediaより引用

コード範囲(16進) 内容
00-1F 制御文字
20 空白
21-7E 図形文字
7F 制御文字(DEL)

 図形文字はいくつかの記号とa-zA-Z0-9、おおざっぱにはキーボードのローマ字入力で直接打てる文字です。キーボードに詳しくないのでまあ多分そんなものぐらいの気持ちで。Ascii Table – ASCII character codes and html, octal, hex and decimal chart conversion
 知る限りのプログラミング言語にはこのASCIIと数字を変換する機能が備わっています。これを利用すると文字列をforで回せます。Excelシートと関係のあるプログラムを書いたりする時、特に便利です。最近よく使用している言語であるphp,javascriptでの例が次です。
 phpならばchr関数を利用して次の様な感じです。PHP: chr – Manual

<?php
for($i = 97;$i <= 122;$i++){
    echo chr($i);
}
for($i = 65;$i <= 90;$i++){
    echo chr($i);
}


javascriptならばString.fromCodePoint()関数を利用して次の様な感じです。String.fromCodePoint() – JavaScript | MDN

String.fromCodePoint.apply(null,Array.from({ length: 26 }, (_, i) => i+65));
String.fromCodePoint.apply(null,Array.from({ length: 26 }, (_, i) => i+97));

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

breakとcontinueってどう違うの?

久々にプログラミング関係の記事になります。今回は類似した文についてです。

処理を中断するために用いられるbreakとcontinueですが、実際にに動かしてみると大きな違いがあります。

できるだけ分かりやすく書いていきたいと思いますので、ご容赦ください。

continue文は、処理の最中に、変数がある条件の対象になった時にループを完全には抜けずにいったんそのループの最初に戻ります。


class howToCon{
public static void main(String args[]){
howToCon htc = new howToCon();
htc.test1();
}

void test1(){
int num = 0;
for(int i=0;i<5;i++){
num += 1;
if(num % 2 == 0){
System.out.println("Bom!!");
continue;
}else{
System.out.println(num);
}
System.out.println(num);
}
}
}

上記の図では、if文で2で割った余りが0だった場合にcontinue文で抜けてBom!!と吐くようになっており、17行目のsystem.out.printlnまで行き届かずに中断し、次のループ処理をします。
処理結果を見ていきましょう。

for文処理を抜けずに続けてループしているのが分かりますね。

対してbreak分は、値がある条件の対象になった場合にそのスコープ自体から抜け出します、つまりループをやめて次の処理り移りましょうという意味になります。

さきほどのコードをbreakに変えてビルドしてみましょう。


class howToCon{
public static void main(String args[]){
howToCon htc = new howToCon();
htc.test1();
}

void test1(){
int num = 0;
for(int i=0;i<5;i++){
num += 1;
if(num % 2 == 0){
System.out.println("Bom!!");
break;
}else{
System.out.println(num);
}
}
}
}

結果は・・・

変数numの値が2になって余りが0になるという条件に引っかかったので、この時点でfor文内のスコープを抜けて終了していますね。

このように、どちらも強制的にあるタイミングの処理を終了するという意味では同じですが、実際の処理の結果は全く違うことが分かります。似てるなと思った関数や文は積極的に使ってみてください。その結果をくみ取ってみると、使いかたが分かってきて更にプログラミングの知識の幅が広がってくると思います。それでは!

 

 


 

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

【Excel】Excelファイルに張り付けてある画像の元データを抜き出す方法

偶然見つけて、「こんな方法あるんだ!」と驚いたので、備忘録としてご紹介。
Excelファイルに張り付けてある画像の元データを取り出す方法です。
記事で紹介している状況としては、人から送ってもらった画像が何故かすべてExcelファイルに張り付けてある!これを取り出したい!ということでしたが…まずこの状況に遭遇しないことを祈りたいものです。

もとの記事はこちらから。

【Excel】必要な画像がシートに張り付けられて送られてきた!エクセル文書に含まれる画像の元データを手に入れる裏ワザ – いまさら聞けないExcelの使い方講座 – 窓の杜
https://forest.watch.impress.co.jp/docs/serial/exceltips/1137566.html

 

データを取り出す方法ですが、まず前準備として、ファイルの拡張子を表示されるように設定を変更する必要があります。
Windows10の場合では、エクスプローラーを開き、「表示」タブから「ファイル名拡張子」のチェックマークにチェックを入れます。
操作としてはこれで完了です。

あとは、抜き出したい画像の入ったExcelファイルの拡張子を、「ファイル名.xlsx」から「ファイル名.zip」に変更します。
なお、この時ファイルが壊れても大丈夫なように、元ファイルをコピーしておくなど、バックアップは必ず取っておきましょう。
あとは、このZipファイルを展開し、展開後のファイルの「xl」という名前のフォルダを開きます。
さらにその中に、「media」という名前のフォルダがあるので、それを開くと、Excelファイルに張り付けられていた画像の元データがあります!
以上の手順で、Excelファイルから画像データを取り出すことができます。

 

以上、Excelファイルに張り付けられた画像の元データを抜き出す方法でした。
Excelファイルに張り付けられているものをコピーしようとしても、画質が粗いことがあるとのことでしたので、少々手間はかかりますが、こちらの方法で確実に元データを抜き出すことをおすすめします。

…冒頭でも書きましたが、こんな状況がそもそも発生しないことを祈りつつ…!
もしこの状況に遭遇した不運な方は、是非この方法をお試しください。

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

久々にMastodonインスタンスを更新したらデータが吹っ飛んだ件。

先日の一件もあってか、最近になって再び波が来ているMastodonですが、自分も以前動かしていてそのまま放置状態になっていたMastodonインスタンスを久々に立ち上げ直してみました。

…といってもいつの間にかエラーで止まってしまっていて、500エラーを吐く始末。
思い切って合わせてアップグレードも行ってみました。

自分のインスタンスはdocker上に置いたまま動かしているので、mastodon本体があるディレクトリからroot権限で下記のコマンドを実行してアップグレード。

cd /web/mastodon
chown -R 991.991 public/  #いつの間にかパーミッションがない旨のエラーが発生するようになっていたため追加
docker-compose down 
docker-compose build
docker-compose run --rm web rails db:migrate 
docker-compose run --rm web rails assets:precompile 
docker-compose up -d

ところがこの操作がまずかったのか…

ログインができない…
何度試してもログインできないので、やむを得ず再登録し、ログイン。

管理者権限を与えてユーザー一覧を見てみましたが…

今回作り直したアカウント以外すべて吹っ飛んでいました。
自分のアカウントだけでなく、以前フォローしていたはずの他インスタンスのユーザーのリストもすべて吹っ飛んでいました。
どうやらDocker上のdbコンテナ(か、あるいはその中のデータすべて)が丸々吹っ飛んでしまったようです。
何たる悲劇…

同じコマンドで以前アップグレードした時はすべてデータが保持されていたのですが、仕様が変わったのでしょうか。
幸いにもおひとり様インスタンスだったので事なきを得ましたが、なかなかヒヤリとしました。

会社で管理しているインスタンスもバージョンがなかなかに古いので、そろそろバージョンアップすべきか、とは思っている(今のところ、バージョンアップしなくても通信自体は問題ない)のですが、これはちょっと気を付けないと怖いですね…

ちなみに、以前未実装となっていて物議をかもしたユーザー削除機能ですが…

新しいバージョン(2.3.2)では機能としてはちゃんと実装されていました。(利用可能かどうかはインスタンス管理者のポリシーによります。)


以前からPawoo.netが先行して実装していた(気がする)インスタンス内のトゥートが登録画面から見れる機能も、公式のソースで実装されていました。
この機能はとても欲しかったので、公式で実装されたのは非常にありがたいです。

他にも、以前はソースレベルでしか書き換えができなかったロゴ画像やトップバナー(ヒーローイメージ)も、管理画面から書き換えが可能になりました。
以前はバージョンアップするたびに書き換える必要があったのでかなりキツイなぁと思っていたのでとてもありがたいです。

今回は前回よりも波が大きいようで、有名どころのインスタンスでは、管理者から目に見えて分かるレベルでサーバー負荷が上がっているようで、かなり人が集まってきているようです。

折角の機会ですし、どこかのインスタンスに参加したり、立ち上げたり、いろんなインスタンスのトゥートを見て回ってみるのも面白いかもしれませんね。

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

hpスイッチの入れ替え準備

hp から procurve Switch の代替え機が到着しました。早速シリアルコンソールを開いてコンフィグを移し終わりました。設定は VLAN、LACP、tagged 程度なので簡単に移し終わりました。

hp procurve switch

hp procurve switch

ついでにファームウェアを最新にしておこうと思ったのですが、どこを探してもダウンロードサイトが見つかりません。どこでダウンロードできるのだろうか。

 

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

【JavaScript】Mapboxで「There is already a source with this ID」エラーが発生【未解決】

タイトルにも書いてありますが、未解決です。

先日からMapboxを触っているのですが、その中でナビゲーション機能を追加・削除したいと考えています。
で、追加して削除までは成功したのですが、その後もう一度追加しようとすると、「There is already a source with this ID」というエラーが発生している状況です。
Google翻訳に掛けたところ「このIDを持つソースが既に存在します。」とのことだったので、削除したコントローラのデータが一部残っているのではと思っております。

ちなみにエラーが発生しているソースコードはこちら。

var directions;
function navi() {
    if(['条件:ナビ機能が追加済みだったら']) {
        map.removeControl(directions);
        directions = null;
    } else {
        directions = new MapboxDirections({
                        accessToken: mapboxgl.accessToken
                    });
        map.addControl(directions, 'top-left');
    }
}

このコードを実行すると、1回目の追加と削除が成功した後、10行でエラーになります。

まだしっかりと読めてはいないのですが、下記の記事が同じ原因で発生しているように見えるので、時間をとってしっかり確認したいと思います。

layers don’t show up after removing them and adding them again・issue #5440・mapbox/mapbox-gl-js
https://github.com/mapbox/mapbox-gl-js/issues/5440

 

CSSでの単なる表示・非表示の切り替えも考えたのですが、検索窓が見えないだけで実行されてしまうので、結局この方法がベストかな、と考えています。
解決策が分かったら、また改めてご紹介したいと思います!

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

変数名等の命名サービスcodic

 codicはコーディング中の命名を楽にしてくれるサービスです。
プログラマーのためのネーミング辞書 | codic”

使い方は簡単。左側に日本語を入れると対応する英語が出てきます。各行が1対1で対応しており、余計な操作なく多数の語を変換できます。左上の記法ボタンからスネーク記法、キャメル記法、ハイフン区切りなど記法を切り替えることができます。

 codicはgoogle翻訳の様な一般の翻訳ツールと異なり命名用と目的が狭く、明確です。そのためちょっとした記法で、出力を限定できる機能が備わっています。
 ”~する”と動詞で結ぶことで、メソッド名になります。

 ”~か”と結ぶことで、真偽値を返すメソッド名になります。

 ”辞書s”のように名詞の後にsをつけることで複数形に変換されます。

 コーディングにおける命名用の翻訳のため通常の翻訳と異なるコーディング用の翻訳をしてくれます。

 英単語をクリックすると他の候補と簡単な英和辞書へのリンクが出現します。

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

プログラミング初心者にすごく優しいアプリを発見!【アルゴリズム図鑑】

アルゴリズムって説明だけじゃ分からないって人もいますよね。筆者は自分に合った参考書を探すのが下手だったので、アプリやネットのツールをよく漁っていました。

例えば、この「アルゴリズム図鑑」というアプリは、プログラミングにおいて応用することのできるアルゴリズムを網羅しており、図を使った視覚的な学習をすることで何をしているかを確かめながら勉強することができます。

青いボタンSTEPを押すと、アルゴリズムの工程をテキストに合わせてみることが出来ます。もちろん戻ることもできます。

この動きに沿ってプログラムを作るとプログラム全体の構図だけでなく、変数の正しい使用法や関数の作り方なども一緒に学ぶことができます。

実験ボタンを押すと、値をシャッフルして実際に動かすことができます。制限は無いので納得いくまで実験してみてください。

 

鍵のかかっているアルゴリズムは、全てのアルゴリズムを購入すると見れるようになっています。お金は少々かかりますが、元のアルゴリズムを発展させた更なるアルゴリズムを見ることが出来ます。

再帰の原理などもしっかり収録されているので、中級者上級者も一見の価値があるかも・・・!?

 

ドットインストールやcordzineでも無料で学ぶことが出来ますが、前者は説明が早く、後者は静止画なのでゆっくり見ながら勉強したいという人向けだと思いました。また文字がそこまで多くないので初心者プログラマーの育成研修とも相性良さげですね。

プログラミングのスキルの幅を広げたい、基礎を振り返りたいという人は試してみてください、それでは!

 

 

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

Twitterの”流れるタイムライン”を実現してきた”UserStreamsAPI”がついに廃止へ。断続的停止から段階的に。

以前からTwitterユーザの間で物議を醸しだしていたTwitterのUserStreamsAPI廃止決定ですが、とうとう本日から実行されるようです。

TwitterのUser Streams APIがとうとう廃止へ ~断続的な停止を挟みながら23日に完全終了 – 窓の社

同社によると、“User Streams API”は8月16日にいきなりシャットダウンされるわけではない。断続的にサービスを中断させながら(flickering)、開発者と利用者に廃止を通知するという。

8月16日午後4時(協定世界時、日本時間8月17日午前1時)より、6時間ごとに1時間、“User Streams”や“Site Streams”が停止される(1時間オフ、5時間オン)
8月20日午前0時(協定世界時、日本時間8月20日午前9時)より、6時間ごとに2時間停止(2時間オフ、4時間オン)
8月22日午前0時(協定世界時、日本時間8月22日午前9時)より、6時間ごとに3時間停止(3時間オフ、3時間オン)
8月23日午後4時(協定世界時、日本時間8月24日午前1時)に、APIが完全にシャットダウンされる

現状のAPIでは、サードパーティクライアントは15分に15回までしかAPIをコールできない仕様となっており、UserStreamsAPIの廃止は実質的な”サードバーティ―クライアント潰し”であったために、クライアント開発者による抗議の声も上がっていました。

Twitter、サードパーティーアプリを機能不全にするAPI変更を延期 – TechCrunch

強い抗議を受けて、一旦は廃止の延期が決定しましたが、Twitter側はその2か月後にStreansAPIを廃止することを再び決定。反対を押し切る形で決行されるに至りました。
これを受けて、Twitter上ではオープンソースのミニブログシステムであるMastodonへの移行を考えるユーザーが出始めているようです。
(Mastodonでもサードパーティクライアントが情報を取得できるAPIが公開されており、Webからのアクセスでもタイムラインをストリーミングさせることができます。)

Mastodonへ移行するのか、それともTwitterを引き続き利用し続けるのか、ユーザーはしばらく悩まされることになりそうです。

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

様々な高さの定義

 ある地点の地上からの高さを同じ物差しでできる限り正確に測るためにいくつかの高さの定義がされてきました。この記事ではそれらを紹介します。紹介する高さは楕円体高、ジオイド高、標高(海抜)です。
 楕円体高は地球を純粋な楕円体として仮定した場合、地球楕円体と対象の地点との高さを表します。2018/08/15の日本ではGRS80地球楕円体を用いています。GNSSではWGS84地球楕円体を用いています。GRS80とWGS84のそれぞれが表現する地球はとても近く、同じものと扱っても大きな問題は起こりにくいです。GNSSの出力する高度はWGS84地球楕円体を用いた楕円体高です。GNSSを用いて現地点の地上からの標高を知るためには少し手間がかかります。
 ジオイド高はジオイドの楕円体高です。ジオイドとは、海が地球を包み、海が重力の影響のみを受けていると仮定した時、その海面が落ち着いた時に成す面のことです。近年では高精度なGNSSを用いて測量を行うことでジオイド高が求められています。ジオイド測量の概要|国土地理院
 標高はジオイドからある地点までの高さです。標高は海抜とも呼ばれます。
 三者を図解すると次の図の様になります。
 
 ジオイドとは|国土地理院から引用
 GNSSが出力する高さは楕円体高です。このため標高を求めるためにはジオイド高が必要となります。日本各所のジオイド高は国土地理院が無償で提供してくれています。
 ジオイド計算
 ジオイド・モデルの提供|基盤地図情報ダウンロードサービス※要利用登録

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