タグ

programmingとJavaに関するstealthinuのブックマーク (55)

  • 新卒1年目が荒れ果てた開発環境に1年間でCIを導入し単体テストを布教した話 - Qiita

    この記事は 「Develop fun!」を体現する Works Human Intelligence Advent Calendar 2020 21日目の記事です。 昨日の記事は@sparklingbabyさんのStream API がもっとわかる記事でした。 あらすじ 私は2019年にWorks Human Intelligence(正確には分社前の会社)に新卒入社し、 19年10月からプロダクト開発部門に配属され、SETエンジニアとしてとある製品のJava開発環境の改善に取り組んでいます。 ざっくりとプロダクト開発を紹介するとこんな感じです。 3万クラス程度ある大規模Java Webアプリケーション 開発環境はEclipseを使用 開発者のOSはWindowsのみ Before 私が開発チームに参加した時点では 部門として新規開発に注力しており、足下の環境改善をやる担当者がおらず、 い

    新卒1年目が荒れ果てた開発環境に1年間でCIを導入し単体テストを布教した話 - Qiita
    stealthinu
    stealthinu 2020/12/22
    これは相当馬力無いとできないわ… みんながやりたがらないような泥水すくうような作業。参考になるがその立場になったとしてもやりたくはない。
  • 西暦1年は閏年か? - プログラマーの脳みそ

    閏年(うるうどし)の話題。 Twitterで見かけた話題で「西暦1年は閏年かどうかぱっとわからん人おる?」という些か煽り気味のツイートを見かけたのだけども、反射的に「閏年じゃないに決まってるじゃん」とぱっと答えてしまわないだろうか。当にそうだろうか? そう単純な話なのだろうか? プログラミングを学んでカレンダーを扱うことを学ぶ際に置閏法についても簡単に触れられることがある。置閏法というのは閏年や閏月(太陰暦では1年が13ヵ月になるケースがあり追加の月を閏月と呼ぶ)をどのようなルールで挿入するかという話で、まさにアルゴリズムであるからプログラミングの話題と相性がいい。 置閏法 現代の西暦の置閏法(ちじゅんほう)は 西暦を 400 で割り切れる年は閏年 上記以外で西暦を 100 で割り切れる年は平年 上記以外で西暦を 4 で割り切れる年は閏年 上記以外は平年 といった手続きで閏年(つまり2月

    西暦1年は閏年か? - プログラマーの脳みそ
    stealthinu
    stealthinu 2020/10/31
    予想していたのを遥かに超えたおもしろい話だった。そしてJavaさんすげえ。1582年10月10日とかはundefになってるのかな?
  • ログレベルが突然変わる謎の事象を追う ~ あるOSSサポートエンジニアの1日 - Qiita

    Logger.getLogger("test").setLevel(Level.OFF); これは、testという名前のロガーのログ出力を抑止することを目的としたコードです。 ここで使っているLoggerはJava標準のjava.util.logging.Loggerで、getLogger()は引数で与えられた名前のロガーインスタンスが既に生成されていればそれを返し、無ければ新たに生成するメソッドです。setLevel()は、そのロガーのログレベルを設定します。引数はLevel.OFFなので、ログ出力を無効にします。 この記事は、上記コードが引き起こした問題についての実話です。 このコードが起こした問題 ある日、私のもとに至急の調査依頼が来ました。その内容は、「Tomcatの再起動をきっかけに、Webアプリケーションがボディの無い正常応答を返すようになった」というものでした。 その後の再起

    ログレベルが突然変わる謎の事象を追う ~ あるOSSサポートエンジニアの1日 - Qiita
    stealthinu
    stealthinu 2018/12/05
    えええ。こんなんわかんねえよ。とにかく一旦ローカルの変数にLoggerをつっこんでからセットしないとGC走ったときにおかしくなると。
  • Interactive Reading Community (Ver.6)

    Interactive Reading Community (Ver.6)
    stealthinu
    stealthinu 2018/03/23
    replaceAllに「$」をエスケープして渡すのはどうするのがいいんだと思ったらちゃんとそれ用のメソッドがあるのね。Matcher.quoteReplacement でエスケープしてやってから渡せば良い。
  • Illegal group reference - とけび開発記録

    自前のサイトで今までにない例外(Illegal group reference)が発生していたので調査していたら、どうも「replaceAll」によるものみたい。 文字列の置換は「replace」と「replaceAll」の二つがあるのだけど、replaceだと最初の一文字だけ置換かと思って、いままではすべて変換は「replaceAll」を使っていた。 でもどうもどちらもすべて変換してくれるようです。 違いは、replaceは正規表現ではなく、replaceAllは正規表現であるということみたいです。 では、なぜ「replaceAll」は上記例外が発生しているか? それは置換後文字列に「$」が入っているためでした。 正規表現では、「(」と「)」で結ばれた文字を、置換後文字列の「$1」「$2」で置き換えるということができるのでそのために「$」を検出したら置き換えをしようとしている模様。 「$

    Illegal group reference - とけび開発記録
    stealthinu
    stealthinu 2018/03/23
    JavaでIllegal group referenceという例外出てなにかと思ったらreplaceAllで置換するとき文字中に「$」が入ってるとエラーが出るのね。置換元語句を「\\$」にエスケープする必要がある。
  • How to Convert RFC-1123 date-time formatter, to local time

    stealthinu
    stealthinu 2018/03/08
    javaでRFC1123形式の日時をパース・作成するにはDateTimeFormatter.RFC_1123_DATE_TIME使えば良いらしい。
  • JSPの基本「暗黙オブジェクト」をさらに極める

    クライアントへの応答を制御する-responseオブジェクト- outオブジェクトがコンテンツ体の出力を制御する役割を担っていたのに対し、responseオブジェクトはむしろコンテンツ体に付随するヘッダ情報やステータスを制御する際に用います。 一見、outもresponseも「クライアントへの出力手段を制御するための手段」を提供するオブジェクトですので区別がつきにくいかもしれませんが、ざっくりと区分するならば、前者は可視的な情報を、後者は不可視の情報を制御するものであると思っていただければよいでしょう。 ヘッダ情報の発行 先のrequest_header.jspでは、クライアントから送信された一連のヘッダ情報を取得してみました。ここでは、サーバ側での処理結果にカスタムのヘッダ情報を付加することで、クライアント側をコントロールしてみることにします。 以下サンプルは、クライアント側の「キャ

    JSPの基本「暗黙オブジェクト」をさらに極める
    stealthinu
    stealthinu 2018/03/08
    JSPでレスポンスヘッダにLast-Modified追加する方法。2018にもなってこんなこと調べてる人僕の他にどんだけいるんだろう…
  • テンプレートエンジンmustacheを使ってみる - CLOVER🍀

    いろんな言語で使うことができるテンプレートエンジン、mustacheというものがあるそうです。 「ロジック・レス・テンプレート」といってるだけあって、構文もシンプルな感じです。 mustache http://mustache.github.com/ manual http://mustache.github.com/mustache.5.html 正確には、いろんな言語で使うことができるというよりはいろんな言語の実装が用意されている、というのが正確な表現なのでしょうが。 今回は、Java版を使ってみます。 mustache.java https://github.com/spullara/mustache.java的な使い方 Mavenなり、Gradleなりを使って、依存関係の定義をしましょう。自分は、Gradleを使用しました。 apply plugin: 'java' vers

    テンプレートエンジンmustacheを使ってみる - CLOVER🍀
    stealthinu
    stealthinu 2018/02/20
    mustacheの構文javaから使ってる例。
  • mustache記法について簡単にまとめてみた

    今回の記事ではmustacheの記法について書いていきます。 もともと社内共有用にドキュメントを日語&適当に端折って簡単にまとめてたのですが、せっかくなのでQiitaにも投稿してみることにしました。 mustache is 何 様々な言語で組み合わせて使えるテンプレートエンジンです。 Loopなどロジック地味たことをする構文が存在しないので、Logic-Less templatesと呼ばれています。 タグの記法が{{hoge}}みたいになっていて、 { が口ひげみたいに見えるためmustache(口ひげ)というらしいです。 早速記法について書いていきます。 ドキュメント 英語のドキュメントがあるよ。日語はないよ(´・ω・`) https://mustache.github.io/mustache.5.html デモ これ書き方あってんの?を簡単に確認したい場合は以下のリンクが便利でした

    mustache記法について簡単にまとめてみた
    stealthinu
    stealthinu 2018/02/20
    mustacheでHTMLエスケープしないためには「{{{」にする。インクルードするには「{{> file}}」
  • タイムゾーン呪いの書 - Qiita

    コメント欄で「Software Design 誌 (2018/12) に寄稿した内容や修正などをこちらの記事にも適用したい」と言ったあと、やるやる詐欺でずっと放置していましたが、三年近く経ってようやく 2021年 7月に大幅に改訂し、同時に Zenn に引っ越すことにしました。 タイムゾーン呪いの書 (知識編) タイムゾーン呪いの書 (実装編) タイムゾーン呪いの書 (Java 編) なにやら長くなりすぎたので三部構成になっています。 この Qiita 版は、しばらく (最低一年は) 改訂前のまま残しておきます。 タイムゾーンの存在はほぼ全ての人が知っていると思います。ソフトウェア・エンジニアなら多くの方が、自分の得意な言語で、タイムゾーンが関わるなにかしらのコードを書いたことがあるでしょう。ですが、日に住んで日仕事をしていると国内時差もなく1 夏時間もない2 日標準時 (Japa

    タイムゾーン呪いの書 - Qiita
    stealthinu
    stealthinu 2018/02/06
    タイムゾーンは奥が深いな… とりあえずTZ考えないといけないような話は結構めんどくさい、ということだけ覚えとく。
  • [速報]Java 9が正式リリース、Javaをモジュール化するProject Jigsawがついに実現。今後のJavaは6カ月ごとタイムベースのアップデートへ

    [速報]Java 9が正式リリース、Javaをモジュール化するProject Jigsawがついに実現。今後のJavaは6カ月ごとタイムベースのアップデートへ 米オラクルは9月21日(日時間9月22日未明)、Javaの最新バージョンとなるJava 9正式版を公開しました。 Java 9 is Out!!!!#JDK9 #Java9 #Javahttps://t.co/VE7BI4KPlK pic.twitter.com/kOdNiLJ1ky — Java (@java) 2017年9月21日 Java 9最大の新機能は「Project Jigsaw」として開発されたJavaのモジュール化機能です。おそらくJavaの開発のなかでももっとも難産なプロジェクトだったといえるでしょう。 難産の末にProject Jigsawがついに実現 Javaをモジュール化して必要な部分だけを使えるようにする

    [速報]Java 9が正式リリース、Javaをモジュール化するProject Jigsawがついに実現。今後のJavaは6カ月ごとタイムベースのアップデートへ
    stealthinu
    stealthinu 2017/09/22
    もうJava9か。なんかJava7以降は流れが早いな。
  • メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −

    This document summarizes a microservices meetup hosted by @mosa_siru. Key points include: 1. @mosa_siru is an engineer at DeNA and CTO of Gunosy. 2. The meetup covered Gunosy's architecture with over 45 GitHub repositories, 30 stacks, 10 Go APIs, and 10 Python batch processes using AWS services like Kinesis, Lambda, SQS and API Gateway. 3. Challenges discussed were managing 30 microservices, ensur

    メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
    stealthinu
    stealthinu 2016/12/14
    「Java100本ノック」みたいなの良いな。自分もJava力ないからこういうので鍛えておかないと。ただJavaはあまり触りたくないからモチベーションが…
  • JVMとGCのしくみ - ITエンジニアとして生きる

    先日職場でJVMの話をしてた。 ちょうどいい機会だからちょっとまとめたいと思う。 JVMの構成まずはJVMの構成について。JVMには3つの領域が存在する。 Permanent領域(非ヒープ領域) New領域(ヒープ領域) Old領域(ヒープ領域) Permanent領域にはJVMにロードされたクラスやメソッドの情報、New領域にはインスタンス化されたオブジェクトの情報、Old領域には寿命の長いオブジェクトの情報が管理される。(「寿命の長い」については後述のScavenge GCを参照。) Permanent領域は非ヒープ領域、New領域とOld領域はヒープ領域となる。 非ヒープ領域には基的にGCは走らず、JVM起動時に静的な情報が管理される。(※) 一方、ヒープ領域はインスタンス化されたオブジェクト情報といった動的な情報が管理され、GC対象となる。 ※ユーザ定義のクラスローダーが存在する

    JVMとGCのしくみ - ITエンジニアとして生きる
    stealthinu
    stealthinu 2016/09/09
    permanent/new/oldの3つに大きく分かれてる。permanentは非ヒープ。newはさらにeden/from/toに分かれてる。インスタンスはedenに生まれてfrom/toの移動を何度か生き残ったらoldへ移動。full gcを減らすにはオブジェクト使いまわさない。
  • PHPのround関数とは一体なんだったのか - hnwの日記

    (7/3 14:05追記)Javaに関する記述について誤認があったので盛大に書き換えました。Java 6、Java 7、Java 8それぞれで実装が変わっていたようです。 (7/13 23:55追記)記事中ではroundを四捨五入と言い切ってしまっています。これは筆者がC99のroundを基準に考えているためですが、言語によっては偶数丸めになっているround関数も珍しくありません。ご注意ください。 PHPのround関数について、ネット上で次のような記述を見つけました。 PHP 四捨五入の計算を間違える唯一の言語として畏れられていましたが、そのバグは治っているかもしれません(治ってないかもしれません) 主要なプログラミング言語8種をぐったり解説 - 鍋あり谷あり 各言語を面白おかしく紹介する内容とはいえ、ずいぶん雑な理解だなーという印象です。ゆるふわな話だけでPHPがdisられ続けるの

    PHPのround関数とは一体なんだったのか - hnwの日記
    stealthinu
    stealthinu 2016/07/04
    なるほど四捨五入も実はむつかしいのだな。こういうのを簡単に扱えるようにするにはそもそも内部10進演算でやるしかないのか。
  • Kotlin 1.0 リリース: JVMとAndroid向けの実用的(Pragmatic)言語 | Post Blog

    See discussions on Reddit and Hacker News Kotlin #とは? KotlinはJVMとAndroid向けのオブジェクト指向かつ関数型な実用的(Pragmatic)言語です。相互運用性、安全性、明瞭性、そしてツールサポートにフォーカスしています。 汎用言語であるKotlinJavaが動作する場所であればサーバサイドアプリケーション、モバイルアプリケーション(Android)、デスクトップアプリケーションを含むどこでも動作します。以下のメジャーなツールやサービスに対応しています: IntelliJ IDEA、Android Studio、Eclipse Maven、Gradle、Ant Spring Boot (KotlinサポートがKotlin 1.0と同時にリリースされました!) GitHubSlackMinecraft Kotlinの焦点

    Kotlin 1.0 リリース: JVMとAndroid向けの実用的(Pragmatic)言語 | Post Blog
    stealthinu
    stealthinu 2016/03/01
    Kotlinが1.0に。間違いなくIntelliJのサポートが厚いだろからそういう点が安心できる。あと名前がかわいい。
  • もうサムネイルで泣かないための ImageMagick ノウハウ集 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちわ、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。好きなみかんは紅マドンナです。 今回は、サイボウズのサムネイル事情について記事を書きたいと思います。サイボウズに限らず通常の Web アプリケーションでもサムネイル作成はよくあると思いますが、ハマりどころが多く涙しているサムネイリストも多いかと思います。これからの時代を生きるサムネイリストが快適なサムネイルライフを送れるよう、知見を共有したいと思います。 弊社では画像変換ツールに ImageMagick を用いており、従って知見は ImageMagick 固有のものがほとんどです。 画像比較は人間の眼で行うべし サムネイル周りに何か修正を入れたら修正前後の画像を比較しましょう。機械によるバイト列の比較では画像の良し悪しがわかりません。頼れるのは人間の眼だけです。肉眼で確認しましょう。 比較できるツールを作ると良

    もうサムネイルで泣かないための ImageMagick ノウハウ集 - Cybozu Inside Out | サイボウズエンジニアのブログ
    stealthinu
    stealthinu 2016/01/06
    ImageMagickでCMYK画像の取り扱いとか聞くだけでゲロがでるわ…
  • GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - brettwooldridge/HikariCP: 光 HikariCP・A solid, high-performance, JDBC connection pool at last.
    stealthinu
    stealthinu 2016/01/04
    HikariCPというJDBCのコネクションプールライブラリ。先のGMOのブログエントリーから。
  • システムエンジニアのカレンダー | Advent Calendar 2015 - Qiita

    About reserved postingIf you register a secret article by the day before the same day, it will be automatically published around 7:00 on the same day. About posting periodOnly articles submitted after November 1 of the year can be registered. (Secret articles can be registered anytime articles are posted.)

    システムエンジニアのカレンダー | Advent Calendar 2015 - Qiita
    stealthinu
    stealthinu 2015/12/08
    とても良い話が並んでる。これも正座して続きを待ちたいアドベントカレンダーだわ。
  • Shift_JIS文化からUTF-8への移行ガイド - Qiita

    まだまだ場所によってはShift_JIS文化は根強く、2015年が終わろうとしている現在でも、「ようやく我が社もUnicodeでシステムを作ることを考えるっ!」なんてところは多くあるかと思います。 そんな現場で、これまでJavaでShift_JISでシステム構築してきたSIer向けのUTF-8移行ガイドです。 文字長のチェック 文字長の入力チェックはShift_JISの世界では、半角文字は1バイト、全角文字は2バイトなので、以下のようなチェックロジックになっていたかと思います。 if (inputValue.getBytes("Windows-31j").length > 20) { errors.add("hoge", new ActionMessage("errors.maxlength", "ほげ", 10)); } UTF-8ではそれらの文字は、1バイト~3バイトで表されるので、バ

    Shift_JIS文化からUTF-8への移行ガイド - Qiita
    stealthinu
    stealthinu 2015/12/08
    文字数カウントのことやあとShift_JISの許容文字種のチェック正規表現!とかすごく参考になった。
  • Javaのログ出力: 道具と考え方

    Concepts and tools of logging in Java. Javaにおけるログ出力の考え方と道具について説明. CC Attribution Licenseの元に公開します.Read less

    Javaのログ出力: 道具と考え方
    stealthinu
    stealthinu 2015/10/15
    javaのログ出力現在はSLF4J+Logbackがデファクトっぽい。log4jにしてた。このへん今はなにがおすすめなのかわからんかったのでとても参考になった。