株式会社Abby社員募集中(Go/Unity)

株式会社Abbyでは技術者を募集しています。


今回募集している技術はGoとUnityの技術者です。

Goの技術者はサーバーサイドの技術者となります。Go言語だけではなくRDBの基本的な知識も必要です。HTMLやJSの知識もあるとなおよいです。

Unityの技術者はUnityを触ったことがある、指示されて末端で作業をしただけだけという人ではなく、自分なりのベストプラクティスがある、スマホなどマルチプラットフォームでのノウハウがある、など開発面においてチームを引っ張っていける人を募集しています。



https://www.abby.co.jp/

興味がある方は弊社ホームページの採用を参照、または自分宛てにTwitterのDM(@shinsan68k)などでもかまわないです。
もちろん自分以外の弊社社員と顔見知りでしたらそちらからコンタクトをとって構いません。

ご応募お待ちしております。

NetBeans 8.2で日本語を使えるようにする

NetBeansは8.0まではエディタは特に問題はありませんでした。

NetBeans 8.1にてエディタがおかしくなります。一応何とか我慢できるレベルのバグではありました。この挙動は6.x系だったか不安定なバージョンで一度やらかしたやつと同じです。一瞬どっかにスクロールしてしまう系ですね。

NetBeans 8.2ではなんと改善どころか悪化しました。もはや入力に支障が出るレベルです。


一か月半ほど利用してみましたが、以下の対応で問題は解決しました。問題は特に出ていません。jarを置き換えるだけのものです。

http://junichi11.com/?p=3620

非常に助かってます。ありがとうございます!


アップデート系などが動いていると恐らくNetBeansのインストールしたフォルダではなくAppData/Roamingなどユーザーのフォルダに各種jarがおかれていてそちらを利用しているので置き換える必要があります。

また、ここは隠しフォルダとなっていて隠しフォルダを表示する設定になっていても普通に検索して該当ファイルが見つかりませんので、意識して探しに行ってください。

株式会社Abby社員募集中(Go/Java)

久々のblogです。久々の募集エントリです。
できるだけわかりやすいところを書いていきます。

Abbyではプログラマを若干名募集しています

募集はプログラマです。若干名です。
また、比較的急募です。

会社のお話

勤務場所は東京本社、最寄り駅は中目黒駅というところです。
今住んでいる場所からだと通勤時間がかかるなどの場合、引っ越し代の援助もあるかもしれません。(応相談)


会社概要などはこちらを見ていただければと思います。
株式会社Abby


上のリンクを見ていただけるとわかりますが、うちは業務系とゲーム系の開発の2つを行っています。

ゲーム系は最近ですとクレヨンしんちゃんという漫画/アニメのゲームの開発のお手伝いをさせていただきました。その前はくまのがっこう、ムーミンといったものも開発させていただいております。ターゲットはスマートフォンタブレットといったものです。


業務系はいろいろと多岐にわたると思いますが、こちらもメインはタブレット向けの開発をしていたりします。


面白いことにどちらも技術的には、サーバー側はGo言語/Javascript/Html、クライアントはJava言語となっており、わりと統一されています。


募集スキル

というわけで、今即戦力としてほしいのはGoまたはJavaが書ける人です。

もちろん、どちらが得意でもう片方もある程度かけるなら完璧です。

どちらか片方が得意な場合即採用かと思います。特にGoを書ける人の絶対数は少ないかと思いますのでそちらが得意だと採用される確率はかなり高いかもしれません(個人的な感想です)。

環境について

開発環境は自由です。

マシンはMacLinuxWindowsなど好きに決めることができます。一番パフォーマンスが出せる環境を選択してください。

統合開発環境にしても自由です。例えばJava書いてる人でもNetBeansEclipse、IDEA、AndroidStudio、自作IDEの人など自由です。
コードが出来上がれば何でもよいです。使い慣れたものでOKです。

技術書もほしいものがあればすぐ買います。


そのほかの環境としては机はかなり広いかと思います。椅子はいわゆるアーロンチェアです。

服装は私服で結構です。打ち合わせで外に出るのはほとんどぼ社長が行っており、ほかの社員はスーツを着る必要はまずありません。
自分もこの数年スーツを着たことはほぼないです。コードを書くのだけに集中してもらえればと思います。

