中小企業に勤めるITエンジニアの徒然日記

中小企業に勤めるITエンジニア(三十路女子)が日々のよしなしごとや、IT技術についての記事をつらつらと書いていきます。

こんにちは、つれ子です。

20代のうちに基本情報技術者と応用情報技術者の試験に合格する人は多いですが、ネットワークスペシャリストやデータベーススペシャリストなどの高度試験は元々受験者数が少ないのに加えて、平均年齢も30代半ばから40歳くらいになっています。

しかしながら30代になってから取得するよりも20代で取得する方が圧倒的に合格する意味がある、といえます。

その理由は以下の3点です。

  1. 継続的に勉強する習慣がつく
  1. 新しい仕事にアサインされやすくなる
  2. 転職に有利になるなる

まず一つ目ですが、30代で高度試験の1つ目を合格している人は基本的にそれまで試験の勉強を継続的にしていなかった人と考えられます。なぜなら継続的に試験勉強をしているのであれば20代で合格しているはずだからです。もちろんある程度の素養が必要になるのでかなり勉強していても合格できない人がいることは理解できますが、勉強して30代で合格できるのなら20代で合格しているんじゃないか、と思うのです。

「20代で合格している人は継続的に勉強している人」という話になってしまいましたが、20代で合格を目指して勉強すると継続的に勉強するようになるんじゃないかなと思います。


2番目は顕著です。やはり資格を取っておくとその資格を生かしたアサインされやすくなります。
誤解なきように言っておくと、資格をとると仕事ができるようになる訳ではありません。

私自身、ネットワークスペシャリストを取得しているからということで新しくネットワーク系の仕事にアサインされました。新たな顧客ということで社内でも重要なプロジェクトだったのですが抜てきされました。

しかしながら資格は持っていても基礎知識しか分からない状態なので新しい仕事に四苦八苦しましたが、その仕事にアサインされたのは資格を取っていたおかげです。

これは30代であればマネジメントだったり実際の業務の評価が優先されるので資格を取っていたとしてもあまり効果はなかったと思います。

最後に転職活動です。最近のキャリア採用では資格を重視しない、という話も出ていますが、もともと経歴が少ない20代にとっては高度試験合格の印ろうは結構強力だと思います。

1つ目の話と被りますが、少なくとも勉強家だと思われるでしょう。

逆に30代でとっても20代でとるよりは効果は薄いといえます。経歴がびっしり描かれている中では資格はおまけ程度になると思います。

以上の3点から、高度試験は20代でとっておくべきと言えるでしょう。

私の会社はいわゆるソフトウェアの開発を生業としているのですが、見積りは「人月」で出すことになります。

つまり、この仕事は3人で3カ月かかるので9人月ですよ、と。1人月100万なので900万円になりますよ、と。

ソフトウェアの開発規模とソフトウェアの価値がマッチしていない場合もあって、まぁソフトウェアの価値というのは測れるものではないので要するにお客様がソフトウェアを使うことで価値を産んだり、コストを削減したりしたときに出てくる金額になるのですが、それよりも見積りが高い場合は重要じゃない機能を削ったり価格交渉だったりをしてお客様にとって妥当な価格になるように調整することになります。


で、1人月の金額ってだいたいどの会社も標準の価格が決まっていて、大手SIerだと180万とか高いと200万とか、コンサルだと標準価格が400万とか行くところもある。

私の会社みたいな中小企業だと1次で請け負う場合でも100万で2次請負3次請負となるにしたがって80万、70万みたいに下がっていきます。

全部1次請負にすればいいじゃん、と思うかもひれませんが、ユーザー企業は常にソフトウェア開発をくれる訳ではなく、必要な時しか仕事はくれません。当然ながら。

そうなるとエンジニアのアイドルタイムが出てしまうので、他のお客さんを探さないといけないのですが、コネもブランドもない中小企業だと非常に厳しいのです。

なので大手SIerの下で定期的に仕事をもらえる立場の方がたとえ単金が低くてもメリットは大きいのです。



ユーザー企業から見ると、金額的には中小企業の方が間違いなく安いです。1人月の価格が倍近く違う場合がありますし、(1人月の作業量がどうか、という議論はあるにせよ)まず安くなります。しかしながら多くの開発経験があり、各分野のエキスパートがいて全部を任せて安心できるのはやはり大手SIerですし、何かあったときの責任も任せることができます。

そもそも大規模な開発になると大手SIerも中小企業も他の会社に再委託するか派遣してもらうかしないと人員的に対応できません。

そういった場合の開発要員の調達力も大手SIerの方が上です。ここは圧倒的だったりします。

