富士通から地元の製造系企業へ転職した話
はじめに
自分の誕生日(12/23)が、祝日でないことに違和感を感じています。
2020年も祝日じゃないじゃか。。。!?
さて、同時期に退職した後輩に誘われて、「楽しかった職場 みんなのF2 Advent Calendar 2019」に参加しました。
・・・んー?参加者が少ないなぁ??
この投稿が、もしかしてラストバッター?
・・・いいのか、こんな内容で・・・(苦笑
身内くらいしか見に来ないと思いますが。。。
36歳の自分の誕生日の足跡として、まとめてみたいと思います。
富士通を辞めた理由
やめる理由なんて人それぞれだと思うので、参考程度に。
一番の理由は、親を含めた自分の将来を考えた結果です。
親の世話(介護含む)をするには、どうしても近場に居ないとな、と。
親を都心に呼ぶのは、経済的にも、親の体力やらなんやらを考えて無理。
であれば、自分が地元に戻るしかないな、と。
ぼんやりと前から考えていて、転職情報などはチェックしていたのですが。。。
千葉の片田舎では、IT企業はほぼなく。
そうなると、ある程度、業種/職種が違う企業への転職も考慮すると、30代が自由に転職するラストチャンスだと考え、踏ん切りが付きました。
転職する!って話をすると、結構いろいろな人が「そんなに大変だった?」と心配してくれましたが、別に仕事が嫌で辞めた訳ではないです。
(まぁ、2019年前半は、かなーり大変な目にあってましたが。。。)
富士通の良かった点
挙げればキリがないレベルで色々あります。
私の記事じゃなくても、探せばいくらでも出てくると思うので、特筆すべき点を。
- 望めば受けられる教育制度。
- 業務をこなしていけば、確実に昇給。
- 企業型確定拠出年金制度も、かなり前から取り入れている。(転職先企業にはなかった。。対象者はちゃんと活用した方が良いと思うよ)
- 人格者も多く、話が通じる人間が多い。(特に私の部署はとても居心地が良かった)
- 何かトラブルと組織内総出で手助けする風土があった。
とにかく安定していて、働いていて安心感がありました。
富士通のイマイチだった点
じゃ、不満が何もなかったのか?と言われると、そんなことはないです。
特筆すべきは2つかな。
- 工数管理/発注などの社内システムが糞
強烈なのは、右クリックした時のメニューが「印刷」「印刷プレビュー」。
キーボードのショートカット使えば良いって??(お前、後で体育館裏な?
部分検索が、場所によって非対応とか。
一時保存するために、明らかに入力不要な項目が必須項目となっていたりとか。
エラーメッセージが出ても、自己解決できないとか。
マニュアル読んでも、どこに連絡すれば良いかも謎。
挙げたらキリがない。
致命的なのは、このシステムは、リーダークラス以上という超高単価の人間が使うのだ。
このシステムによって消えた工数がいくらなのか、想像するだけで頭が痛くなる。
どっか別企業のパッケージ入れた方が良いんじゃない? - 裁量労働制の罠
いわゆるタイムカードを押さない立場の人たち。
数々の働き方に対する取り組みで、確実に一般社員の残業時間は減っていると思う。
なのに、22時とか平気で電気が付いているのはなんで?(部署による
PCのログ管理とかしているから、勤務実態は確実に把握しているはずなのに。
22時近くまで働いているメンバは、だいたい裁量労働。
もちろん、裁量労働としての給料はもらっているけど、ちょっと違うと思う。
転職活動について
転職するなら実家から通える距離で!って条件が、かなり厳しかったです。
当然、転職エージェントは地方の案件を扱っている大手しか使えません。
(地元密着系もありますが、現職を続けながらだと、どうしても都心に近くないと不便ですから。。)
また、確実に年収は下がります。
転職エージェントからも
「もう少し都心近くなら、4桁万円の案件もありますよ!」
とか言われました。
偏見かもですが、IT職の転職って、どうしても待遇アップ(主に年収)を目指しての活動が中心になると思われます。
そういった意味では、私の転職活動はかなり特殊なケースかなと。
転職先要望の優先順位が、
- 実家から通える
- 前職の経験が活かせる
- 可能な限り年収維持
でしたので。。。
最大手のエージェントから、この転職先を紹介されたのは、とても運が良かったと感じています。
転職先について
転職先の企業は、IT企業ではなく、製造業です。
主力事業は光ファイバーとか、フレキシブル基板(FPC)とか、電線とか。
職場の敷地の広さは東京ディズニーリゾート程度。
敷地内に変電所があります。(雷が来ると停電注意喚起が流れます)
最寄り駅までシャトルバス(普通の路線バスサイズ)が出てます。
職場周辺には同じような工場がありますが、コンビニとか飲食店は、ほぼありません。
社員の大多数が車通勤です。敷地内に第一駐車場~第三駐車場まであります。(1,000台位は停められる)
社食があります。朝昼夜深夜食べれて、MAX320円です。(深夜は夜勤者向け)
周辺に食事処がないので、ほぼ全員、社食を利用します。
作業服が貸与されました。スーツじゃなくて、作業服で仕事してます。
敷地内は安全靴と帽子の着用必須です。フォークリフトが走り回ってます。
クリーンルームやドライルームもあります。
劇物取り扱い注意もそこら中に貼ってあります。
SEしかやってこなかった私が、なぜ製造系企業に転職できたのでしょう?
(製造系スキルは全然なし。半田は趣味レベル。)
転職後のお仕事について
今の私のお仕事は、IoTクラウドの整備と、組込ソフトの設計~テスト~品質分析を主にやっています。
長々と職場の話をしましたが、結局、製造系の仕事はしてません。
(組込ソフト開発は製造系に入るのか・・・?)
製造系企業も、押し寄せるITの流れは無視できず。(何年前の話だ?というのは言わないで)
自社で作った製品を売るだけではなく、何らかのサービスを作り、それで稼ごうという取り組みが加速してます。(いわゆるサブスクリプション)
その事業立ち上げの求人募集をエージェントから紹介されたのです。
具体的な例だと、これ↓
職場のメンバは、前職に負けず劣らずの人格者だらけ。
話していて尊敬できる上司にも恵まれ、かなり楽しく仕事できている実感があります。
もともと、ドライバー片手に、車のオーディオ弄りや、ジャンクPC漁りからの組み立て、家電の分解して組み立てるなど、楽しめる口なので。
職場に転がっている半田ゴテとか、大きな設備を見てときめいてます。
テストするにも、対象機器を分解してシリアルで繋いだりしたり、日々色々と新たな経験ができていて充実しています。
来年は本格的にサービス立ち上げが主なミッションになるんだろうなー。
楽しみです。
終わりに
結果的に、このタイミングで転職して正解だったかはまだ良くわかりません。
ただ、こうやって自ら変化を求めて転職活動し、それが実ったのは自信になりました。
この後どうなるかはわかりませんが、今いる職場でできる限りの技術を吸収し、更にエンジニアとしてのスキルを向上させていきたいと思います。
Jarファイルからクラスとメソッドの一覧を可視化する
対象のjarファイルを動的にロードして、リフレクション使って、可視化してみる。
前提として、そのjarファイルが動く環境じゃないとダメ。
もし、他のjarが必要なら、パスに通す必要がある。
以下、コード。やっつけ。
テストコードは省略。
package classprint; import java.io.File; import java.io.IOException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.URI; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; /** * jarファイル内のクラスメソッド情報を可視化する * */ public class ClassMethodPrint { /** * メイン * * @param args */ public static void main(String[] args) { ClassMethodPrint classMethodPrint = new ClassMethodPrint(); String filePath = "ここにjarファイルのパスを入れる"; try { List<Class<?>> classes = classMethodPrint.getClasses(filePath); classMethodPrint.printClassMethod(classes); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * jarファイルから、Classオブジェクトのリストを取得する * * @param jarFilePath * jarファイルのパス * @return Classオブジェクトのリスト * @throws IOException * @throws ClassNotFoundException */ public List<Class<?>> getClasses(String jarFilePath) throws IOException, ClassNotFoundException { File file = new File(jarFilePath); JarFile jarFile = new JarFile(file); URI uri = file.toURI(); URLClassLoader classLoader = new URLClassLoader( new URL[] { uri.toURL() }); // 現在のスレッドに、classLoaderを設定 Thread.currentThread().setContextClassLoader(classLoader); List<Class<?>> classes = new ArrayList<Class<?>>(); for (Enumeration<JarEntry> enumeration = jarFile.entries(); enumeration .hasMoreElements();) { JarEntry entry = enumeration.nextElement(); if (entry.getName().endsWith(".class")) { // クラス名を変更 String className = entry.getName().replaceAll("/", "\\.") .replaceAll("\\.class$", ""); // クラスローダーに追加 Class<?> targetClass = classLoader.loadClass(className); classes.add(targetClass); } } return classes; } /** * 標準出力にクラスメソッドを出力する * * @param classes * 対象クラスリスト */ public void printClassMethod(List<Class<?>> classes) { for (Class<?> targetClass : classes) { System.out.println(targetClass.getName()); for (Method method : targetClass.getDeclaredMethods()) { System.out.println("\t" + convertMethodString(method)); } } } private String convertMethodString(Method method) { StringBuffer buffer = new StringBuffer(); // 言語修飾子 buffer.append(Modifier.toString(method.getModifiers()) + " "); // 戻り値 buffer.append(method.getReturnType().getName() + " "); // メソッド名 buffer.append(method.getName()); // メソッド引数(型のみ) buffer.append("("); int methodNumber = method.getParameterTypes().length; for (int i = 0; i < methodNumber; i++) { Class<?> class1 = method.getParameterTypes()[i]; if (i != methodNumber - 1) { buffer.append(class1.getName() + ", "); } else { buffer.append(class1.getName()); } } buffer.append(")"); return buffer.toString(); } }
メソッド出力部分とか、見やすくするために、","とか入れてるけど・・・
ここまでする必要、あるんかな・・・
まぁいいや。
EclipsePluginからLog4jを使う
自分用メモ
※もし参考にする場合は自己責任で。
使い方があっているかは不明。
やりたいことは、
1.jarの中にLog4jのLogger記述あり
2.1のjarをEclipseのpluginプロジェクトで使用
3.Eclipseプロジェクトで呼ぶときに、log4jの設定ファイルを指定
これだけ。
でも混乱したのでメモ
1.のjar構成
ProcessSample.jar
├com
│└sample
│ └ProcessSample.class
├META-INF
│└MANIFEST.MF
├.classpath
└.project
※EclipseのJavaプロジェクトをjar化しただけ。
ProcessSample.classの内容↓
package com.sample; import org.apache.log4j.Logger; public class ProcessSample { static Logger logger = Logger.getLogger(ProcessSample.class.getName()); public void outputMessage(String args) { logger.info(args);//Logger呼び出し } }
2.のEclipsePluginプロジェクト
母体はテンプレートのHelloWorldで。
サンプルアクションのOKボタン押下後に、outputMessageを呼ぶ。
log4jの設定XMLは、pluginsample.resourceなるパッケージでも作って、その中に「sample.xml」とでもして作っておく。
構造をまとめると、
PluginSampleプロジェクト(EclipseのPluginプロジェクト)
├src
│├pluginsample.Activator.java
│├pluginsample.SampleAction.java
│└pluginsample.resource.sample.xml
:(以下省略)
各ファイルの内容
SampleAction.java
(変更したところだけ) public void run(IAction action) { MessageDialog.openInformation( window.getShell(), "PluginSample", "Hello, Eclipse world"); //ここが3.にあたる URL url = getClass().getResource("/pluginsample/resource/sample.xml"); DOMConfigurator.configure(url); new ProcessSample().outputMessage("hogehoge"); }
sample.xml(使い回しw)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="log.txt" /> <param name="MaxFileSize" value="1MB" /> <param name="MaxBackupIndex" value="10" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/mm/dd} %p:%r:%c:%m%n" /> </layout> </appender> <category name="com.sample"> <priority value="info" /> <appender-ref ref="FILE" /> </category> </log4j:configuration>
以上。
ファイルは動かしているEclipseフォルダにできる(EclipseHomeとでも言えばいいのか?)
なぜか、plugin化してEclipseに突っ込んでみたら出来なかった。。。なぜに・・・
まぁそれは今度。
Log4jを使ってみる
あくまで自分メモ
Log4j本体
Apache Download Mirrors
ダウンロード後解凍。
必要なのはその中の「log4j-1.2.16.jar」
Eclipseに以下の構成でプロジェクトを作る
SampleProject
├src
│└com.sample.LogSample.java
│
├lib
│└log4j-1.2.16.jar
│
└resource
└sample.xml
各ファイルの中身
sample.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="FILE" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="log.txt" /> <param name="MaxFileSize" value="1MB" /> <param name="MaxBackupIndex" value="10" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy/mm/dd} %p:%r:%c:%m%n" /> </layout> </appender> <category name="com.sample"> <priority value="info" /> <appender-ref ref="FILE" /> </category> </log4j:configuration>
LogSample.java
package com.sample; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class LogSample { static Logger logger = Logger.getLogger(LogSample.class.getName()); public void method(String arg) { DOMConfigurator.configure("resource/sample.xml"); if (arg.equals("hoge")) { logger.warn("sample!!"); } else { System.out.println("hogeじゃない"); } } }
テストソースは省略。
とりあえず、これで動く。
iPhone4S価格メモ
Softbankから料金プランが発表されましたな。
http://mb.softbank.jp/mb/iphone/event/reserved/price_plan.html
相変わらず、iPhoneの価格が良くわからないのでメモ。
電波が悪い悪いといわれているけど、まぁ実績ありってことでSoftbankを使い続けるかな。。。
※プランは最低とする
・パケットし放題フラット 4410円
・S!ベーシックパック(i) 315円
・ホワイトプラン(i) 980円
●分割の場合(通話代は除く)
| 容量 | 実質負担額 | 月額 |
|---|---|---|
| 16GB | 0/月(24回払い) | 5,705 |
| 32GB | 480/月(24回払い) | 6,185 |
| 64GB | 880/月(24回払い) | 6,585 |
●一括の場合(通話代は除く)
| 容量 | 本体価格 | 月額 |
|---|---|---|
| 16GB | 46,080 | 3,785 |
| 32GB | 57,600 | 3,785 |
| 64GB | 67,200 | 3,785 |
まぁ、結局分割にしろ、一括にしろ、本体価格は変わらないってことでFA。
分割:月に払う額が大。初期投資が無料。
一括:月に払う額が小。初期投資がでかい。
ってくらいに考えるのが吉か。
家電量販店で買う場合、一括にするとポイントが付く場合が多々あり。
その場合は一括にしたほうが安くなる。
