株式会社シベスピ 従業員ブログ

シベスピの社員ブログ。技術・想い・経験沢山書いていきます!

資格持ってます!と言うこと

最近日常生活にキャッシュレス決済を導入しました。松本です。
スマホ1台でコンビニに行けるのは楽ですね。
問題といえば次の引き落とし明細を見るのが割とちょっと怖いくらいです。

今回はそんな私の口座から引き落とされた、とある資格試験の代金を見ながら思ったことです。

10月の試験を受けてから

まあ応用情報のことなんですけど。

自己採点すら投げ出す有様の午前問をそっと裏返す、日曜の午後3時。お茶の時間です。
へ~自分ってこんなに出来ないんだナ~とのんびりお茶の準備をしていたのですが、紅茶の蒸らし時間が終わる頃には「なんでこんなに出来ないんだろう?おかしいな?」と思うようになりました。

ほら、基本情報は持ってますし?
それこそ基本情報受験の当時は勉強した方(自分比)ですし?
応用にだって見覚えのある問題もなくはなかったですし??
覚えがあったところ全部外れてますけど……。

身に付いてないのでは?

どうしても気になったので、合格当時の基本情報の問題を、お茶菓子のクッキーを片手に問いてみました。
芳ばしいアーモンドの香りを感じながら1時間ほど取り組みましたが、50点ちょっとという結果に……。
当時と同じ点数とまではいかないでしょうけど、まさか合格ラインにも届いていないとは!

この時こそ1人で笑ったものですが……。
これ、ちょっと割と良くない状態ですね?

資格持ってます!と言うこと

履歴書やスキルシートに資格を書く(持っていると言う)ということは、最低限この試験に出題されているレベルの知識はあります!会話はできます!ということを対外的に証明すると同時に、宣言することでもあります。
それではここで、情報処理技術者試験の試験概要を見てみましょう。

情報処理技術者試験は、「情報処理の促進に関する法律」に基づき経済産業省が、情報処理技術者としての「知識・技能」が一定以上の水準であることを認定している国家試験です。』

基本と応用で求められる水準に差はありますが、このくらいの知識はあるよ!技能はあるよ!ということを認められた人が持つ資格である、ということが分かります。

……さて、今の私、そして同じような資格を持っているあなたは、履歴書を見た見ず知らずの人に向けて「自分は『情報処理技術者としての「知識・技能」が一定以上の水準である』」と、自信を持って言うことができますか?


おわり

今回は基本情報・応用情報を基準にお話ししましたが、その他の資格についても同様です。
資格概要・目的を確認し、自分が肩書に見合った能力があるか、ティータイムついでに試してみるのも良いと思いますよ。
勉強しよ……。


[参考]
https://www.jitec.ipa.go.jp/1_08gaiyou/_index_gaiyou.html
情報処理技術者試験.試験概要
 春期の申込みは1/9からだそうです。


ところで

誰がなんと言おうと、紅茶には砂糖を入れない派です。

自分の考え方とは逆のことを人に対してやっている

お久しぶりです、黒田です。
好きなものは年末年始休暇です。

シベスピに入社してから部下指導について考えることが多くなりました。
そんな中で「自分の考え方とは逆のことを人に対してやっていること」って結構あるなと感じたので、ネタにしてみます。

新人時代編

自分が新人の頃、学生時代が長くて同年代より出遅れていることもあり、とにかく「やらせてもらえるならどんな仕事でも振ってほしい!」と考えていました。
程度の違いはあれど、そのように考える新人は少なくないと思います。

ところが自分が部下や後輩を持つ立場になると、「部下や後輩ができる作業」しか振っていないことにふとしたタイミングで気付いたりします。
部下や後輩が自分が新人の頃と同様の考えを持っているとしたら、間違いなくつまらない想いをさせてしまっています。

転職編

