2020年12月27日日曜日

LANケーブルを自作する

こんにちは、やっまむーです。

弊社は年末の大掃除の際に、机の下のコード類を整理しようとしています。
社内の個人PCはほとんどが有線LANで繋がっているのですが、そのために机の下を何本ものLANケーブルがはい回り、いくつものハブのポートが埋め尽くされています。
そして長年使われていることで、爪が欠けた物もいくつかあります。

前々から気になっていたので、この機会にいくつか修理をしようかと思います。
今回は予習のために自宅用の短いケーブルを作成します。

使う道具

  • LANケーブル
  • プラグ(RJ-45コネクタ)
  • 皮むき工具
  • かしめ工具
  • LANケーブルテスター

あとはハサミがあればOKです。
プラグはいくつか種類がありますが、できればロードバー(ケーブルを通すときのガイド)が付いたものの方が作業がやりやすいです。

LANケーブル自作の手順

まずは必要な長さを切り出し、両端の外皮を剥きます。

次に捻られている各ケーブルをほどいていきます。
今回使ったLANケーブルは中に強度をあげるための芯が入っていました。
これは不要なのでハサミで切ってしまいます。

今回作成するのはネットワーク用なので、両端が同じ並び順になるストレートケーブルにします。
各ケーブルの並びは標準的な「T568B」という規格にします。
ケーブルを「橙白・橙・緑白・青・青白・緑・茶白・茶」の順に並べます。

まっすぐ伸ばすために、ケーブルを複数本まとめて持って左右に振ったり、しごいたりしていき、最後にケーブルの先端を切りそろえます。

この順番を維持しながらコネクタに差し込み、かしめ工具で締め付ければ完成です。

反対側も同様の手順で作成し、疎通に問題がないかテスターで確認します。
両端で同じ番号のランプが点けば問題なしです。

コネクタにケーブルを通すのが最初は慣れませんが、ロードバー付きのものであれば初心者でも難しくありません。
LANケーブルが長すぎる場合など、ちょうどいい長さのケーブルが欲しい場合は自分で作ってみるのも面白いと思います。

では、本日はこのあたりでー。

2020年12月18日金曜日

Visual Studio Code で Draw.io を使ってみる!


こんにちは。よっしーです。

今日はお仕事のお話。


仕事でシステム設計をするとき、設計書作成にはいつも「Excel」を使っていました。

今まではそれでよかったのですが、ここ最近、仕事先は「脱Excel」の流れが来ていて、

ついに「Excel」での設計書作成が禁止となってしまいました。。。


UMLなどは、Excelで書いていたので、それに代わるツールをどうするか。

という話しになったのですが、最近では Visual Studio Code でいろいろ出来る。

ということがわかり、拡張機能として使える「Draw.io」を使ってみることにしました。




拡張機能から「Draw.io Integration」を選択してインストールします。

dio もしくは drawio という拡張子でファイルを作成すると認識してくれます。



使い勝手は「Visio」みたいな感じで、作図だけでいえば「Excel」よりも優秀な感じがします。



さらにこれのいいところは、SVG形式で出力できること。


SVGは画像ファイルですが、一般的な画像ファイルのように色情報の集合体(ビットマップ)ではなく、

ベクター情報(点の座標とそれらを結ぶ線など)で表現されていて、ファイル自体がテキストファイルになるので、

例えば画像内の文章をgrepなどで引っ掛けることが出来ます。

※ JPEG/PNGの資料からは文字列検索出来ませんが、SVGだと検索出来るので、
  資料を探し当てる際に便利です!!


SVGで出力し、マークダウン形式で設計書を作ってみると以下のようになります。


マークダウンなどもすべて Visual Studio Code上で作成、閲覧することが出来ます。


本当に Visual Studio Code でなんでもできちゃいますね。

UML図の作成についても使い勝手が良かったですし、慣れれば Excel よりも

生産性が出るような気がします。


皆さんも Visual Studio Code でいろいろやってみてはいかがでしょうか。

ではまた~。