基本出社が必要ではありますが、子供の世話をしないといけないときや台風で出社が困難、少し体調悪いかもといった場合など自宅で作業してもらって結構です。


腹筋マシーンやけんすい器具などもなぜかあります。

そのほか

うちの社長とCTOも同様の募集エントリ書いてますのでこちらも見てもらえればと思います。

社員募集

株式会社Abby エビイ で働くチャンス到来の話



上記内容を見て気になった方は、Abbyのホームページ上から申し込んでもよいですし、twitterで自分宛てにDMしていただいてもかまいません。twitter経由で入った方も何人かいる気がしますのでまずは会社見学から気にせずどうぞ。

libGDXの基礎20 シザーテストを使う

http://qiita.com/shinsan68k/items/ef84cf8590134c8d7ccf

今回はシザーテストを書きました。

特別扱いは難しくないのですが、SpriteBatchなどバッチ描画している場合(ほとんどの場合デフォルトではそうです)、バッチのフラッシュなどを意識する必要があるのだけは注意が必要です。

MD ファンタシースター2 クリア

はぁ、クリアした。ひたすら苦行の連続。こんなひどいRPGは89年程度だとあまりないはずなんだけどなぁ。

https://shinsan.s3.amazonaws.com/diary/2017/0114-1.png

概要

メガドライブ初期のRPG。本体が出てから発売まで早いこと、雑誌でも大きく取り上げられていたため知っている人も多いと思う。

自分も当時やったがあまりの難易度でクリアできなかった。

中断機能のあるレトロフリークでプレイ。わからないところは攻略サイトなども見た。

グラフィック

ファミコンPCエンジンとの差別化として2重スクロールを取り入れてある。
問題はそれが効果的にできているところはなく、ひたすら見づらいだけのところがほとんどだということ。
これなら多重スクロールはやらないほうがよかった。

戦闘は敵キャラがアニメ、攻撃時にもアニメ。味方も攻撃時にアニメ。はじめてスライサーを見た時はかっこいいなと思ったものだ。
ただ、敵の攻撃で点滅したりするのはちょっとうざい。敵の攻撃アニメがあるというのもテンポが悪い。

BGM

ドラムが効いていて悪くはない。このゲームで唯一評価できる点だろうか。
とはいえ印象に残る曲がそれほど多いわけでもなく。
音源が強力だからといえばそれまでではあるが。

ストーリー

うーん。当時からテキストが寒いと思っていたけど、改めてやり直したらもっとひどかった。
お話そのものは面白くできそうな感じはあるのだが、全く生かせてない。

メガドラが出たてとはいえ、このころはドラクエはすでに3もでている。FFもあのドラマチックな2が出ている。あまりにもおそまつ。

UI

まず、パーティーのHPなどを確認するだけでもメニューをたどらないとダメ。これはきつい。
ドラクエがメニューを出すといきなりステータスを表示する、ファイナルファンタジーはキャンプ画面を出すと全員のステータスを表示する、こういった基本ができているのに、89年にもなってこのありさま。

UIのひどさはキャンプメニューだけではない。戦闘がひどい。
基本オート戦闘。テクニックや消費するアイテムの利用時はその行動が終わった後オート攻撃に切り替わる。
それ以外の時はひたすら同じコマンドを繰り返す。

攻撃メインで進むようなゲームバランスならまぁそれもありかもしれないが、基本1ターン目にパーティー全体の抵抗力を上げるスキルがほぼ必須というバランスのゲームではこれがあまりにも面倒。また、テクニックも全体的に消費が多く、気軽に使えない。そのためHP回復も自分が回復する装備アイテムを使うのが9割。自然とこまめにコマンドを入力するタイプの戦闘になるわけで、同じコマンドを繰り返す前提のシステムとの相性が非常に悪かった。

表示される攻撃力が何の役にも立たないというのもどうだろうか。両手剣は右手と左手に装備されているように見えるため、実際の攻撃力は半分くらい。そして武器の攻撃力以外のパラメータは誤差。

メガドラが出たてとはいえ、このころはドラクエはすでに1年近く前に3がでている。低スペックなファミコンで。あまりにもおそまつ。

ゲームバランス