転職先での出社1日目、まあまあ気合を入れて家を出ます。
同業での転職なので会社は当然即戦力を求めての採用ですし、任された業務の内容を1分1秒でも早く把握して成果を出す気です。
ファーストインプレッション重視系としては、自己紹介での掴みも手抜きをするつもりはありません。
フレッシュでやる気に溢れている状態です。

ところがいざ転職者を受け入れる側になると、

 「まずはこの辺の資料を読んでおいてください」
 「3日間の作業だけど、最初だから1週間で終わらせてくれればいいですよ」
 
なんてことを言ってしまいがちです。
私自身も言われたことがあり、その時は「舐めんなよ、このやろう」と言葉に出しそうになるのを抑え、「そんなこと言わず、じゃんじゃん振ってください!」としつこいくらいに言っていましたが、そこまで言えないこともあり得たと思います。

転職者にも色々な人がいるとも思いますが、やる気に溢れている人の出鼻をくじくのはとてももったいないことではないでしょうか。

最後に

こうした矛盾に気付くには過去を振り返ることが不可欠です。
反省と改善は成長への早道なので、40歳の大台が迫って来ても疎かにせず続けていきたいと思います。

仕事における具体性と根拠

ある飲み会での一幕から・・・

久しぶりのブログ更新になります。
鎌野です。

最近思うところもあり、このブログで書きたいと思うことを書きます。

今回の話は、ある飲み会での話から始まります。

とある仕事を一緒にしている方と飲んでいたときに仕事について話をする機会がありました。

「お前の話は抽象的すぎるんだよな。具体性をもって話せ!」

と言われました。
自分自身、具体的に話しているつもりでいたのですが、もっと具体的に話さないとわからないよと注意されました。

そのときは、もう少し掘り下げて話さないといけないのかなと思うくらいの話でした。

その後の仕事での話

現場が変わり、仕事が以前より忙しい日々が続くようになりました。
今回の仕事は、あるアプリケーションの機能追加する作業でした。
作業を上司に報告し、スケジュールを作成して見てもらっているときに、
「ここはどういう風に考えてこうしたの?」と聞かれたときに、自分の考えを伝えました。
そのときに「具体性に欠けている、根拠がない。」と指摘を受けました。

そのときは、こう考えていると伝えたが、上司からじゃあここはどう考えているのと突っ込まれたときに返答することができませんでした。

「もっと考えろ!仕事を丁寧にやれ!」と言われました。

仕事における具体性と根拠とは

今回の話で言うと、指摘前の自分としては
1.とりあえず、作業工程を洗い出し、この機能はこの改修が必要だからこれくらいかかる。
2.ここでの作業は機能追加対象のアプリケーション作成したときは、これくらいかかったから、これくらいかかる。
といった感じで考えていました。
上司からは、
1.作業工程の洗い出しはいいが、各機能で何ができていて、何ができていないか確認したのか。確認したうえで、どういう作業が発生するか見積もる必要がある。
2.機能追加対象のアプリケーション作成を作成したときに使用できる資料などもあるので、それを使用すればスケジュールを短縮できるはずだが、それは確認したか。確認したうえで、それが使用できるか判断し、スケジュールを立てなければならない。
3.曖昧に見積もるのではなく、具体的に何の作業が残っていて、どうする必要があるかを調べる必要がある。
と言われました。

作業としてどのようなことがあるか、より具体的な内容を理解し、それを根拠として今回の作業を進めていく必要があることを痛感しました。

皆さんの仕事ではどうですか?

今回は私の体験談です。
失敗することから学ぶことも多いと思います。
今は、具体的な話と根拠をもって作業に取り組もうとしていますが、なかなか簡単にはうまくいきません。

作業は違えど、どのような仕事においても作業を実施するにあたり、具体的な話をしなければならない、根拠を示さなければならないといった機会は必ずあると思います。

そういったことが来る前に、もう一度作業に対する具体性と根拠について、皆さまでも考えてみてください。

直観で仕事をするわけでもなく、浅い考えで仕事をするわけでもない。
深く、論理的に、そして、客観的に今行っている作業の具体性と根拠について、今一度立ち止まって考えてみてはいかがでしょうか。