2020年12月11日金曜日

リニューアルされたe-Govを使ってみた!

2020年11月下旬、行政手続きの電子申請サイト「e-Gov」がリニューアルされました。
その変更点は、


にあるドキュメントで確認できます。
その中で思わず笑ってしまったのが、下記の名称変更に関する記述です。

『e-Gov の誕生から現在に至るまで「電子政府の総合窓口(e-Gov)」を正式名称としていましたが、「名が体を表していない」との自己認識に基づき、現在の名称から「電子政府の総合窓口」を 取り除くこととしました。』

『「名が体を表していない」との自己認識』って・・・(笑)
でも、きちんと分析して、改善することはいいことだと思います。

今回はそんなリニューアルされたe-Govで賞与支払届の手続きをしました。

e-Gov電子申請アプリケーションを起動


Chromeでe-Gov電子申請サイトを開き、ログインボタンを押すと、「e-Gov電子申請アプリケーション起動」画面が表示されます。リニューアル前からこのアプリケーションは必要だったため、インストールしていたのですが、「e-Gov電子申請アプリケーション起動」を押しても起動しません。

リニューアルに伴い、新しくなったのだろうと思い、改めて「e-Gov電子申請アプリケーション」をダウンロードし、インストールすると、ログイン画面が表示されました。

ログインが必須


リニューアル前はログインしなくても利用できましたが、今回、ログインが必要となりました。

e-Govへのログインに使用できるアカウントは、

・e-Govアカウント
・GビズID
・Microsoftアカウント

の3つです。

賞与支払届を申請


ログイン後、手続検索で「賞与支払届」と入力して表示される検索結果の中から、「健康保険・厚生年金保険被保険者賞与支払届/70歳以上被用者賞与支払届(CSVファイル添付方式)(2020年12月以降手続き) 」を選択し、手続きを開始します。

「健康保険厚生年金保険CSV形式届書総括票」にデータを入力し、社会保険届書作成プログラムや各種ソフトで出力されるCSVファイル(SHFD0006.CSV)を添付書類として添付して申請します。
電子署名が必要な手続きですが、GビズIDを使用する場合は省略できます。
これでマイナンバーカードによる署名も必要ありません。

それにしても、統括票はなぜ必要なんでしょうね?
入力する事業者整理番号や事業者の住所などの項目はすべてCSVファイルに含まれています。
わざわざ入力するのが手間なので、将来的にはなくしてほしいものです。

またいつか、どこかで。

2020年12月4日金曜日

「こうべ避難ナビ」アップデートしました!

 10月に「こうべ避難ナビ」をリリースしました。

「こうべ避難ナビ(for iPhone/iPad)」バージョンアップしました!


リリース時、神戸市のホームページで公開されていた緊急避難場所データは、2018年、もしくは2019年のものでした。
先ごろ、各区のデータが2020年6月1日現在に統一されて公開されたので、データを更新し、アプリをアップデートしました。
ぜひ、ご利用ください。
Download on the App StoreGet it on Google Play

リリース用モジュールアップロードでエラー


アップデートするために、Google Play Consoleでリリース用のモジュールをアップロードしようとしたところ、

アップロード証明書で署名されていない APK をアップロードしました。
使用する証明書は同じである必要があります。
アップロード証明書のフィンガープリントは

SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

ですが、アップロードした APK の署名に使用されている証明書のフィンガープリントは

SHA1: ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ:ZZ

です

と、エラーが発生しました。

そうなんです。
キーストアのパスワードが分からなくなり、新しく作成したキーストアを使用していたのです。

このアップロード鍵を紛失した場合の対応は、Play Console ヘルプに書かれています。

1.新しく作成したキーストアからアップロード鍵の証明書をエクスポートする。
2.1の証明書を付けて、サポートチームに鍵のリセットを依頼する。

依頼から20分ほどして、新しいアップロード鍵の登録完了メールが届きました。
ただし、すぐにはアップロードできず、メールに記載されている新しいアップロード鍵の利用可能日時以降にアップロードすることができました。