攻略サイトも見て、中断機能も活用してやっとクリア。
エンカウント率は特別高くない。この時代だとこんなものか。

ただ、ダンジョンの難易度はかなりひどい。最初のダンジョンから異様に難易度高く、とにかくクリアさせないように、プレイ時間を長くさせるようにという作りだ。
ラストダンジョンが一番簡単というあたりもやばさが伝わるだろうか。ラスダン程度にしてくれればよかったのに。

とにかくこのダンジョンの改良だけで大きく評価が良くなるはずなのだが。


戦闘に関してもバランスが悪いといわれているが、それほどでもなかった。ネクロマンサーとかのほうがきついことはきつい。
ただ、上で書いたようにUIがひどいので何をするにしても面倒で、戦闘が嫌になる。

重火器系の武器が守備力完全無視、攻撃力に依存しないという仕組み。
敵の守備力も最後まで極端に上下するため、重火器系がほんと役に立つなぁと思うのは終盤近くなってから。序盤はライフルとかメインのはずのキャラがナイフ握るのが一番強いとか。


単体攻撃テクニックを一番使いこなすのが単体攻撃特化の両手剣使いの主人公という調整もどうなのだろう。中盤で120ダメージをたたき出すテクニックを覚えるが、これの数字は実はかなり大きく、最後まで使い物になる威力。ただし物理攻撃同様ミスはするので使いにくい。そもそもバランスのとり方としてTP消費を多くして連発できないようにさせたという感じの調整になっているのもおかしい。魔法が得意そうなキャラよりダメージを与えるのが得意というのも少し変。

ドラクエ3でたとえるならば戦士がメラゾーマダーマ神殿にたどり着いたころにおぼえる、そんなバランス。

評価

いつもの5段階評価。おすすめかかどうかは総合評価を見てもらえれば。

  評価
システム ★★−−−
シナリオ ★★−−−
サウンド ★★★★−
グラフィック ★★★−−
総合評価 ★★−−−

あと、攻略サイトにある情報はうのみにしないこと。
間違ってるところがぽつぽつある。

防御系スキルの効果は重ねがけをしてもほぼ効果はないはず。シフタの攻撃力もさほど上がらない。

メガドライブはこんなのを持ち上げないといけないくらい、序盤は本当にダメだったというのを思い出させる。あきらかによかったのはセガのソフトじゃない大魔界村などくらい。本当はPCエンジンファミコンを蹴散らすくらいの勢いが必要だったが、それができずにファミコンが好調なままスーパーファミコン登場。世の中スーパーファミコンを中心に回り始めたところでやっと少しよくなっていった感じだった。

ウルティマ恐怖のエクソダスのほうが話やバランスは10倍くらい良いのだが、どうも世の中そう思われてなさそう。

超高速に初めるJAX-RS + Guice

JAX-RSの起動は前回さくっと終わらせた。
http://d.hatena.ne.jp/shin/20161204/p1

あとはロジック回り。今回はGoogle Guiceを使う。CDIを使うならWeldSEは使わずpayara microなどEEコンテナをちゃんと立ち上げたほうが良い。

Guiceとのコネクタは用意されているのでそれを使おう。

依存ライブラリの追加

前回の状態からさらに依存関係に以下の1行を追加する

compile "org.glassfish.hk2:guice-bridge:2.5+"

おわり。JAX-RSの依存も前回の1行だけだったのであわせて2行だけ。

やること

前回作ったCalcというリソースクラスにFormatLogicという文字列を返すクラスのシングルトンのインスタンスを注入する。
そのクラスを使い、結果を返す。

プログラム

今回もソースコード一つ。

import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import java.net.URI;
import java.util.Scanner;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Feature;
import javax.ws.rs.core.FeatureContext;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.jersey.ServiceLocatorProvider;
import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;
import org.jvnet.hk2.guice.bridge.api.GuiceBridge;
import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge;

public class Main {

    //--------------------------------------------------------------------------
    //サーバー起動
    //--------------------------------------------------------------------------
    public static void main(String[] args) {
        
        URI uri = UriBuilder.fromUri("http://localhost/").port(8080).build();
        ResourceConfig config = new ResourceConfig(GuiceFeature.class, Calc.class);
        JdkHttpServerFactory.createHttpServer(uri, config);

        //Enter押すまで待つ
        new Scanner(System.in).nextLine();

        System.exit(0);
    }
    