そういったことが、今後のステップアップに役立つようになれば、今回のブログを書いた意味もあるのかもしれません。

春じゃないのに!

こんにちは。最近、朝晩はめっきり寒くなりましたね。もう冬です。
さて、季節的には過ぎてしまいましたが、今回は私が秋に経験したことについて書こうと思います。

季節の変わり目

季節の変わり目には体調不良になりやすいと良く聞きますが、
私の場合は特に春が寒暖差と花粉症のせいで体調を崩しやすく、苦手なシーズンです。
同じように季節の変わり目となる秋については、暑いのが苦手な私にとって涼しくて過ごしやすいシーズンです。
※春に花粉症で苦労した件については、前回のブログに記載しましたので、気になる方はそちらを見てください!

しかし、今年の秋は例年の過ごしやすい秋とは違いました。。。

秋の散歩

某ゲームの影響もあり散歩する機会が増えた私ですが、ある日から鼻がムズムズし、くしゃみを頻発するようになりました。
最初は風邪でも引いたのかと思いましたが、熱はなく次第に鼻水が出るようになり、目も痒い!
何だか似たような経験を春にもしたなと思いました。
そう、花粉症です!!
そのため、急ぎ春と同様の対策をして、なんとか症状を緩和させました。

花粉症について

花粉症について改めて調べてみると、花粉は春だけでなく年中飛散しており、花粉症を引き起こしていることがわかりました。
その中でも春と秋は、注意が必要なようです。
また、秋は春よりも寒暖の差が激しいため体調を崩す人が多く、風邪と症状が似ていることもあり、花粉症だと気付きにくいようなので、
特に春先花粉症で悩まされている方は、症状を見極めて対策する必要があります。
私は、花粉症になるのは春だけだと思っていたので驚きです!


今年の春も秋も準備不足で酷い目に合いましたが、
来年は春が来る前に花粉対策して、花粉に負けずに乗り切ろうと思います!

【WEB UI操作自動化】Seleniumを使ってみよう【Java×Chrome】

気温36度って体温か!
と見えない何かに突っ込みを入れていたのも束の間。
もうすっかり寒くなりましたね。

今回は、Seleniumを使用して、下記を実施しようと思います。
 ① 当社WEBサイトのTOPページに遷移
 ② TOPページから問い合わせページに遷移
 ③ 問い合わせページに内容を入力し、エラーで引っかかるようにする

1. まずSeleniumって何?

SeleniumとはWEB UI操作の自動化フレームワークです。
要するに何が出来るかというと、コードを書いて実行すると、WEBサイトの操作(リンク押下・フォームへの入力等)が自動で実行でき、今までテストのために手でやっていた操作を自動で出来るという優れものです。

2. Seleniumの種類と今回の実施する環境

Seleniumには種類が二つあります。
 ① Selenium WebDriver
 ② Selenium IDE