ピラミッドの頂点にいる人にとっては調達場所はピラミッド全体になりますが、ピラミッドの中腹にいる人にとってはピラミッドの下層部しか調達場所がないのです。

こういうことを考えていると中小企業の管理職としては少し暗い気持ちになるのですが、戦略としてはユーザー企業と蜜月の仲(と書くと語弊があるが、要するにお客さんの業務を理解してシステムを把握する)になって1000万くらいの仕事をたくさんもらう、という戦略がいいのかなーとも思う今日この頃。

破産手続き中だったMt.Goxの資産が負債額を大幅に上回ったため破産ではなく民事再生法を適用しようとする申請があったようです。

私の友人で3年前のMt.GOX(マウントゴックス)事件の被害者になった人がいるので聞いてみたところ

「よくわからん」とのこと。

調べてみたところ、

・負債額は456億円くらい
・資産は20万ビットコインで、現在130万/ビットコインなので2660億

資産の方が負債の5倍以上ある!!!


破産手続をした場合、当時のレートで支払われるため456億円を支払って、残りはマウントゴックス社長の懐に入るらしい。


民事再生法にした場合、会社が復活する?のでビットコインでの支払いも可能らしい。


なるほど。では実際にどうなるのでしょうか。予想してみました。


たとえば10BTC購入していたとして、


当時のレート換算だと50万円。
現在のレート換算では1,300万円。

もちろん残っているビットコインが足りないのでまんま10BTCが返ってくることはないでしょう。

もともとMt.GOXには顧客から預かったビットコインが75万BTC、MTGOXが持っていたビットコインが10万BTCの合計85万BTC。

そのうち、65万BTCが消失し、20万BTCが残ったとのこと。

ということは顧客分の75万BTCの保持割合に応じて20万BTCを配分するのが一番うれしいでしょう。


10BTC持っていたとすると、10×20万÷75万=2.666BTC

2.6666を現在のレートに換算すると、346万!

破産手続されると50万だったのに対し、民事再生法の場合は346万になる可能性がある!!


まぁ消失しなければ1,300万だったので346万というのは微妙なところですが、あれから3年以上ずっと保持し続けているとも限らないので、346万になって返ってきたらかなり嬉しいのではないでしょうか。




日本のシステム開発はご存知の通りゼネコン構造となっていて、

大手SIerがクライアントから一括で受託をしてそれを下請けに流す、
そしてその下請けがさらに下請けに流す、
そしてさらにその下請けが・・・

というような形で、大規模なシステム開発の場合は6次請負、7次請負まであるらしいです。


この構造を打開しようと、中小IT企業が頑張ってもなかなか難しいです。それはおそらく以下の理由があると思います。


クライアントが大手SIerにしか頼みたくない

クライアント担当者やその上司はもし開発プロジェクトが失敗した場合は社内で何らかの責任を取らされるでしょう。
その際、中小IT企業に委託していた場合、格好の攻撃される材料になるのではないかと思います。

「大手SIerに委託しておけばよかったのに、なぜあんな会社を選定したんだ!」と。

そういうリスクを回避するために、なるべく安全な会社を選ぶとなるとやはり大手SIerが選ばれるでしょう。


そもそも提案内容が大手SIerのほうがよいケースが多い

やはり実績があり、優秀な人の数が総じて多い大手SIerからの提案内容はいいです。業務全体を俯瞰してアプリケーション、インフラ、運用までを考えた提案をしてくれます。これが一括受託か、と納得の内容です。お高いけど。

逆に中小企業からの提案はソフトウェアの開発のみでハードウェアは対象外とか、運用は別途とか、限定的な部分だけ提案されることが多いです。自分たちがやったことのある領域しか提案できない、というのは仕方ないことだとは思います。安いんですけどね。でもそれじゃあ選定できないんですよね。


中小企業が受けられない

これは前述の話とかぶりますが、自分たちのやったことがある範囲での提案になるので、サーバー構築ができなかったり、システム運用に対応できなかったりすると受けられないです。やはりクライアントはまとめてお任せできる、というところに大きな価値を感じてくれているので。



結局のところ、中小企業が直接クライアントから仕事をもらうには大手SIerがあまり受けたくない小さな仕事をとるということかなと思います。

しかしながらそうまでして直接クライアントと取引することに意味があるのかは疑問です。

ゼネコン構造に疑問を持つ下請け企業も少なからずいると思いますが、実は大手SIerの下請けで仕事をする、というのは賢い選択なのかもしれません。

会社が欲している人材にもよると思いますが、特にソフトウェアベンダにおいては