    //--------------------------------------------------------------------------
    //JAX-RSリソースクラス
    //--------------------------------------------------------------------------
    @Path("calc")
    public static class Calc {
        @Inject
        FormatLogic logic;
        

        //http://localhost:8080/calc?a=1&b=2
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String add(@QueryParam("a") int a, @QueryParam("b") int b) {
//            System.out.println("calc:"+this);
            return logic.format(a, b);
        }
        
    }
    
    //--------------------------------------------------------------------------
    //GUICEのセットアップ
    //--------------------------------------------------------------------------
    public static class GuiceFeature implements Feature {
        @Override
        public boolean configure(FeatureContext context) {
            ServiceLocator locator = ServiceLocatorProvider.getServiceLocator(context);
            GuiceBridge.getGuiceBridge().initializeGuiceBridge(locator);
            final Injector injector = Guice.createInjector(new AbstractModule() {
                @Override
                protected void configure() {
                }
            });
            GuiceIntoHK2Bridge guiceBridge = locator.getService(GuiceIntoHK2Bridge.class);
            guiceBridge.bridgeGuiceInjector(injector);
            return true;
        }
    }
    
    //--------------------------------------------------------------------------
    //注入される
    //--------------------------------------------------------------------------
    @Singleton
    public static class FormatLogic{
        public String format(int a, int b){
//            System.out.println("logic:"+this);
            return String.format("%d + %d = %d", a, b, a+b);
        }
    }

}

実行

http://localhost:8080/calc?a=1&b=2

というURLをブラウザで表示すると

1 + 2 = 3

と表示される。

超高速に初めるJAX-RS

ソースコードは一つだけ。設定ファイルは1行追加するだけ。それですぐにJAX-RSを動かせる。

JAX-RSはわからなくても大丈夫。JavaSEなのですぐ確認できる。

GradleまたはMaven環境さえあればよいのでNetBeansに限らないけど一応NetBeansで説明していく。

Gradleまたはmavenの環境を用意する

NetBeansであればGradleはプラグインを入れる必要がある。今回はGradleでやってみる。

メニューの「ツール」−「プラグイン」から入れる。

プロジェクトの新規作成

メニューから「ファイル」−「新規プロジェクト」を選ぶ。
カテゴリで「Gradle」を選びプロジェクトは「Single Gradle Project」を選ぶ。

依存ライブラリの追加

プロジェクトツリーからBuilde Scripts/Project/build.gradleを開く。

以下の部分があるので

dependencies {
    // TODO: Add dependencies here ...
    // You can read more about how to add dependency here:
    //   http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:how_to_declare_your_dependencies
    testCompile group: 'junit', name: 'junit', version: '4.10'
}

dependencies の中に

compile "org.glassfish.jersey.containers:jersey-container-jdk-http:2.24.1"

の1行を加える。

プロジェクトのリロード

プロジェクトツリーのルートアイコンを右クリックして「Reload Project」を選ぶ。

メインクラスを作る

import java.net.URI;
import java.util.Scanner;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

import org.glassfish.jersey.jdkhttp.JdkHttpServerFactory;
import org.glassfish.jersey.server.ResourceConfig;

public class Main {

    //サーバー起動
    public static void main(String[] args) {
        
        URI uri = UriBuilder.fromUri("http://localhost/").port(8080).build();
        ResourceConfig config = new ResourceConfig(Calc.class);
        JdkHttpServerFactory.createHttpServer(uri, config);

        //Enter押すまで待つ
        new Scanner(System.in).nextLine();

        System.exit(0);
    }

    //JAX-RSのコードをここに書く
    @Path("calc")
    public static class Calc {

        //http://localhost:8080/calc?a=1&b=2
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public int add(@QueryParam("a") int a, @QueryParam("b") int b) {
            return a + b;
        }
    }
}

サーバー起動

プロジェクトを実行する。F6でよい。

ブラウザ起動

上記のコードのコメント部分

        //http://localhost:8080/calc?a=1&b=2

ここをCTRL+クリックする。

ブラウザが起動して結果が表示される。

NetBeansでは文字列やコメントでURLぽいものがあればブラウザで開けるのでコメントで描いておくと楽。