①はプログラムを書いて実施するもの。
②はブラウザの拡張機能をインストールして、GUIで操作・実施するものです。
今回は① Selenium WebDriver を使用しようと思います。
また、Selenium WebDriverはさまざまな言語(Java/C#/Ruby等)で実装できるのですが、今回はJavaを選択します。
さらに、ブラウザについてもさまざまなブラウザを使用することが出来るのですが、今回はChromeで実施します。

3. ダウンロード

まず、各公式サイトから下記の二つをダウンロードします。
 ① Selenium WebDriver
 ② Chrome Driver

Selenium WebDriver のダウンロード

Selenium WebDriverのダウンロードページ(https://www.seleniumhq.org/download/)を開きます。
画面をスクロールしていくと、「Selenium Client & WebDriver Language Bindings」というタイトルが出てくるので、JavaのWebDriverをダウンロードします。

Javaを選択

Chrome Driver のダウンロード

Chrome Driverのダウンロードページ(https://sites.google.com/a/chromium.org/chromedriver/downloads)を開きます。
Chromeのバージョンごとに使用できるDriverがことなるので、使用するChromeのバージョンにあわせたものを選択します。

私の使用しているChromeは76
そして使用しているPCのOSにあわせたDriverをダウンロードします。
私が使用しているのはWindows

ダウンロードしたファイルは解凍しておきます。

4. 設定

eclipseを使用してプロジェクトを作成します。

今回はTestSeleniumというプロジェクト
上記でダウンロードしたファイルを配置するためにディレクトリを作成します。
ディレクトリ作成
作成したディレクトリにダウンロードしたファイルを配置します。
Seleniumはlibsしたのファイルも含めて配置します。
seleniumのライブラリにビルドパスを通します。
ビルドパスを通す

設定が完了したのでテストとしてこんなjavaファイルを作成して実行してみます。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test
{
    public static void main(String args[])
    {
        // ChromeDriverのパスを設定
        System.setProperty("webdriver.chrome.driver", "chromeDriver/chromedriver.exe");

        // WebDriverのインスタンスを作成
        WebDriver driver = new ChromeDriver();

        // 開きたいサイトのURLを引数に指定
        driver.get("http://www.chivsp.com/");
    }

}

そして実行すると。。ブラウザが起動され、引数に指定したURLが表示されます。
ChromeのURL欄の下には、自動テストソフトから起動した旨が記載されています。

開いた!

5. テストの準備

今回Seleniumで出来なきゃいけないことは下記となります。
 ① 指定URLのサイトをブラウザで開く。
 ② サイト内のリンクまたはボタンを押下する。
 ③ サイト内の入力フォームに値を入力する。
①にいてはテストで実施したので、②~③の実施方法を見て行きます。

② サイト内のリンクまたはボタンを押下する。

まずはクリックする対象の要素を取得します。
取得する方法としてはJavaScriptのように、HTMLのID属性やName属性、Class属性などからも取得できますし、
リンクの文字列やXPathからも取得できます。
今回は要素を特定するためのID等は振っていない要素を操作するので、Xpathを使用して実装していきます。

クリックしたい要素はこちらの「お問い合わせ」リンクとなります。

お問い合わせ

ChromeディベロッパーツールでXpathを取得します。

Xpath取得

要素を取得して、clickするメソッドを呼ぶ記述は下記となります。

driver.findElement(By.xpath("//*[@id='navigation']/ul/li[5]/a")).click();

③ サイト内の入力フォームに値を入力する。

サイトのフォームに値を入力する方法も、上記のクリックする方法と変わりません。
Xpathを取得し、下記のように記述します。

driver.findElement(By.xpath("/html/body/div[1]/div[1]/form/div[1]/div/input")).sendKeys("会社テスト");

5 .いざ実行

上記の基本的な内容を使用し、用意したコードがこちらとなります。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test
{
    public static void main(String args[])
    {
        // ChromeDriverのパスを設定
        System.setProperty("webdriver.chrome.driver", "chromeDriver/chromedriver.exe");

        // WebDriverのインスタンスを作成
        WebDriver driver = new ChromeDriver();

        // 開きたいサイトのURLを引数に指定
        driver.get("http://www.chivsp.com/");

        // お問い合わせリンクをクリック
        driver.findElement(By.xpath("//*[@id='navigation']/ul/li[5]/a")).click();

        // お問い合わせボタンをクリック
        driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/p[2]/a")).click();

        // 入力
        driver.findElement(By.xpath("/html/body/div[1]/div[1]/form/div[1]/div/input")).sendKeys("会社テスト");

        // チェックボックスにチェックを入れる
        driver.findElement(By.xpath("//*[@id=\"check\"]")).click();

        // ボタンを押下する。
        driver.findElement(By.xpath("//*[@id=\"submit\"]")).click();
    }
}

そして実行した結果がこちら。
https://cdn-ak.f.st-hatena.com/images/fotolife/c/chivsp/20191103/20191103201953.gif

6 . Seleniumって便利!

以上、さわりではありますが、Seleniumを使用してサイトを動かすことが出来ました。
これにJUnitを組み合わせたりすると、テストも出来ますし、画面キャプチャを取得する機能も、Seleniumにはあります。
もちろん、Javaで実行しているのでテストデータの挿入等もできるので、テストする上で実施しなければいけなかったことはほとんどコードで完結することが出来ます。
WEBシステムの同じ機能をずっとメンテナンスする場合等は一度書いておくと楽ですね。

以上、Seleniumを使ってみようでした。

【C#】Visual Studio 2019 インストール【Windowsフォームアプリケーション】

インストーラのダウンロード

MicrosoftVisual Studio 2019のダウンロードページに飛びます。
ダウンロード | IDE、Code、Team Foundation Server | Visual Studio

Visual Studio 2019」の「Community」の「無料ダウンロード」をクリックすると、インストーラのダウンロードが始まります。
f:id:chivsp:20191026195710p:plain

ダウンロード終了後、インストーラを実行します。
f:id:chivsp:20191026195800p:plain

インストール

ライセンス条項等は適当に読み飛ばして「続行」をクリックします。
f:id:chivsp:20191026195929p:plain

インストーラの準備が完了するとインストール対象の選択ができるので、必要な対象を選んで「インストール」をクリックします。
f:id:chivsp:20191026200125p:plain

インストールが開始されるので、完了するまで待機します。
f:id:chivsp:20191026201117p:plain

サインイン

インストールが完了するとサインインを求められるので、「サインイン」をクリックします。
f:id:chivsp:20191026201406p:plain

アカウントを持ってない場合、「作成してください」をクリックしてアカウントを作成してください。その際の手順は下記ページを参考にしてください。
【C#】Visual Studio 2017 インストール【Windowsフォームアプリケーション】 - 株式会社シベスピ 従業員ブログ

今回はVisual Studio 2017をインストールした際にサインインしてあったため、特に何もせずサインインが行われました。
f:id:chivsp:20191026202548p:plain

下の画面が表示されたらインストール完了です。「コードなしで続行」をクリックして、ライセンスの登録を行います。
f:id:chivsp:20191026202621p:plain

ライセンスの登録

「コードなしで続行」をクリックするとIDEが開くので、右上のアイコンから「アカウントの設定」をクリックします。
f:id:chivsp:20191026203118p:plain

「更新されたライセンスの有無を確認」をクリックします。
f:id:chivsp:20191026210207p:plain

下記の画面になるので、これでインストールはすべて完了です。
f:id:chivsp:20191026210535p:plain

後書き

とっくの昔にリリースされていた2019ですが、書かなきゃいけない気がしたので書いてみました。正直C# 8.0どころか7.0~7.3の機能も使いこなしてないので、インストールする必要はあったのか🤔🤔🤔という感じもします。


記事内容とこれっぽっちも関係はありませんが、今年の夏に富士山に行ってご来光アメイジングしてきました。
f:id:chivsp:20191026193516j:plain

幸いにも高山病の症状もなく初心者向けルートだったこともありサクサク登れました。予想以上に早く山小屋についたので外のベンチに座りながら、登ってくる人達の苦悶の表情を眺めてました。楽しかったです。
ちゃんと募金もしてきました。
f:id:chivsp:20191026194303j:plain

最終的には剣岳や奥穂のジャンダルムとか行きたいです。
富士山以降今日に至るまで雨と予定のブッキング一回しか山に登れず、つらみなIskがお送りしました。

【objective-c】iOSアプリ開発超初心者講座【アプリ作成編】

以前書いたXcodeのインストール編から1年以上経ってました。
今回はインストールしたXcodeで簡単な雪を降らせるアニメーションアプリを作って行こうかと思います。
プログラミング未経験の方に向けて、難しい説明などは割愛して、アプリ作成する流れを書いて行きます。

用意するもの

mac
Xcode

1.プロジェクト作成


まず、Xcodeを立ち上げて、「Create a New Xcode Project」をクリック。


アプリで使うテンプレートを選びます。
今回は、簡単なアプリを作るので、真っ白な画面だけが用意される「Single View app」を選択し「Next」をクリック。


プロジェクトの名前などを入力します。
ProductName:アプリの名前
OrganizationName:アプリを作る人の名前
OrganizationIdentifier:アプリを作る人のID(※適当で大丈夫ですが、アプリをリリースして売ったりする際は、他の人と被らないようにしないといけないです。)
Language:objective-cを選択
入力できたら、「Next」をクリック。


プロジェクトの保存先を選び、「create」をクリック。


すると、プロジェクトが作成されます。

2.Main.storyboard


次に、左側の一覧にある「Main.storyboard」を選択します。
すると、中央に白い枠が出てきます。これはアプリを起動した際に開かれる画面で、どういうものを配置するのかを決めていきます。
今回は雪を降らせるので、白い背景では雪が映らないため背景を作っていきます。


白い枠をクリックし、赤枠で囲ったところを選択すると、画面の背景色を指定できるので、それっぽい色に変更します。


画面的に寂しいので、下に人を配置します。


「Image View」を選択し、中央の枠にドラッグ&ドロップします。


人の画像ファイルを直接ドラッグ&ドロップします。
すると、ポップアップが出てくるので「Finish」をクリック。
(一緒に雪の画像も追加しておきます。)


無事画像が取り込まれました。


Main.storyboardに戻り、先ほど設置した「Image View」の枠をクリックし、右上の「Image」に追加した画像が表示されているので選択します。


これで、Main.storyboardでの作業は終了です。

3.ViewController

ViewControllerは表示される画面に色々な制御を加えるものです。
今回でいうと、雪の降るスピードや数などを制御しています。
ViewController.mに以下のコードを書いてみてください。

@interface ViewController ()
{
int snowCount;
double snowSpeed;
NSMutableArray *snowArray;
NSTimer *timer;
}
@end

@implementation ViewController

  • (void)viewDidLoad {

[super viewDidLoad];

snowCount = 0;
snowSpeed = 0.8;
snowArray = [NSMutableArray new];

timer = [NSTimer scheduledTimerWithTimeInterval:0.01
target:self
selector:@selector(snowFall)
userInfo:nil
repeats:YES];
}

  • (void)snowFall

{
if (snowCount >= 20) {
[self fall];
snowCount = 0;
}
snowCount++;

for (int i=0; i<[snowArray count]; i++) {
UIImageView *imageView = snowArray[i];
int randx = arc4random()%2;
imageView.center = CGPointMake(imageView.center.x+randx,
imageView.center.y+snowSpeed);

if (imageView.center.y > self.view.frame.size.height) {
[imageView removeFromSuperview];
[snowArray removeObject:imageView];
}
}
}

  • (void)fall

{
UIImageView *snowimageView = [UIImageView new];
snowimageView.image = [UIImage imageNamed:@"snow.png"
int randH = arc4random()%10;
int randT = arc4random()%10;
if (randH <=5) {randH = 10;}
if (randT <=5) {randT = 10;}
snowimageView.frame = CGRectMake(0, 0, randH, randT);
int rand = arc4random()%320;
snowimageView.center = CGPointMake(rand, -5)
[self.view addSubview:snowimageView];
[snowArray addObject:snowimageView];

}

  • (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

赤で「雪の降るスピード」
水色で「雪の降る間隔」
青で「雪の画像」
緑で「雪のx座標、y座標、幅、高さ」
などを指定しています。

4.実行


左上の実行ボタンをクリックして、アプリを起動させてみましょう。
右側を選択すると、どの端末で起動するか選べます。iPhoneiPadを持っていたらUSBで繋げば実機に作成したアプリをインストールすることができます。

完成!


無事雪を降らせることができました!
「3.ViewController」で色付けした箇所をいじって暴風雪にしたり、石を降らせたりしてみて遊んでみてください!

次回また機会があれば、Xcodeの機能やobjective-cの文法などを書ければと思います。