「情報処理技術者試験合格に報奨金を出すが、ベンダー資格には報奨金を出さない」

という会社が多いような気がします。


うちの会社も国家試験には報奨金がありますが、ベンダー資格にはありません。
たまたま人事の人と話しをする機会があり、その理由を聞いたところ、概ね以下の3つが理由のようでした。

・ベンダー資格には流行り廃りがある。情報処理技術者試験は国家試験だから流行り廃りがなくて安心
・ベンダー資格はそのベンダーに関わる社員に有利で、関わらない社員から不満があがる
・ベンダー資格にお金を出せない。


ベンダー資格には流行り廃りがある

これは失速し始めた"御三家"のIT資格で掲載されている内容のままでしょう。

これまでオラクル、シスコ、マイクロソフトの資格が重宝されてきたが、いまはAWSを始めとしたクラウドの資格に押されています。


ベンダー資格のベンダーに関わらない社員から不満があがる
これはつまりは「業務でオラクルデータベース使ってます」という人にとってはオラクルデータベースの資格に報奨金が出ると、全く関係ない仕事している人からすると不公平だ」ということです。

気持ちは分からんでもないですが、むしろこういう関係のない人ほど勉強してほしいと思って報奨金を設定していることもあるので、この話は少し的はずれなのかなーと思います。

ベンダー資格にお金を出せない

一番目の理由ともリンクするのですが要はこれが一番ですね。コストパフォーマンスが悪いと会社は思っているということです。

「データベース資格持ってる社員いっぱいいます」や「ITSSレベル4相当の人材います」というような営業をしやすいのです。

「マイクロソフト認定資格持ってる社員がいっぱいいます」
「いや、うちLinuxだし」
というような話になるのを嫌がっているのです。

しかしながらそのベンダーを扱う案件の場合は、情報処理技術者資格よりも有利に働くというメリットもあります。

特に今の時代であればAWS認定資格取得者は引き手数多ではないでしょうか。

まえ要するにベンダー資格に報奨金を設定するメリットもあればデメリットはある、ということです。

つまり資格報奨金にはそういうメリットを潰してでもリスクを背負いたくないという会社の思いが見え隠れします。

会社の姿勢として報奨金の有無を見るのも面白いのではないでしょうか。

こんにちは、つれ子です。


技術とは全く関係ない話ですが、「ちょまど」こと千代田まどかさんをご存知でしょうか。

津田塾大学卒業して、2014年4月から働いてるので現在25歳くらいでしょうか。
(私と10近く違います。)

2016年3月からマイクロソフトに入社してエヴァンジェリストとして活躍されているようです。

実力のほどは知らないのですが、勉強会に参加してはオタサーの姫状態で理系男子をメロメロにしていたようでして、界隈では有名だったようです。

実は私も昔はよく勉強会に参加してはいたのですが、男性率はおそらく今と同じくらいでほとんど男性ばかりという状態ではあったものの、姫扱いをされることはまったくなく、ストイックな勉強会でした。

私も正直、顔面偏差値は55くらいで中の上はあると思っているので、ちょうどいい具合にモテはするのですが、なにぶんそもそも話をするのが得意じゃないし、和気あいあいという感じでもなかったので声をかけづらい雰囲気は出していたとおもいます。

めがねだし。


ちょまどさん、確かにかわいいし、動画を見ると喋り方やしぐさもメチャかわいい。

私もこれだけの容姿と中身だったら今頃エヴァンジェリストだったのかしら。。

(容姿と中身が変わったらそれは別人だな。)


ちょまど=イージーモードのIT界最上級

という式が成り立つ


羨ましい限りです。


Androidの開発言語としてKotlin(「ことりん」と読む)がサポートされることになったらしいです。

恥ずかしながら私はKotlinという言語を知らなかったので、調べてみて分かったことをつらつらと書き連ねていきたいと思います。

ことりん、って何だかかわいい名前ですね。

歴史

・2011年7月20日、ロシアのJetBrainsという会社にて生まれる。名前の由来はバルト海にある「コトリン島」から
・2012年2月14日、オープンソース化(Apache License Version 2.0)

特徴

・Javaよりも簡潔に書けることを目標にしている
・静的型付け言語

Hello World

以下のサイトたちを参考にした
Kotlinにチャレンジしてみる(HelloWorld)
・https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt
[kotlin] ことりん入門 ~HelloWorldからMulti-declarations and Data classesまで


バーチャルホスト(VirtualHost)は複数のドメインを持つHTTPサーバを動作させる方法です。
1つのIPアドレスで動作させる方法を名前ベースのバーチャルホストといい、ドメインごとにIPアドレスを割り当てる方法をIPベースのバーチャルホストといいます。