またいつか、どこかで。

2020年11月29日日曜日

cpprestsdkでHTTP通信に失敗

お久しぶりです。ひっくです。

C++でWebAPIと通信する機能を作成した際、環境要因で(?)
WebAPIからのレスポンスを受信できないという現象があり、
解決に手間取ったので、方法を備忘録として残しておきます。

前提条件


 ・C++でHTTP(S)通信を行うため、Microsoft提供のcpprestsdkを使用

 ・cpprestsdkのDLLはNuGetで取得(version:2.5.0)

 ・WindowsXP(Embedded)で発生(ただし1回目の通信は成功し、2回目以降で失敗)

発生した現象について



実装していたコードはざっくり記載するとこんな感じです。
http_client_config cfg;
http_client client(L"URL文字列", cfg)

auto request = client.request(method::Post, L"", postData.serialize(), L"application/json");
request.then([](http_response response)
{
    // 受信時の処理(ローカル変数に受信時のJSON文字列を保持)
}.wait();
このコード、Windows10(64bit)では問題なく動作しました。
しかし問題となっている環境(WindowsXP)では、何故か受信しないように見えるパターンが存在しました。

Wiresharkを入れて通信を監視してみましたが、クライアント - WebAPI間ではHTTPレスポンスも
受信できており、直前・直後のTCP通信も正常のため、何故??という状態になりました。

対処法



WebAPIからのレスポンス待機を行う部分について、別の書き方ができるか調べてみた結果
以下に変更するとうまくいきました。

変更前
request.then([](http_response response)
{
    // 受信時の処理(ローカル変数に受信時のJSON文字列を保持)
}.wait();

変更後
// ここでリクエスト送信+レスポンス待機
auto resp = request.get();
// 待機完了後、レスポンスのJSON文字列を取得
auto respJson = resp.extract_json().get();
get() 内部でレスポンス待機処理が記載されており、
問題が発生したコードと機能の実装は変わらないと言えます。

内部処理のため直接原因は分からないままでしたが、「http_client.request」が
タスクチェーンで「wait」「then」の組み合わせとなった場合に、問題の現象が発生するのかもしれません。

なお、別の書き方として以下の様な方法もありました。
while(!request.is_done())
{
    // 待機処理
}

こちらのコードも問題の現象は発生しなくなりますが、「request.is_done()」が完了済みと
判断する時点が分からないため、不要な通信が発生する可能性があるという点で、
使用は控えるべきかと思います。

今回はこのへんで。ではまた!

2020年11月24日火曜日

Blazor WebAssemblyをvscodeで触ってみた

どうも、もりもりです。

今月ついに.NET 5.0がリリースされましたね。 今回は.NETでSPA(SinglePageApplication)を実現できるWebフレームワークの BlazorWebAssemblyを触ってみました。 SPAとは、ページ遷移を行わない単一Webページで動作するWebアプリです。 一般的なWebアプリではJavaScriptを用いてSPAを実現しますが、 C#だけでできてしまうってC#erからしたら嬉しくないですか?

はじめに

Blazorには2種類のモデルがあり、サーバーサイドで動作するBlazor Serverと、 ブラウザ上で動作するBlazor WebAssemblyがあります。

Blazor Serverは、サーバー上の.NET Core環境で主な処理が行われ、サーバー側がブラウザのDOMを変更します。 Blazor WebAssemblyは、最初に.NETアセンブリとランタイムがブラウザにダウンロードされ ブラウザ上で.NETコードを実行し、別途プラグインなどは不要です。

vscodeでBlazor WebAssemblyプロジェクトを作成して、 さらにTodoMVC のようなTodoページを追加してみました。

プロジェクト作成

まずは任意の場所で下記コマンドを叩いてプロジェクトを作成します。

$ dotnet new blazorwasm -o BlazorWasmSample

プロジェクト構成

確認すると初めからテンプレート的な感じで3つほどページが用意されています。

BlazorWasmSample
  ├── App.razor
  ├── BlazorWasmSample.csprojs
  ├── Pages
  │   ├── Counter.razor
  │   ├── FetchData.razor
  │   └── Index.razor
  ├── Program.cs
  ├── Properties
  │   └── launchSettings.json
  ├── Shared
  │   ├── MainLayout.razor
  │   ├── MainLayout.razor.css
  │   ├── NavMenu.razor
  │   ├── NavMenu.razor.css
  │   └── SurveyPrompt.razor
  ├── _Imports.razor
  └── wwwroot
      ├── css
      │   ├── app.css
      │   ├── bootstrap
      │   │   ├── bootstrap.min.css
      │   │   └── bootstrap.min.css.map
      │   └── open-iconic
      │       ├── FONT-LICENSE
      │       ├── ICON-LICENSE
      │       ├── README.md
      │       └── font
      │           ├── css
      │           │   └── open-iconic-bootstrap.min.css
      │           └── fonts
      │               ├── open-iconic.eot
      │               ├── open-iconic.otf
      │               ├── open-iconic.svg
      │               ├── open-iconic.ttf
      │               └── open-iconic.woff
      ├── favicon.ico
      ├── index.html
      └── sample-data
          └── weather.json

ソースコードは下記に置いてます。

アプリ起動

ということで早速実行してみましょう。 BlazorWasmSampleまで移動して下記コマンドで実行します。

$ dotnet run

https://localhost:5001 にアクセスします。 シンプルで今風な感じの画面が表示されました。 Homeメニューには、おなじみの「Hello world」ですね。

Counterメニューをみてみましょう。 ボタンをポチポチするとカウントアップされていきます。

最後はFetch dataページです。 こちらはGrid的な表の画面です。 標準のtableなので編集やソートなどフィルタリングなどはできません。 このあたりはいい感じのパッケージがないかまた探してみます。

ソースを確認

Counterページのソースを確認してみましょう。

Counter.razor

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

これだけで書けてしまうんですね。 すごい。シンプル。

ボタンをクリックすると @code 内の変数 currentCount がインクリメントされ 画面上の @currentCount に反映されるようです。

Todoを追加してみる

◆ 追加 / 編集ファイル

では、TodoMVCのような ページを追加してみましょう。 追加、編集するファイルは下記の4つだけです。

BlazorWasmSample
  ├── Pages
  │   ├── [★] Todo.cs
  │   └── [★] Todo.razor
  ├── Shared
  │   ├── [★] NavMenu.razor
  ├── [★] TodoItem.cs
◆ TodoItemクラス追加

まずはTodoアイテムのクラスを追加します。

TodoItem.cs

public class TodoItem
{
    public string Content {get; set;}
    public bool IsDone {get; set;}
}
◆ Viewと処理を分けてファイルを追加

次に画面と処理ですが、コードが長くなってしまうのでrazorファイルにはViewのみとし、処理はpartialクラスにしてTodo.csと、ファイルを2つに分けて追加します。

Todo.razor

@page "/todo"

<h1>Todo</h1>

・・・

Todo.cs

namespace BlazorWasmSample.Pages
{
    public partial class Todo
    {
        ・・・
    }
}
◆ 入力したTodoアイテムを追加

Todoを入力してEnterでどんどん追加していくようにします。
※現状、Enterを2回押さないとリストに追加されないのでまた時間ある時にデバッグして調べてみます。。。

Todo.razor

<input style="width: 100%" placeholder="What needs to be done?" @bind="newItem" @onkeydown="@Enter" />

Todo.cs

// Todoアイテム全て
private List<TodoItem> allTodos = new List<TodoItem>();
// 追加するアイテム
private string newItem;
// 表示用のTodoアイテム
private List<TodoItem> todosForDisplay = new List<TodoItem>();
// 現在の表示状態
private State currentState;
// 表示状態
private enum State
{
    All,
    Active,
    Completed,
}

/// <summary>
/// アイテムを追加
/// </summary>
private void AddItem() {
    if (!string.IsNullOrWhiteSpace(newItem))
    {
        allTodos.Add(new TodoItem() { Content = newItem, });
        this.ShowTodo();
        newItem = string.Empty;
    }
}

/// <summary>
/// Todoアイテムを表示
/// </summary>
private void ShowTodo()
{
    switch (this.currentState)
    {
        case State.All:
            todosForDisplay = allTodos;
            break;
        case State.Active:
            todosForDisplay = allTodos.Where(x => !x.IsDone).ToList();
            break;
        case State.Completed:
            todosForDisplay = allTodos.Where(x => x.IsDone).ToList();
            break;
    }
}

/// <summary>
/// Enterキーイベント
/// </summary>
/// <param name="e">イベントデータ</param>
private void Enter(KeyboardEventArgs e)
{
    Console.WriteLine($"KeyboardEventArgs : Code[{e.Code}] Key[{e.Key}]");
    if (e.Key == "Enter")
    {
        this.AddItem();
    }
}
◆ Todoリスト表示

追加したアイテムは下記のように表示します。 TodoItem.IsDoneをCheckBoxに、TodoItem.ContentをTextBoxにバインドしてます。

Todo.razor

<ul>
    @foreach (var item in todosForDisplay)
    {
        <li>
            <input type="checkbox" @bind="item.IsDone" />
            <input @bind="item.Content"/>
        </li>
    }
</ul>
◆ Todoアイテムのチェック変更

追加したアイテムのCheckをONにすると取消線を入れ文字色をグレーに、OFFにすると黒に戻すようスタイルと処理を追加します。

Todo.razor

<ul>
    @foreach (var item in todosForDisplay)
    {
        <li>
            <input type="checkbox" @bind="item.IsDone" />
            <input @bind="item.Content" style="color: @GetTextStyles(item).foreColor; text-decoration: @GetTextStyles(item).decoration"/>
        </li>
    }
</ul>

色と装飾をTupleで返します。

Todo.cs

/// <summary>
/// Todoアイテムのテキストスタイルを取得
/// </summary>
/// <param name="item">Todoアイテム</param>
/// <returns>文字色と取消線を付けるかどうかのセット</returns>
private (string foreColor, string decoration) GetTextStyles(TodoItem item)
{
    return item.IsDone ? ("lightgray", "line-through") : ("black", "none");
}
◆ 未完了アイテムの残数表示

未完了のActiveなTodoItemのカウントを左下に表示します。View側に直接LINQでバインドしちゃいます。

Todo.razor

@allTodos.Count(x => !x.IsDone) items left
◆ 表示内容の切り替え

全て / 未完了 / 完了と表示を切り替えるボタンを追加し、メソッドをView側でバインドする。

Todo.razor

<button @onclick="ShowAll">All</button>
<button @onclick="ShowActive">Active</button>
<button @onclick="ShowCompleted">Completed</button>

Todo.cs

/// <summary>
/// Todoアイテム全て表示
/// </summary>
private void ShowAll() {
    currentState = State.All;
    this.ShowTodo();
}

/// <summary>
/// Todo未完了アイテム表示
/// </summary>
private void ShowActive() {
    currentState = State.Active;
    this.ShowTodo();
}

/// <summary>
/// Todo完了アイテム表示
/// </summary>
private void ShowCompleted() {
    currentState = State.Completed;
    this.ShowTodo();>
}
◆ 完了アイテムのクリア

完了アイテムが一つ以上ある場合はClear completedボタンを表示するようにし、 クリックで完了アイテムをメモリから削除する。

Todo.razor

<button @onclick="ClearCompleted" style="display: @GetDisplay()">Clear completed</button>

Todo.cs

/// <summary>
/// Todo完了アイテムをクリア
/// </summary>
private void ClearCompleted()
{
    var completedTodos = allTodos.Where(x => x.IsDone);
    allTodos = allTodos.Except(completedTodos).ToList();
    this.ShowTodo();
}

/// <summary>
/// ClearCompletedボタン表示スタイルを取得
/// </summary>
/// <returns>表示スタイル [inline-block / none]</returns>
private string GetDisplay()
{
    return allTodos.Any(x => x.IsDone) ? "inline-block" : "none";
}
◆ メニューへTodoページを追加

最後に、Todo.razorで指定した @page "/todo" へのリンクをメニューに追加します。

NavMenu.razor

<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
    <ul class="nav flex-column">
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="" Match="NavLinkMatch.All">
                <span class="oi oi-home" aria-hidden="true"></span> Home
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="counter">
                <span class="oi oi-plus" aria-hidden="true"></span> Counter
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="fetchdata">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
            </NavLink>
        </li>
        <li class="nav-item px-3">
            <NavLink class="nav-link" href="todo">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Todo
            </NavLink>
        </li>
    </ul>
</div>

さいごに

記事の内容は長くなってしまいましたが、思ってたよりもスッキリとコードが書けるのでサクっと作れてしまいました。 ただブラウザにランタイムや.NETアセンブリをダウンロードして実行するので機能の多いアプリにしてしまうとダウンロードに時間がかかってしまうようです。 それでも手軽にSPAをC#で作れちゃうってなかなかイイですね。

今回追加したTodoはスタイルとか特にセットしてないので味気ない感じになってますが MatBlazorのようなマテリアルデザインのUIフレームワークもあり 面白そうなので近々使ってみようと思います。

以上、もりもりでした。

2020年11月16日月曜日

Googleのストレージポリシーが変わってしまう

こんにちは、やっまむーです。

先日、Googleからこんな発表がありました。

これまでGoogleフォトでは高画質に圧縮された写真や動画はストレージを圧迫する事なく、いくらでもアップロードできました。
ところが、2021年6月1日からはアップロードされたもの全てがストレージを使用するようになります。
他のサービスと比較して圧倒的に多い容量を無料で提供していたので、今までが特別だったとも言えます。

Pixelシリーズを使ってる人は

なんと、Pixelシリーズを使っている人はこのポリシー変更が適用されません。
このメールは対象のPixelシリーズを使っているアカウントに送られているようです。
私はPixel3XL、妻はPixel4aを使っており、二人とも届いていました。

Pixelシリーズの特典として、写真や動画を元の画質でアップロードしてもストレージを使用せずにアップロードできるというのがあります。
この特典はどうなるのかというと、別のページに明記されていました。

写真や動画のアップロード サイズを選択する
Pixel 3a~Pixel 5
写真と動画は高画質でアップロードすることも、元の画質でアップロードすることもできます。Pixel 3a~Pixel 5 のデバイスから高画質でアップロードした写真と動画は、無料、容量無制限で保存されます。元の画質でアップロードした写真と動画は、Google アカウントの保存容量を使用するようになります。詳しくは、アップロード サイズを変更する方法とストレージ プランをご覧ください。

Pixel 3 
2022 年 1 月 31 日まで、Pixel 3 から Google フォトにアップロードしたすべての写真と動画は元の画質で保存され、無料、容量無制限です。この日以前にアップロードした写真と動画は、その後も引き続き元の画質のまま無料で保存されます。2022 年 1 月 31 日以降は、新しい写真と動画は高画質でアップロードされ、無料で保存されます。新しい写真と動画を元の画質でアップロードする場合は、割り当てられている保存容量を使用するようになります。

Pixel3は元の画質でアップロードできる期間が決められていますが、高画質設定であれば無料で保存し続けられます。

気になるのは、今後発売されるPixelシリーズの場合どうなるかです。
ポリシーが変更されてしまいましたが、何らかの特典が付くのであれば端末変更をしやすいので是非ともお願いしたいところです。

ではではー。

2020年11月4日水曜日

「無限くら寿司」で【レシート画像のアップロードに失敗しました】とエラーになる件


こんにちは。よっしーです。

GoToEatキャンペーン始まりましたね。


巷では「無限くら寿司」が流行っている。ということで、

血税を少しでも回収するべく流行りに乗るべく、私も試してみました。


お店の予約は「EPARK」というスマホアプリからしかできず、

ポイント申請はWEBサイトからしかできずと、

正直手順が面倒です。しかもアプリが重い。。。


で、ポイント申請のため、レシートを撮影し、

アップロードする手順があるのですが、

ここで「罠」があります。


画像アップロードを行い、数時間後、以下のような失敗メールが届きました。

何度レシート画像を送り直しても同じ失敗メールが届きます。


画像が悪いのかと考え、写真を拡大してみたり、

画像の解像度を小さくしてみたりしましたが、

結果は変わらずでした。


で、いろいろと調べてみると、

同じような症状でハマっている人が多く、


・サーバーが込み合ってて待つしかない。

・無限対策された。


など、嘘かほんとかわからない情報が流れていました。


で、たどり着いた解決策が以下です。


アップロードする画像を選択後、利用金額を入力するフォームで

ソフトウェアキーボードのEnterを押さない。


ということでした。。。


金額をEnterで決定すると、意図しない状態で、

画像のアップロード処理に遷移するようで、

必ず失敗するようです。


ただのバグですやん。。。


ということで、金額入力後、ソフトウェアキーボード範囲外を

タップすることで、ソフトウェアキーボードを閉じ、

その後、アップロードボタンをタップすると、

数時間後に無事にポイントが付与されました。

この現象で困っている人が多いようなので、

皆さんの助けになれば幸いです。


システム側ではよ修正してよ。。。って話ですが。


ではまた~。

2020年10月30日金曜日

削除できないパーティションがあるディスクをクリーンしてみた!

 廃棄するPCから取り出したHDDを別のPCに増設し、ディスク全体をクリーンした時のメモです。


削除できない「回復パーティション」


増設したHDDの状態は下図の通りです。


A(491MB)・・・System

B(10.00GB)・・・回復パーティション

C(455.28GB)・・・OSがインストールされていたCドライブ

で、AとCのパーティションは削除しました。Bは「削除」がメニューに表示されず、削除できません。


DISKPARTで削除を試みる


調べてみると「DISKPARTで削除する」らしいので、試してみました。


DISKPART> list disk

 ディスク   状態      サイズ  空き
 ###
 ------------   ------------    -------   -------
 ディスク 0  オンライン   465 GB  0 B
 ディスク 1  オンライン   465 GB  455 GB

DISKPART> select disk 1

ディスク 1 が選択されました。

DISKPART> list partition

 Partition ###  Type         Size   Offset
 ---------------  -------------------     -------   -------
 Partition 1   ダイナミック データ  490 MB  31 KB
 Partition 2   回復          10 GB  491 MB
 Partition 3   ダイナミック データ  455 GB  10 GB

DISKPART> select partition 2

パーティション 2 が選択されました。

DISKPART> delete partition

仮想ディスク サービス エラー:
この操作は、オブジェクトによってサポートされません。

指定されたコマンドまたはパラメーターは、このシステムではサポートされていません。


残念ながら削除に失敗しました。


クリーン&パーティション作成


DISKPARTの他のコマンドを探してみると、クリーンがあったので、実行しました。


DISKPART> clean

DiskPart はディスクを正常にクリーンな状態にしました。



「未割り当て」になりました!



パーティションを作成します。


DISKPART> create partition primary

DiskPart は指定したパーティションの作成に成功しました。



作成されました!



このパーティションにドライブ文字を割り当て、フォーマットすれば使用できるようになりました。

またいつか、どこかで。

2020年10月23日金曜日

「こうべ避難ナビ(for Android)」リリースしました!

前回の続きです。

「こうべ避難ナビ(for iPhone/iPad)」バージョンアップしました!

その前に、、、

「こうべ避難ナビ」をAndroid向けにもリリースしました!
Androidスマホをお持ちの方はぜひご利用ください!
Get it on Google Play
iPhone/iPad向けとAndroid向けの違いの一つは、電話をかける操作です。
iPhone/iPad向けでは、ウィンドウ内の電話番号のリンクをタッチします。




















Android向けでは、ウィンドウを長押しします。




















経路の表示方法変更

iPhone/iPad向けVer.1.1では、アプリ内でルートを表示していました。

今回、ルート表示は使い慣れたマップアプリにまかせています。
iPhone/iPad向けではウィンドウ内の画像を、Android向けではウィンドウをタッチすると、マップアプリが起動し、徒歩でのルートが表示されます。

iPhoneとAndroidの両方をお持ちの方は、それぞれが提示する経路を比べてみても面白いかもしれません(笑)


遠く離れた場所ではルートがまったく異なることも。
こんなに遠くまで歩いて避難することはないでしょうけど・・・














またいつか、どこかで。

2020年10月16日金曜日

「こうべ避難ナビ(for iPhone/iPad)」バージョンアップしました!

4年前にリリースしたiPhone/iPad向けアプリ「こうべ避難ナビ」をこの度、バージョンアップしました!
神戸市内にお住まいの方はぜひご利用ください!

Download on the App Store

Ver.2.0の主な変更点は、

  • 緊急避難場所データの更新
  • 緊急避難場所情報の表示変更
  • 経路の表示方法変更
です。

これらを2回にわたり、ご紹介します。


緊急避難場所データの更新

緊急避難場所のデータは元々、神戸市からオープンデータとして提供されていました。
現在はオープンデータポータルサイトから消えていますが、その代わりに

  • Excel/CSV(2017年・位置情報あり)
  • PDF(2018~2019年・位置情報なし)

を、神戸市のサイトからダウンロードすることができます。

オープンデータ・2017年版のExcel/CSVともに、位置情報が正確でないデータが少なからずあり、Ver.1.1では正しい場所を示していない避難場所がありました。避難場所を表示するサイトやアプリは他にもありますが、それらにも同様の誤りを見つけることができます。

今回、市内の全避難場所の位置を地図上で確認し、正しい位置に表示されるよう緯度・経度を修正しました。また、小学校の統合などのため避難場所が変更されており、PDFに記載されている内容に合わせて、情報を更新しました。


緊急避難場所情報の表示変更

Ver.1.1では、避難場所をタッチすると表示されるウィンドウ内のiマークをタッチすると情報が表示されました。(下図左)
Ver.2.0では、ウィンドウ内に情報を表示し、よりカンタンに必要な情報にアクセスできるよう変更しました。(下図右)













またいつか、どこかで。

2020年10月9日金曜日

MacBook Proがやって来た!

社内にMac (iMac(21.5-inch, Late 2015))が一台あります。

MojaveだったかHigh Sierraだったか、OSをバージョンアップしたタイミングでBluetoothが使えなくなってしまい、
以降はキーボードとマウスを有線接続して、使い続けてきました。
その点は不便ではなかったのですが、速度の遅さに耐えかねて、今年発売されたMacBook Proを購入しました。


開封の儀

注文翌日に届きました。早い!


感動の対面!


電源アダプタとUSB-Cケーブルが同梱されています。


メールのバックアップと復元

移行すべきデータが少なく、どちらかと言えばまっさらな状態で使いたかったため、「移行アシスタント」は使わず、メールだけを手動でバックアップ・復元しました。

iMacの「メール」でメールボックスを書き出します。
MacBook Proの「メール」でメールボックスを読み込みます。
「Apple Mail」を選択します。
書き出したZipファイルを解凍し、選択します。
読み込む項目を選択します。
(画面では全項目を選択していますが、実際には送信済みとゴミ箱は選択しませんでした。)
無事にインポートされました。

一週間使ってみて

最新機種なので、速度は大満足です。
(現在、iOSアプリ開発の終盤に差し掛かっていますが、もっと早く購入していれば余計なストレスがなかっただろうなあ、と。)

Touch Barはほとんど使っていませんが、音楽再生時の音量変更、再生位置変更、早送りなどは便利ですね。


またいつか、どこかで。