よく使われる名前ベースのバーチャルホストについて説明します。


まず、IPアドレス1.2.3.4というサーバがあったとします。
http://www.domain1/
http://www.domain2/
という2つのドメインでそれぞれアクセスし、別のコンテンツを表示できるようにします。

DNSにはwww.domain1→1.2.3.4、www.domain2→1.2.3.4が登録されている状態です。


まず、例として、以下のドキュメントルートを2つ用意します。
/var/www/html/domain1/
/var/www/html/domain2/

Apacheの場合の設定

以下を設定ファイル(httpd.conf, apache2.confなど)の先頭に記述します。

Listen 80

NameVirtualHost *:80


DocumentRoot /var/www/html/domain1/
ServerName www.domain1



DocumentRoot /var/www/html/domain2/
ServerName www.domain2
 

設定変更後はApacheの再起動が必要なのでお忘れなく。


IPアドレス(IPv4)は4バイトなので、データベースで保持するときは型を符号なしINT型で持つ場合が多いと思います。

DBから取り出して、ファイルに出力したり画面に表示したりする場合、何らかの方法で数値型から192.168.1.1のようなおなじみのIPアドレスの形式に変換する必要があります。

SELECT 
  CONCAT(
    TRUNCATE(ip_address/16777216,0),
    '.', 
    TRUNCATE(mod(ip_address,16777216)/65536,0),
    '.', 
    TRUNCATE(mod(ip_address,65536)/256,0),
    '.', 
    TRUNCATE(mod(ip_address,256),0) 
  ) ip_addr
FROM ip;

実行結果

MariaDB [test]> SELECT * FROM `ip`;
+------------+
| ip_address |
+------------+
| 1299384753 |
+------------+
1 row in set (0.00 sec)


MariaDB [test]> SELECT
    ->   CONCAT(
    ->     TRUNCATE(ip_address/16777216,0),
    ->     '.',
    ->     TRUNCATE(mod(ip_address,16777216)/65536,0),
    ->     '.',
    ->     TRUNCATE(mod(ip_address,65536)/256,0),
    ->     '.',
    ->     TRUNCATE(mod(ip_address,256),0)
    ->   ) ip_addr
    -> FROM ip;
+--------------+
| ip_addr      |
+--------------+
| 77.115.9.177 |
+--------------+
1 row in set (0.00 sec)


httpsで用意されているAPIにアクセスしてJSON形式の情報を取得するプログラムをPHPで書いたのですが、file_get_contents($url)をすると

PHP Warning: file_get_contents(): SSL: Connection reset by peer

というエラーが出ました。


現象を調査したところ、
・curlで対象のAPIを呼び出すことはできる
・file_get_contents()で呼び出すことができるhttpsサイトと、エラーが出ないhttpsサイトがある
ことがわかりました。


サイトによって違う、ということは証明書関連か?と思い、呼び出せるサイトと呼び出せないサイトを比べて見ました。


・呼び出せるサイト

01

・エラーになるサイト
58


TLSのバージョンが違う、、、
51

犯人はこれか?と思いググるとありました。

PHP 5.6.x における OpenSSL 関連の変更


「Connection reset by peer」というエラーメッセージを見るに、おそらくここがヒットしているのではないでしょうか。」

ストリームラッパーが、SSL/TLS を使っている場合のピア証明書とホスト名の検証にデフォルトで対応

暗号化されたすべてのクライアントストリームで、ピア検証がデフォルトで有効になりました。 デフォルトでは、OpenSSL のデフォルト CA バンドルを使ってピア証明書を検証します。 たいていの場合は、正しい SSL 証明書を持つサーバーと通信するならこれを変更する必要はありません。 OpenSSL が、よく知られた CA バンドルを使うように設定されているからです。

デフォルトの CA バンドルを上書きすることもできます。 openssl.cafile あるいは openssl.capath を設定すればグローバルに変更でき、コンテキストオプション cafile あるいは capath を使えばリクエスト単位で変更できます。

一般的にはおすすめできませんが、 コンテキストオプション verify_peerFALSE にしてリクエストでのピア証明書の検証を無効化することもできます。 また同じく、ピア名の検証も、コンテキストオプション verify_peer_nameFALSE にすれば無効化できます。


上記のとおり、verify_peerを無効にしてればよいのかもしれませんが、以下のようにTLS1.0を使用する旨を設定してやれば正常に取得できるようになりました。
$ctx = stream_context_create([
    'ssl' => [
        'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
    ],
]);
$html = file_get_contents('https://example.com/', false, $ctx);

↑このページのトップヘ