diff --git a/bdb/src/main/java/com/lubarov/daniel/bdb/RawDatabase.java b/bdb/src/main/java/com/lubarov/daniel/bdb/RawDatabase.java index 429a6c6..673023d 100644 --- a/bdb/src/main/java/com/lubarov/daniel/bdb/RawDatabase.java +++ b/bdb/src/main/java/com/lubarov/daniel/bdb/RawDatabase.java @@ -5,7 +5,14 @@ import com.lubarov.daniel.data.stack.DynamicArray; import com.lubarov.daniel.data.stack.MutableStack; import com.lubarov.daniel.data.util.Check; -import com.sleepycat.je.*; +import com.sleepycat.je.Cursor; +import com.sleepycat.je.CursorConfig; +import com.sleepycat.je.Database; +import com.sleepycat.je.DatabaseConfig; +import com.sleepycat.je.DatabaseEntry; +import com.sleepycat.je.Environment; +import com.sleepycat.je.EnvironmentConfig; +import com.sleepycat.je.OperationStatus; import java.io.File; @@ -36,7 +43,7 @@ public Option tryGet(byte[] key) { OperationStatus status = db.get(null, new DatabaseEntry(key), result, null); return status == OperationStatus.SUCCESS ? Option.some(result.getData()) - : Option.none(); + : Option.none(); } public void put(byte[] key, byte[] value) { diff --git a/blog/src/main/java/com/lubarov/daniel/blog/AddCommentHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/AddCommentHandler.java index 0b8eedd..b3b2b91 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/AddCommentHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/AddCommentHandler.java @@ -29,7 +29,7 @@ public HttpResponse handle(HttpRequest request) { String authorEmail = request.getUrlencodedPostData().getValues("author_email") .tryGetOnlyElement().getOrThrow(); Option optAuthorEmail = authorEmail.isEmpty() - ? Option.none() + ? Option.none() : Option.some(authorEmail); String content = request.getUrlencodedPostData().getValues("content") .tryGetOnlyElement().getOrThrow(); diff --git a/blog/src/main/java/com/lubarov/daniel/blog/DeletePostHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/DeletePostHandler.java index 16dd2e3..2ebbc88 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/DeletePostHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/DeletePostHandler.java @@ -29,7 +29,7 @@ public HttpResponse handle(HttpRequest request) { .addEscapedText("You are not allowed to delete posts.") .build(); Element html = Layout.createDocument(request, - Option.some("Forbidden"), Option.none(), content); + Option.some("Forbidden"), Option.none(), content); return HttpResponseFactory.xhtmlResponse(HttpStatus.FORBIDDEN, html); } @@ -56,7 +56,7 @@ private HttpResponse handleGet(HttpRequest request) { .build()) .build(); Element document = Layout.createDocument(request, - Option.some("Delete Post"), Option.none(), form); + Option.some("Delete Post"), Option.none(), form); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/EditPostHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/EditPostHandler.java index 537bb43..6a409e3 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/EditPostHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/EditPostHandler.java @@ -30,7 +30,7 @@ public HttpResponse handle(HttpRequest request) { .addEscapedText("You are not allowed to edit posts.") .build(); Element html = Layout.createDocument(request, - Option.some("Forbidden"), Option.none(), content); + Option.some("Forbidden"), Option.none(), content); return HttpResponseFactory.xhtmlResponse(HttpStatus.FORBIDDEN, html); } @@ -71,7 +71,7 @@ private HttpResponse handleGet(HttpRequest request) { .build()) .build(); Element document = Layout.createDocument(request, - Option.some("Edit Post"), Option.none(), form); + Option.some("Edit Post"), Option.none(), form); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/HomeHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/HomeHandler.java index 933aa87..6f9c8a9 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/HomeHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/HomeHandler.java @@ -9,6 +9,8 @@ import com.lubarov.daniel.data.order.Relation; import com.lubarov.daniel.data.sequence.Sequence; import com.lubarov.daniel.data.unit.Instant; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; import com.lubarov.daniel.web.html.Element; import com.lubarov.daniel.web.html.ParagraphBuilder; import com.lubarov.daniel.web.html.Tag; @@ -23,7 +25,7 @@ final class HomeHandler implements PartialHandler { private static final String INTRO = "" + "I'm an engineer at Google, previously at Square. " - + "Some of my interests are graphics, storage systems, language design and compilers. " + + "Some of my interests are graphics, languages/compilers, cryptocurrencies and distributed systems in general. " + "Feel free to email me at daniel@lubarov.com."; private HomeHandler() {} @@ -49,10 +51,20 @@ public Relation compare(Post a, Post b) { listBuilder.addChild(new Element(Tag.LI, summaryLink)); } - Element intro = new ParagraphBuilder().setId("intro").addRawText(INTRO).build(); + Element intro = new Element.Builder(Tag.DIV).setEscapedAttribtue(Attribute.ID, "intro") + .addChild(new ParagraphBuilder() + .addEscapedText("I'm an engineer at Google, previously at Square. " + + "Some of my interests are graphics, languages/compilers, cryptocurrencies and distributed systems in general.") + .build()) + .addChild(new Element.Builder(Tag.UL) + .addChild(new Element(Tag.LI, new AnchorBuilder().setHref("mailto:daniel@lubarov.com").addEscapedText("daniel@lubarov.com").build())) + .addChild(new Element(Tag.LI, new AnchorBuilder().setHref("https://github.com/dlubarov").addEscapedText("Github").build())) + .addChild(new Element(Tag.LI, new AnchorBuilder().setHref("http://daniel.lubarov.com/resume/online.html").addEscapedText("Resume").build())) + .build()) + .build(); Element document = Layout.createDocument(request, - Option.none(), Option.none(), + Option.none(), Option.none(), intro, listBuilder.build()); return Option.some(HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document)); } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/Layout.java b/blog/src/main/java/com/lubarov/daniel/blog/Layout.java index c22e053..cc5aa5f 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/Layout.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/Layout.java @@ -3,7 +3,17 @@ import com.lubarov.daniel.data.collection.Collection; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.unit.Instant; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.HtmlUtils; +import com.lubarov.daniel.web.html.JavaScriptUtils; +import com.lubarov.daniel.web.html.Node; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.StylesheetUtils; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TextNode; +import com.lubarov.daniel.web.html.TitleBuilder; import com.lubarov.daniel.web.http.DateUtils; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.util.UserAgentUtils; diff --git a/blog/src/main/java/com/lubarov/daniel/blog/Notifications.java b/blog/src/main/java/com/lubarov/daniel/blog/Notifications.java index 87236a0..283206c 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/Notifications.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/Notifications.java @@ -22,7 +22,7 @@ public static Collection getAndClearMessages(HttpRequest request) { } private static SinglyLinkedList getMessages(HttpRequest request) { - return messageData.tryGet(request).getOrDefault(SinglyLinkedList.create()); + return messageData.tryGet(request).getOrDefault(SinglyLinkedList.create()); } private static void clearMessages(HttpRequest request) { diff --git a/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminDashboardHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminDashboardHandler.java index fe51bbd..a5e0c23 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminDashboardHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminDashboardHandler.java @@ -42,7 +42,7 @@ public Option tryHandle(HttpRequest request) { Element document = Layout.createDocument( request, Option.some("Admin Control Panel"), - Option.none(), whatsUp, linkList); + Option.none(), whatsUp, linkList); return Option.some(HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document)); } } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminLoginHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminLoginHandler.java index dffe2ed..faf133a 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminLoginHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminLoginHandler.java @@ -5,7 +5,11 @@ import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.unit.Duration; import com.lubarov.daniel.data.unit.Instant; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.InputBuilder; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; @@ -43,13 +47,13 @@ private HttpResponse handlePost(HttpRequest request) { .build(); CookieManager.setCooke(cookie); Element document = Layout.createDocument(request, - Option.some("Success"), Option.none(), + Option.some("Success"), Option.none(), new ParagraphBuilder().addEscapedText("You have been signed in.").build() ); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } else { Element document = Layout.createDocument(request, - Option.some("Oops"), Option.none(), + Option.some("Oops"), Option.none(), new ParagraphBuilder().addEscapedText("Wrong password.").build() ); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); @@ -58,7 +62,7 @@ private HttpResponse handlePost(HttpRequest request) { private HttpResponse handleGet(HttpRequest request) { Element document = Layout.createDocument(request, - Option.some("Admin Login"), Option.none(), getForm()); + Option.some("Admin Login"), Option.none(), getForm()); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminSetupHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminSetupHandler.java index 56150e8..0eb1104 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminSetupHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/admin/AdminSetupHandler.java @@ -5,7 +5,11 @@ import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.unit.Instant; import com.lubarov.daniel.data.util.Check; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.Node; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; @@ -38,7 +42,7 @@ private HttpResponse handlePost(HttpRequest request) { .tryGetOnlyElement().getOrThrow("Expected exactly one password in post data."); MiscStorage.setAdminPassword(adminPassword); Element document = Layout.createDocument(request, - Option.some("Success"), Option.none(), + Option.some("Success"), Option.none(), new ParagraphBuilder().addEscapedText("Password has been set.").build()); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } @@ -62,7 +66,7 @@ private HttpResponse handleGet(HttpRequest request) { .build(); Element document = Layout.createDocument(request, - Option.some("Admin Setup"), Option.none(), content); + Option.some("Admin Setup"), Option.none(), content); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/admin/CreatePostHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/admin/CreatePostHandler.java index 806a88d..93e988d 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/admin/CreatePostHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/admin/CreatePostHandler.java @@ -65,7 +65,7 @@ private static HttpResponse handleGet(HttpRequest request) { .build(); Element document = Layout.createDocument(request, - Option.some("Create a Post"), Option.none(), form); + Option.some("Create a Post"), Option.none(), form); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, document); } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/admin/ReviewCommentsHandler.java b/blog/src/main/java/com/lubarov/daniel/blog/admin/ReviewCommentsHandler.java index 0af6ffe..aad079d 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/admin/ReviewCommentsHandler.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/admin/ReviewCommentsHandler.java @@ -12,7 +12,11 @@ import com.lubarov.daniel.data.collection.Collection; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.unit.Instant; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.Node; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; @@ -48,7 +52,7 @@ private HttpResponse handleGet(HttpRequest request) { Post post = PostStorage.getPostByUuid(comment.getPostUuid()).getOrThrow(); Element form = commentReviewForm(comment, post); Element html = Layout.createDocument(request, - Option.some("Review Comments"), Option.none(), form); + Option.some("Review Comments"), Option.none(), form); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, html); } @@ -77,7 +81,7 @@ private static HttpResponse nothingToReviewResponse(HttpRequest request) { .addEscapedText("There are no comments needing review.") .build(); Element html = Layout.createDocument(request, - Option.some("Review Comments"), Option.none(), content); + Option.some("Review Comments"), Option.none(), content); return HttpResponseFactory.xhtmlResponse(HttpStatus.OK, html); } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentFormatter.java b/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentFormatter.java index 4a54b24..a0d1117 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentFormatter.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentFormatter.java @@ -2,7 +2,13 @@ import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.util.DigestUtils; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.EscapeUtils; +import com.lubarov.daniel.web.html.HtmlUtils; +import com.lubarov.daniel.web.html.Node; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; import com.lubarov.daniel.web.http.DateUtils; import java.nio.charset.Charset; diff --git a/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentSerializer.java b/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentSerializer.java index 16a2115..be487a5 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentSerializer.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentSerializer.java @@ -1,7 +1,14 @@ package com.lubarov.daniel.blog.comment; import com.lubarov.daniel.data.option.Option; -import com.lubarov.daniel.data.serialization.*; +import com.lubarov.daniel.data.serialization.AbstractSerializer; +import com.lubarov.daniel.data.serialization.BooleanSerializer; +import com.lubarov.daniel.data.serialization.ByteSink; +import com.lubarov.daniel.data.serialization.ByteSource; +import com.lubarov.daniel.data.serialization.InstantSerializer; +import com.lubarov.daniel.data.serialization.OptionSerializer; +import com.lubarov.daniel.data.serialization.Serializer; +import com.lubarov.daniel.data.serialization.StringSerializer; public final class CommentSerializer extends AbstractSerializer { public static final CommentSerializer singleton = new CommentSerializer(); diff --git a/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentStorage.java b/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentStorage.java index f32fff5..23e5444 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentStorage.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/comment/CommentStorage.java @@ -56,6 +56,6 @@ public static synchronized Collection getCommentsByPost(String postUuid } private static synchronized Collection getCommentUuidsByPost(String postUuid) { - return indexByPostUuid.get(postUuid).getOrDefault(ImmutableArray.create()); + return indexByPostUuid.get(postUuid).getOrDefault(ImmutableArray.create()); } } diff --git a/blog/src/main/java/com/lubarov/daniel/blog/post/PostFormatter.java b/blog/src/main/java/com/lubarov/daniel/blog/post/PostFormatter.java index 9697369..b5604e7 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/post/PostFormatter.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/post/PostFormatter.java @@ -5,7 +5,11 @@ import com.lubarov.daniel.blog.comment.CommentFormatter; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.sequence.Sequence; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.HtmlUtils; +import com.lubarov.daniel.web.html.Tag; public final class PostFormatter { private PostFormatter() {} diff --git a/blog/src/main/java/com/lubarov/daniel/blog/post/PostSerializer.java b/blog/src/main/java/com/lubarov/daniel/blog/post/PostSerializer.java index ed37e83..d49a879 100644 --- a/blog/src/main/java/com/lubarov/daniel/blog/post/PostSerializer.java +++ b/blog/src/main/java/com/lubarov/daniel/blog/post/PostSerializer.java @@ -1,6 +1,11 @@ package com.lubarov.daniel.blog.post; -import com.lubarov.daniel.data.serialization.*; +import com.lubarov.daniel.data.serialization.AbstractSerializer; +import com.lubarov.daniel.data.serialization.BooleanSerializer; +import com.lubarov.daniel.data.serialization.ByteSink; +import com.lubarov.daniel.data.serialization.ByteSource; +import com.lubarov.daniel.data.serialization.InstantSerializer; +import com.lubarov.daniel.data.serialization.StringSerializer; public final class PostSerializer extends AbstractSerializer { public static final PostSerializer singleton = new PostSerializer(); diff --git a/blog/src/main/resources/resume/online.html b/blog/src/main/resources/resume/online.html index 398a29c..c0563a7 100644 --- a/blog/src/main/resources/resume/online.html +++ b/blog/src/main/resources/resume/online.html @@ -37,14 +37,18 @@

Experience

Engineer at Google (2016—present)

-

I work on the wearables team. Our projects are secret. ;-)

+
    +
  • Designed and implemented several prototypes for Google Glass.
  • +
  • Designed and implemented the real-time translation feature of Google Pixel Buds.
  • +
  • Responsible for Android emulator systems which execute millions of tests per day.
  • +

Engineer at Square (2012—present)

  • Developed scalable and highly-available payment services; led integrations with new card networks.
  • -
  • Worked on our Android Register application. Wrote our first instrumentation tests, and a library called Burst for parameterized tests. Also worked on customer-facing features like invoicing.
  • -
  • Designed and implemented an Android CI system, which runs 6000+ unit tests and 500+ instrumentation tests in parallel across many devices.
  • -
  • Designed and implemented an internal website which hosts our Android and iOS builds, and provides over-the-air installs.
  • +
  • Worked on the Android Register application. Developed its first emulator tests, and a library called Burst for parameterized tests. Also developed customer-facing features like invoicing.
  • +
  • Designed and implemented an Android CI system, which runs 6000+ unit tests and 500+ emulator tests in parallel across many devices.
  • +
  • Designed and implemented an internal website which hosts Square's Android and iOS builds, and provides over-the-air installs.

Engineering Intern at LinkedIn (2011)

@@ -72,7 +76,7 @@

Skills

Languages

-

Java, Python, Ruby, Scala, C++, Bash

+

Java, Python, Ruby, Scala, Go, C++, Bash

Frontend technologies

HTML/CSS, JavaScript, WebGL

Misc

@@ -94,7 +98,7 @@

UIST Stud

1st place for Most Useful. We developed the “Heelblazer,” a foot typing system with intelligent word prediction, using a prototype pressure-sensitive keyboard from Microsoft Research.

ACM ICPC Programming Contest

Competed in the Southern California regional. Placed 6th (2008), 13th (2009), 3rd (2010), and 8th (2011).

-

Google Code Jam

+

Google Code Jam

Advanced to Round 2 in 2009, 2014, 2015 and 2016.

diff --git a/blog/src/main/resources/resume/print.html b/blog/src/main/resources/resume/print.html index adf0e56..eefb5f1 100644 --- a/blog/src/main/resources/resume/print.html +++ b/blog/src/main/resources/resume/print.html @@ -37,14 +37,18 @@

Experience

Engineer at Google (2016—present)

-

I work on the wearables team. Our projects are secret. ;-)

+
    +
  • Designed and implemented several prototypes for Google Glass.
  • +
  • Designed and implemented the real-time translation feature of Google Pixel Buds.
  • +
  • Responsible for Android emulator systems which execute millions of tests per day.
  • +

Engineer at Square (2012—present)

  • Developed scalable and highly-available payment services; led integrations with new card networks.
  • -
  • Worked on our Android Register application. Wrote our first instrumentation tests, and a library called Burst for parameterized tests. Also worked on customer-facing features like invoicing.
  • -
  • Designed and implemented an Android CI system, which runs 6000+ unit tests and 500+ instrumentation tests in parallel across many devices.
  • -
  • Designed and implemented an internal website which hosts our Android and iOS builds, and provides over-the-air installs.
  • +
  • Worked on the Android Register application. Developed its first emulator tests, and a library called Burst for parameterized tests. Also developed customer-facing features like invoicing.
  • +
  • Designed and implemented an Android CI system, which runs 6000+ unit tests and 500+ emulator tests in parallel across many devices.
  • +
  • Designed and implemented an internal website which hosts Square's Android and iOS builds, and provides over-the-air installs.

Engineering Intern at LinkedIn (2011)

@@ -63,7 +67,6 @@

Assistant at Digital Places (2006—2007)

-
@@ -96,6 +98,8 @@

UIST Student Innovation Contest (2009)

1st place for Most Useful. We developed the “Heelblazer,” a foot typing system with intelligent word prediction, using a prototype pressure-sensitive keyboard from Microsoft Research.

ACM ICPC Programming Contest

Competed in the Southern California regional. Placed 6th (2008), 13th (2009), 3rd (2010), and 8th (2011).

+

Google Code Jam

+

Advanced to Round 2 in 2009, 2014, 2015 and 2016.

diff --git a/blog/src/main/resources/resume/style.css b/blog/src/main/resources/resume/style.css index 19120c1..c3cc493 100644 --- a/blog/src/main/resources/resume/style.css +++ b/blog/src/main/resources/resume/style.css @@ -30,7 +30,7 @@ h3 { } h3 ~ h3 { - margin-top: 0.6em; + margin-top: 0.8em; } p + p { diff --git a/blog/src/test/java/com/lubarov/daniel/blog/post/PostTest.java b/blog/src/test/java/com/lubarov/daniel/blog/post/PostTest.java index 83d2b58..40678da 100644 --- a/blog/src/test/java/com/lubarov/daniel/blog/post/PostTest.java +++ b/blog/src/test/java/com/lubarov/daniel/blog/post/PostTest.java @@ -7,7 +7,7 @@ public class PostTest { @Test - public void testGetUrlFriendlySubject() throws Exception { + public void testGetUrlFriendlySubject() { Post post = new Post.Builder() .setRandomUiid() .setCreatedAt(Instant.now()) diff --git a/chat/src/main/java/com/lubarov/daniel/chat/ChatPageHandler.java b/chat/src/main/java/com/lubarov/daniel/chat/ChatPageHandler.java index c96108a..e930f7f 100644 --- a/chat/src/main/java/com/lubarov/daniel/chat/ChatPageHandler.java +++ b/chat/src/main/java/com/lubarov/daniel/chat/ChatPageHandler.java @@ -1,7 +1,15 @@ package com.lubarov.daniel.chat; import com.lubarov.daniel.data.option.Option; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.InputBuilder; +import com.lubarov.daniel.web.html.JavaScriptUtils; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.StylesheetUtils; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TitleBuilder; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; diff --git a/chat/src/main/java/com/lubarov/daniel/chat/ChatWebSocketHandler.java b/chat/src/main/java/com/lubarov/daniel/chat/ChatWebSocketHandler.java index 43c573c..d497b05 100644 --- a/chat/src/main/java/com/lubarov/daniel/chat/ChatWebSocketHandler.java +++ b/chat/src/main/java/com/lubarov/daniel/chat/ChatWebSocketHandler.java @@ -1,8 +1,8 @@ package com.lubarov.daniel.chat; import com.google.gson.Gson; -import com.lubarov.daniel.data.table.MutableHashTable; import com.lubarov.daniel.common.Logger; +import com.lubarov.daniel.data.table.MutableHashTable; import com.lubarov.daniel.web.http.server.WebSocketHandler; import com.lubarov.daniel.web.http.server.WebSocketManager; import com.lubarov.daniel.web.http.websocket.WebSocketFrame; diff --git a/common/src/main/java/com/lubarov/daniel/common/Logger.java b/common/src/main/java/com/lubarov/daniel/common/Logger.java index 933bd7c..7e378a2 100644 --- a/common/src/main/java/com/lubarov/daniel/common/Logger.java +++ b/common/src/main/java/com/lubarov/daniel/common/Logger.java @@ -37,7 +37,7 @@ public void trace(Throwable throwable, String format, Object... args) { } public void trace(String format, Object... args) { - log(LogLevel.TRACE, Option.none(), format, args); + log(LogLevel.TRACE, Option.none(), format, args); } public void debug(Throwable throwable, String format, Object... args) { @@ -45,7 +45,7 @@ public void debug(Throwable throwable, String format, Object... args) { } public void debug(String format, Object... args) { - log(LogLevel.DEBUG, Option.none(), format, args); + log(LogLevel.DEBUG, Option.none(), format, args); } public void info(Throwable throwable, String format, Object... args) { @@ -53,7 +53,7 @@ public void info(Throwable throwable, String format, Object... args) { } public void info(String format, Object... args) { - log(LogLevel.INFO, Option.none(), format, args); + log(LogLevel.INFO, Option.none(), format, args); } public void warn(Throwable throwable, String format, Object... args) { @@ -61,7 +61,7 @@ public void warn(Throwable throwable, String format, Object... args) { } public void warn(String format, Object... args) { - log(LogLevel.WARN, Option.none(), format, args); + log(LogLevel.WARN, Option.none(), format, args); } public void error(Throwable throwable, String format, Object... args) { @@ -69,7 +69,7 @@ public void error(Throwable throwable, String format, Object... args) { } public void error(String format, Object... args) { - log(LogLevel.ERROR, Option.none(), format, args); + log(LogLevel.ERROR, Option.none(), format, args); } public void fatal(Throwable throwable, String format, Object... args) { @@ -77,7 +77,7 @@ public void fatal(Throwable throwable, String format, Object... args) { } public void fatal(String format, Object... args) { - log(LogLevel.FATAL, Option.none(), format, args); + log(LogLevel.FATAL, Option.none(), format, args); } private void log( diff --git a/data/src/main/java/com/lubarov/daniel/data/bag/MutableBag.java b/data/src/main/java/com/lubarov/daniel/data/bag/MutableBag.java index 7f74940..0f2b65b 100644 --- a/data/src/main/java/com/lubarov/daniel/data/bag/MutableBag.java +++ b/data/src/main/java/com/lubarov/daniel/data/bag/MutableBag.java @@ -6,13 +6,13 @@ * A {@link daniel.data.set.Set}-like structure which can contain duplicate elements. */ public interface MutableBag extends Collection { - public void add(A value); + void add(A value); - public void add(A value, int count); + void add(A value, int count); - public boolean tryRemove(A value); + boolean tryRemove(A value); - public boolean tryRemove(A value, int count); + boolean tryRemove(A value, int count); - public void setCount(A value, int count); + void setCount(A value, int count); } diff --git a/data/src/main/java/com/lubarov/daniel/data/collection/AbstractCollection.java b/data/src/main/java/com/lubarov/daniel/data/collection/AbstractCollection.java index 4ed2a0a..debb388 100644 --- a/data/src/main/java/com/lubarov/daniel/data/collection/AbstractCollection.java +++ b/data/src/main/java/com/lubarov/daniel/data/collection/AbstractCollection.java @@ -65,7 +65,7 @@ public Collection filter(Function predicate) { for (A element : this) { K key = grouper.apply(element); if (!groups.containsKey(key)) - groups.put(key, DynamicArray.create()); + groups.put(key, DynamicArray.create()); groups.getValue(key).pushBack(element); } return groups; @@ -74,7 +74,7 @@ public Collection filter(Function predicate) { @Override public Sequence sorted(Ordering ordering) { List jcfList = new ArrayList<>(toJCF()); - Collections.sort(jcfList, ordering.toComparator()); + jcfList.sort(ordering.toComparator()); return ImmutableArray.copyOf(jcfList); } @@ -82,7 +82,7 @@ public Sequence sorted(Ordering ordering) { public Option tryGetOnlyElement() { return getSize() == 1 ? Option.some(getEnumerator().tryTake().getOrThrow()) - : Option.none(); + : Option.none(); } @Override diff --git a/data/src/main/java/com/lubarov/daniel/data/collection/Collection.java b/data/src/main/java/com/lubarov/daniel/data/collection/Collection.java index 98671c5..cb2002e 100644 --- a/data/src/main/java/com/lubarov/daniel/data/collection/Collection.java +++ b/data/src/main/java/com/lubarov/daniel/data/collection/Collection.java @@ -13,39 +13,39 @@ * @param the type of the elements in the group */ public interface Collection extends Iterable { - public Source getEnumerator(); + Source getEnumerator(); - public int getSize(); + int getSize(); - public boolean isEmpty(); + boolean isEmpty(); - public int getCount(A value); + int getCount(A value); - public boolean contains(A value); + boolean contains(A value); - public Collection map(Function transformation); + Collection map(Function transformation); - public Collection filter(Function predicate); + Collection filter(Function predicate); - public Dictionary> groupBy(Function grouper); + Dictionary> groupBy(Function grouper); - public Sequence sorted(Ordering ordering); + Sequence sorted(Ordering ordering); /** If the collection has exactly one element, return it, otherwise return None. */ - public Option tryGetOnlyElement(); + Option tryGetOnlyElement(); - public ImmutableCollection toImmutable(); + ImmutableCollection toImmutable(); - public java.util.Collection toJCF(); + java.util.Collection toJCF(); - public Object[] toArray(); + Object[] toArray(); @Override - public boolean equals(Object o); + boolean equals(Object o); @Override - public int hashCode(); + int hashCode(); @Override - public String toString(); + String toString(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/deque/MutableDeque.java b/data/src/main/java/com/lubarov/daniel/data/deque/MutableDeque.java index 9fdd7be..5e4cde5 100644 --- a/data/src/main/java/com/lubarov/daniel/data/deque/MutableDeque.java +++ b/data/src/main/java/com/lubarov/daniel/data/deque/MutableDeque.java @@ -7,5 +7,5 @@ * A structure which supports pushing and popping elements on both the front and the back. */ public interface MutableDeque extends MutableStack, MutableQueue { - public void pushFront(A value); + void pushFront(A value); } diff --git a/data/src/main/java/com/lubarov/daniel/data/dictionary/AbstractDictionary.java b/data/src/main/java/com/lubarov/daniel/data/dictionary/AbstractDictionary.java index 70d352b..43bcb58 100644 --- a/data/src/main/java/com/lubarov/daniel/data/dictionary/AbstractDictionary.java +++ b/data/src/main/java/com/lubarov/daniel/data/dictionary/AbstractDictionary.java @@ -46,21 +46,11 @@ public Dictionary filter(Function, Boolean> pre @Override public Dictionary filterKeys(final Function predicate) { - return this.filter(new Function, Boolean>() { - @Override - public Boolean apply(KeyValuePair keyValuePair) { - return predicate.apply(keyValuePair.getKey()); - } - }); + return filter(keyValuePair -> predicate.apply(keyValuePair.getKey())); } @Override public Dictionary filterValues(final Function predicate) { - return this.filter(new Function, Boolean>() { - @Override - public Boolean apply(KeyValuePair keyValuePair) { - return predicate.apply(keyValuePair.getValue()); - } - }); + return filter(keyValuePair -> predicate.apply(keyValuePair.getValue())); } } diff --git a/data/src/main/java/com/lubarov/daniel/data/dictionary/Dictionary.java b/data/src/main/java/com/lubarov/daniel/data/dictionary/Dictionary.java index a8be6bb..b0ee948 100644 --- a/data/src/main/java/com/lubarov/daniel/data/dictionary/Dictionary.java +++ b/data/src/main/java/com/lubarov/daniel/data/dictionary/Dictionary.java @@ -10,22 +10,22 @@ */ public interface Dictionary extends Set> { @Override - public ImmutableDictionary toImmutable(); + ImmutableDictionary toImmutable(); - public Option tryGetValue(K key); + Option tryGetValue(K key); - public boolean containsKey(K key); + boolean containsKey(K key); - public V getValue(K key); + V getValue(K key); - public Set getKeys(); + Set getKeys(); - public Collection getValues(); + Collection getValues(); @Override - public Dictionary filter(Function, Boolean> predicate); + Dictionary filter(Function, Boolean> predicate); - public Dictionary filterKeys(Function predicate); + Dictionary filterKeys(Function predicate); - public Dictionary filterValues(Function predicate); + Dictionary filterValues(Function predicate); } diff --git a/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/ImmutableOrderedDictionary.java b/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/ImmutableOrderedDictionary.java index a272be3..8ad7b28 100644 --- a/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/ImmutableOrderedDictionary.java +++ b/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/ImmutableOrderedDictionary.java @@ -11,8 +11,8 @@ public interface ImmutableOrderedDictionary extends OrderedDictionary, ImmutableDictionary, ImmutableOrderedSet> { @Override - public ImmutableOrderedDictionary filter(Function, Boolean> predicate); + ImmutableOrderedDictionary filter(Function, Boolean> predicate); @Override - public ImmutableOrderedDictionary toImmutable(); + ImmutableOrderedDictionary toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/OrderedDictionary.java b/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/OrderedDictionary.java index dcd3d2c..30b0d06 100644 --- a/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/OrderedDictionary.java +++ b/data/src/main/java/com/lubarov/daniel/data/dictionary/ordered/OrderedDictionary.java @@ -10,8 +10,8 @@ */ public interface OrderedDictionary extends Dictionary, OrderedSet> { @Override - public ImmutableOrderedDictionary filter(Function, Boolean> predicate); + ImmutableOrderedDictionary filter(Function, Boolean> predicate); @Override - public ImmutableOrderedDictionary toImmutable(); + ImmutableOrderedDictionary toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/function/Function.java b/data/src/main/java/com/lubarov/daniel/data/function/Function.java index db1dd76..f144031 100644 --- a/data/src/main/java/com/lubarov/daniel/data/function/Function.java +++ b/data/src/main/java/com/lubarov/daniel/data/function/Function.java @@ -7,5 +7,5 @@ * @param the output type */ public interface Function { - public B apply(A input); + B apply(A input); } diff --git a/data/src/main/java/com/lubarov/daniel/data/function/Predicates.java b/data/src/main/java/com/lubarov/daniel/data/function/Predicates.java index ac3631b..ad44e38 100644 --- a/data/src/main/java/com/lubarov/daniel/data/function/Predicates.java +++ b/data/src/main/java/com/lubarov/daniel/data/function/Predicates.java @@ -7,44 +7,24 @@ public final class Predicates { private Predicates() {} public static Function opposite(final Function predicate) { - return new Function() { - @Override - public Boolean apply(A input) { - return !predicate.apply(input); - } - }; + return input -> !predicate.apply(input); } public static Function conjunction( final Function predicateA, final Function predicateB) { - return new Function() { - @Override - public Boolean apply(A input) { - return predicateA.apply(input) && predicateB.apply(input); - } - }; + return input -> predicateA.apply(input) && predicateB.apply(input); } public static Function disjunction( final Function predicateA, final Function predicateB) { - return new Function() { - @Override - public Boolean apply(A input) { - return predicateA.apply(input) || predicateB.apply(input); - } - }; + return input -> predicateA.apply(input) || predicateB.apply(input); } public static Function exclusiveDisjunction( final Function predicateA, final Function predicateB) { - return new Function() { - @Override - public Boolean apply(A input) { - return predicateA.apply(input) ^ predicateB.apply(input); - } - }; + return input -> predicateA.apply(input) ^ predicateB.apply(input); } } diff --git a/data/src/main/java/com/lubarov/daniel/data/option/Option.java b/data/src/main/java/com/lubarov/daniel/data/option/Option.java index 7dd5212..2443895 100644 --- a/data/src/main/java/com/lubarov/daniel/data/option/Option.java +++ b/data/src/main/java/com/lubarov/daniel/data/option/Option.java @@ -25,7 +25,7 @@ public static Option none() { } public static Option fromNullable(A valueOrNull) { - return valueOrNull != null ? some(valueOrNull) : Option.none(); + return valueOrNull != null ? some(valueOrNull) : Option.none(); } public boolean isDefined() { diff --git a/data/src/main/java/com/lubarov/daniel/data/option/Some.java b/data/src/main/java/com/lubarov/daniel/data/option/Some.java index 8607727..0afc8d9 100644 --- a/data/src/main/java/com/lubarov/daniel/data/option/Some.java +++ b/data/src/main/java/com/lubarov/daniel/data/option/Some.java @@ -32,7 +32,7 @@ public Option map(Function transformation) { @Override public Option filter(Function predicate) { - return predicate.apply(value) ? this : Option.none(); + return predicate.apply(value) ? this : Option.none(); } @Override diff --git a/data/src/main/java/com/lubarov/daniel/data/order/Ordering.java b/data/src/main/java/com/lubarov/daniel/data/order/Ordering.java index b3e3ab9..ddb468e 100644 --- a/data/src/main/java/com/lubarov/daniel/data/order/Ordering.java +++ b/data/src/main/java/com/lubarov/daniel/data/order/Ordering.java @@ -6,9 +6,9 @@ * An ordering of objects, similar to {@link Comparator}. */ public interface Ordering { - public Relation compare(A a, A b); + Relation compare(A a, A b); - public Ordering reverse(); + Ordering reverse(); - public Comparator toComparator(); + Comparator toComparator(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/queue/MutableQueue.java b/data/src/main/java/com/lubarov/daniel/data/queue/MutableQueue.java index 84596d7..d9bb011 100644 --- a/data/src/main/java/com/lubarov/daniel/data/queue/MutableQueue.java +++ b/data/src/main/java/com/lubarov/daniel/data/queue/MutableQueue.java @@ -6,7 +6,7 @@ * A structure which supports pushing values onto the back and popping values off of the front. */ public interface MutableQueue extends Sequence { - public void pushBack(A value); + void pushBack(A value); - public A popFront(); + A popFront(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/sequence/Sequence.java b/data/src/main/java/com/lubarov/daniel/data/sequence/Sequence.java index f4aae0c..8d56393 100644 --- a/data/src/main/java/com/lubarov/daniel/data/sequence/Sequence.java +++ b/data/src/main/java/com/lubarov/daniel/data/sequence/Sequence.java @@ -11,42 +11,42 @@ */ public interface Sequence extends Collection { @Override - public Sequence map(Function transformation); + Sequence map(Function transformation); @Override - public Sequence filter(Function predicate); + Sequence filter(Function predicate); @Override - public ImmutableSequence toImmutable(); + ImmutableSequence toImmutable(); @Override - public java.util.List toJCF(); + java.util.List toJCF(); - public A get(int index); + A get(int index); - public A getFront(); + A getFront(); - public A getBack(); + A getBack(); /** * Get all elements except the first. */ - public Sequence getTail(); + Sequence getTail(); /** * Get all elements except the last. */ - public Sequence getInit(); + Sequence getInit(); - public Sequence reversed(); + Sequence reversed(); - public Sequence shuffled(Random random); + Sequence shuffled(Random random); - public Sequence replaceAll(A value, A replacement); + Sequence replaceAll(A value, A replacement); - public Option getFirstIndex(A value); + Option getFirstIndex(A value); - public Option getLastIndex(A value); + Option getLastIndex(A value); - public String join(String glue); + String join(String glue); } diff --git a/data/src/main/java/com/lubarov/daniel/data/sequence/ordered/OrderedSequence.java b/data/src/main/java/com/lubarov/daniel/data/sequence/ordered/OrderedSequence.java index 4ff3b45..5d00f36 100644 --- a/data/src/main/java/com/lubarov/daniel/data/sequence/ordered/OrderedSequence.java +++ b/data/src/main/java/com/lubarov/daniel/data/sequence/ordered/OrderedSequence.java @@ -7,5 +7,5 @@ * A {@link Sequence} whose elements are always ordered according to some {@link Ordering}. */ public interface OrderedSequence extends Sequence { - public Ordering getOrdering(); + Ordering getOrdering(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/serialization/OptionSerializer.java b/data/src/main/java/com/lubarov/daniel/data/serialization/OptionSerializer.java index 8535285..2c7e746 100644 --- a/data/src/main/java/com/lubarov/daniel/data/serialization/OptionSerializer.java +++ b/data/src/main/java/com/lubarov/daniel/data/serialization/OptionSerializer.java @@ -37,6 +37,6 @@ public Option readFromSource(ByteSource source) { return isDefined ? Option.some(valueSerializer.readFromSource(source)) - : Option.none(); + : Option.none(); } } diff --git a/data/src/main/java/com/lubarov/daniel/data/serialization/Serializer.java b/data/src/main/java/com/lubarov/daniel/data/serialization/Serializer.java index fd8174a..cfdf1db 100644 --- a/data/src/main/java/com/lubarov/daniel/data/serialization/Serializer.java +++ b/data/src/main/java/com/lubarov/daniel/data/serialization/Serializer.java @@ -1,11 +1,11 @@ package com.lubarov.daniel.data.serialization; public interface Serializer { - public void writeToSink(A object, ByteSink sink); + void writeToSink(A object, ByteSink sink); - public A readFromSource(ByteSource source); + A readFromSource(ByteSource source); - public byte[] writeToByteArray(A object); + byte[] writeToByteArray(A object); - public A readFromByteArray(byte[] data); + A readFromByteArray(byte[] data); } diff --git a/data/src/main/java/com/lubarov/daniel/data/set/Set.java b/data/src/main/java/com/lubarov/daniel/data/set/Set.java index 9c16a8f..9fac6dd 100644 --- a/data/src/main/java/com/lubarov/daniel/data/set/Set.java +++ b/data/src/main/java/com/lubarov/daniel/data/set/Set.java @@ -8,9 +8,9 @@ */ public interface Set extends Collection { @Override - public Set filter(Function predicate); + Set filter(Function predicate); - public ImmutableSet toImmutable(); + ImmutableSet toImmutable(); // TODO: intersection, union, etc. //public Set intersection(Set that); diff --git a/data/src/main/java/com/lubarov/daniel/data/set/ordered/ImmutableOrderedSet.java b/data/src/main/java/com/lubarov/daniel/data/set/ordered/ImmutableOrderedSet.java index c5e97e1..e53e150 100644 --- a/data/src/main/java/com/lubarov/daniel/data/set/ordered/ImmutableOrderedSet.java +++ b/data/src/main/java/com/lubarov/daniel/data/set/ordered/ImmutableOrderedSet.java @@ -10,8 +10,8 @@ public interface ImmutableOrderedSet extends OrderedSet, ImmutableSet, ImmutableOrderedSequence { @Override - public OrderedSet filter(Function predicate); + OrderedSet filter(Function predicate); @Override - public ImmutableOrderedSet toImmutable(); + ImmutableOrderedSet toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/set/ordered/OrderedSet.java b/data/src/main/java/com/lubarov/daniel/data/set/ordered/OrderedSet.java index 9ccbc5b..b65f9c3 100644 --- a/data/src/main/java/com/lubarov/daniel/data/set/ordered/OrderedSet.java +++ b/data/src/main/java/com/lubarov/daniel/data/set/ordered/OrderedSet.java @@ -9,8 +9,8 @@ */ public interface OrderedSet extends Set, OrderedSequence { @Override - public OrderedSet filter(Function predicate); + OrderedSet filter(Function predicate); @Override - public ImmutableOrderedSet toImmutable(); + ImmutableOrderedSet toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/source/IteratorSource.java b/data/src/main/java/com/lubarov/daniel/data/source/IteratorSource.java index 305af0e..ea101f9 100644 --- a/data/src/main/java/com/lubarov/daniel/data/source/IteratorSource.java +++ b/data/src/main/java/com/lubarov/daniel/data/source/IteratorSource.java @@ -16,6 +16,6 @@ public IteratorSource(Iterator iterator) { @Override public Option tryTake() { - return iterator.hasNext() ? Option.some(iterator.next()) : Option.none(); + return iterator.hasNext() ? Option.some(iterator.next()) : Option.none(); } } diff --git a/data/src/main/java/com/lubarov/daniel/data/source/Source.java b/data/src/main/java/com/lubarov/daniel/data/source/Source.java index dc8b8bf..a572728 100644 --- a/data/src/main/java/com/lubarov/daniel/data/source/Source.java +++ b/data/src/main/java/com/lubarov/daniel/data/source/Source.java @@ -8,15 +8,15 @@ * A stream of objects which may or may not be finite, similar to an {@link java.util.Iterator}. */ public interface Source { - public Option tryTake(); + Option tryTake(); - public Sequence takeUpTo(int n); + Sequence takeUpTo(int n); - public Sequence takeExactly(int n); + Sequence takeExactly(int n); - public Sequence takeAll(); + Sequence takeAll(); - public Source map(Function transformation); + Source map(Function transformation); - public Source filter(Function predicate); + Source filter(Function predicate); } diff --git a/data/src/main/java/com/lubarov/daniel/data/stack/MutableStack.java b/data/src/main/java/com/lubarov/daniel/data/stack/MutableStack.java index 6528ada..45b69ed 100644 --- a/data/src/main/java/com/lubarov/daniel/data/stack/MutableStack.java +++ b/data/src/main/java/com/lubarov/daniel/data/stack/MutableStack.java @@ -6,7 +6,7 @@ * A first in, last out structure. */ public interface MutableStack extends Sequence { - public void pushBack(A value); + void pushBack(A value); - public A popBack(); + A popBack(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/table/ImmutableHashTable.java b/data/src/main/java/com/lubarov/daniel/data/table/ImmutableHashTable.java index 4fff8a6..28c91dc 100644 --- a/data/src/main/java/com/lubarov/daniel/data/table/ImmutableHashTable.java +++ b/data/src/main/java/com/lubarov/daniel/data/table/ImmutableHashTable.java @@ -26,7 +26,7 @@ private ImmutableHashTable(ImmutableDictionary ImmutableHashTable create() { - return new ImmutableHashTable<>(ImmutableHashDictionary.>create()); + return new ImmutableHashTable<>(ImmutableHashDictionary.create()); } public static ImmutableHashTable copyOf( @@ -36,7 +36,7 @@ public static ImmutableHashTable copyOf( K key = keyValuePair.getKey(); V value = keyValuePair.getValue(); SinglyLinkedList oldGroup = valueGroups.tryGetValue(key) - .getOrDefault(SinglyLinkedList.create()); + .getOrDefault(SinglyLinkedList.create()); valueGroups.put(key, oldGroup.plusFront(value)); } return new ImmutableHashTable<>(valueGroups.toImmutable()); @@ -56,7 +56,7 @@ public boolean containsKey(K key) { public Collection getValues(K key) { return valueGroups.containsKey(key) ? valueGroups.getValue(key) - : ImmutableArray.create(); + : ImmutableArray.create(); } @Override diff --git a/data/src/main/java/com/lubarov/daniel/data/table/MutableHashTable.java b/data/src/main/java/com/lubarov/daniel/data/table/MutableHashTable.java index 661f2b4..b79414b 100644 --- a/data/src/main/java/com/lubarov/daniel/data/table/MutableHashTable.java +++ b/data/src/main/java/com/lubarov/daniel/data/table/MutableHashTable.java @@ -30,7 +30,7 @@ public static MutableHashTable copyOf(Iterable> public void put(K key, V value) { if (!valueGroups.containsKey(key)) - valueGroups.put(key, MutableHashBag.create()); + valueGroups.put(key, MutableHashBag.create()); valueGroups.getValue(key).add(value); ++size; } @@ -67,7 +67,7 @@ public boolean containsKey(K key) { @Override public Collection getValues(K key) { - return valueGroups.tryGetValue(key).getOrDefault(MutableHashBag.create()); + return valueGroups.tryGetValue(key).getOrDefault(MutableHashBag.create()); } @Override diff --git a/data/src/main/java/com/lubarov/daniel/data/table/Table.java b/data/src/main/java/com/lubarov/daniel/data/table/Table.java index 9958e51..b3f64e8 100644 --- a/data/src/main/java/com/lubarov/daniel/data/table/Table.java +++ b/data/src/main/java/com/lubarov/daniel/data/table/Table.java @@ -9,12 +9,12 @@ * multiple entries with the same key. */ public interface Table extends Collection> { - public Set getKeys(); + Set getKeys(); - public boolean containsKey(K key); + boolean containsKey(K key); - public Collection getValues(K key); + Collection getValues(K key); @Override - public ImmutableTable toImmutable(); + ImmutableTable toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableArrayTable.java b/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableArrayTable.java index ace584b..6d4ee34 100644 --- a/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableArrayTable.java +++ b/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableArrayTable.java @@ -23,7 +23,7 @@ private ImmutableArrayTable(ImmutableSequence> keyValuePairs) } public static ImmutableArrayTable create() { - return new ImmutableArrayTable<>(ImmutableArray.>create()); + return new ImmutableArrayTable<>(ImmutableArray.create()); } public static ImmutableArrayTable copyOf( diff --git a/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableSequentialTable.java b/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableSequentialTable.java index c916aa6..1bfed03 100644 --- a/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableSequentialTable.java +++ b/data/src/main/java/com/lubarov/daniel/data/table/sequential/ImmutableSequentialTable.java @@ -11,5 +11,5 @@ public interface ImmutableSequentialTable extends SequentialTable, ImmutableTable, ImmutableSequence> { @Override - public ImmutableSequentialTable toImmutable(); + ImmutableSequentialTable toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/table/sequential/SequentialTable.java b/data/src/main/java/com/lubarov/daniel/data/table/sequential/SequentialTable.java index 54256e8..22ab687 100644 --- a/data/src/main/java/com/lubarov/daniel/data/table/sequential/SequentialTable.java +++ b/data/src/main/java/com/lubarov/daniel/data/table/sequential/SequentialTable.java @@ -10,5 +10,5 @@ public interface SequentialTable extends Table, Sequence> { @Override - public ImmutableSequentialTable toImmutable(); + ImmutableSequentialTable toImmutable(); } diff --git a/data/src/main/java/com/lubarov/daniel/data/util/DigestUtils.java b/data/src/main/java/com/lubarov/daniel/data/util/DigestUtils.java index 082e076..ebe90a0 100644 --- a/data/src/main/java/com/lubarov/daniel/data/util/DigestUtils.java +++ b/data/src/main/java/com/lubarov/daniel/data/util/DigestUtils.java @@ -23,7 +23,7 @@ public static String md5Hex(byte[] data) { private static String toHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) - sb.append(Integer.toHexString(b & 0xFF | 0x100).substring(1, 3)); + sb.append(Integer.toHexString(b & 0xFF | 0x100), 1, 3); return sb.toString(); } } diff --git a/data/src/main/java/com/lubarov/daniel/data/util/IOUtils.java b/data/src/main/java/com/lubarov/daniel/data/util/IOUtils.java index dbc00ea..1860594 100644 --- a/data/src/main/java/com/lubarov/daniel/data/util/IOUtils.java +++ b/data/src/main/java/com/lubarov/daniel/data/util/IOUtils.java @@ -1,6 +1,12 @@ package com.lubarov.daniel.data.util; -import java.io.*; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; /** * @see RWUtils diff --git a/data/src/test/java/com/lubarov/daniel/data/serialization/OptionSerializerTest.java b/data/src/test/java/com/lubarov/daniel/data/serialization/OptionSerializerTest.java index 81dc169..74af9b7 100644 --- a/data/src/test/java/com/lubarov/daniel/data/serialization/OptionSerializerTest.java +++ b/data/src/test/java/com/lubarov/daniel/data/serialization/OptionSerializerTest.java @@ -10,7 +10,7 @@ public class OptionSerializerTest { public void testVarious() { test(Option.some("")); test(Option.some("abc")); - test(Option.none()); + test(Option.none()); } private static void test(Option original) { diff --git a/data/src/test/java/com/lubarov/daniel/data/source/RecursiveSourceTest.java b/data/src/test/java/com/lubarov/daniel/data/source/RecursiveSourceTest.java index ec5fbfa..7400c9c 100644 --- a/data/src/test/java/com/lubarov/daniel/data/source/RecursiveSourceTest.java +++ b/data/src/test/java/com/lubarov/daniel/data/source/RecursiveSourceTest.java @@ -12,9 +12,9 @@ public void testTryTake() { assertEquals(seq(), new RecursiveSource().takeAll()); assertEquals(seq(), - new RecursiveSource(src(), src(), src()).takeAll()); + new RecursiveSource<>(src(), src(), src()).takeAll()); assertEquals(seq("a", "b", "c"), - new RecursiveSource(src("a"), src("b", "c")).takeAll()); + new RecursiveSource<>(src("a"), src("b", "c")).takeAll()); } private static Sequence seq(String... strings) { diff --git a/data/src/test/java/com/lubarov/daniel/data/util/ArrayUtilsTest.java b/data/src/test/java/com/lubarov/daniel/data/util/ArrayUtilsTest.java index f7babc7..a88e967 100644 --- a/data/src/test/java/com/lubarov/daniel/data/util/ArrayUtilsTest.java +++ b/data/src/test/java/com/lubarov/daniel/data/util/ArrayUtilsTest.java @@ -3,7 +3,9 @@ import com.lubarov.daniel.data.option.Option; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class ArrayUtilsTest { @Test diff --git a/gw2/src/main/java/com/lubarov/daniel/gw2/EffectivePowerHandler.java b/gw2/src/main/java/com/lubarov/daniel/gw2/EffectivePowerHandler.java index 0dfee28..36f2122 100644 --- a/gw2/src/main/java/com/lubarov/daniel/gw2/EffectivePowerHandler.java +++ b/gw2/src/main/java/com/lubarov/daniel/gw2/EffectivePowerHandler.java @@ -2,7 +2,11 @@ import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.sequence.ImmutableArray; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.InputBuilder; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; diff --git a/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2HomeHandler.java b/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2HomeHandler.java index 0137244..a6c3556 100644 --- a/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2HomeHandler.java +++ b/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2HomeHandler.java @@ -4,7 +4,6 @@ import com.lubarov.daniel.data.sequence.ImmutableArray; import com.lubarov.daniel.web.html.AnchorBuilder; import com.lubarov.daniel.web.html.Element; -import com.lubarov.daniel.web.html.Node; import com.lubarov.daniel.web.html.ParagraphBuilder; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; diff --git a/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2Layout.java b/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2Layout.java index dc02988..dff49af 100644 --- a/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2Layout.java +++ b/gw2/src/main/java/com/lubarov/daniel/gw2/Gw2Layout.java @@ -2,7 +2,14 @@ import com.lubarov.daniel.data.collection.Collection; import com.lubarov.daniel.data.option.Option; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.JavaScriptUtils; +import com.lubarov.daniel.web.html.Node; +import com.lubarov.daniel.web.html.StylesheetUtils; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TitleBuilder; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.util.UserAgentUtils; diff --git a/junkmail/src/main/java/com/lubarov/daniel/junkmail/JunkMailHandler.java b/junkmail/src/main/java/com/lubarov/daniel/junkmail/JunkMailHandler.java index 8f13074..c7a28cf 100644 --- a/junkmail/src/main/java/com/lubarov/daniel/junkmail/JunkMailHandler.java +++ b/junkmail/src/main/java/com/lubarov/daniel/junkmail/JunkMailHandler.java @@ -4,6 +4,7 @@ import com.lubarov.daniel.web.http.server.util.DelegatingHandler; import com.lubarov.daniel.web.http.server.util.StaticContentHandler; import com.lubarov.daniel.web.http.server.util.WwwRemovingHandler; + import java.io.File; public class JunkMailHandler { diff --git a/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpConnectionManager.java b/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpConnectionManager.java index bb0befa..b7adf6b 100644 --- a/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpConnectionManager.java +++ b/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpConnectionManager.java @@ -1,6 +1,7 @@ package com.lubarov.daniel.junkmail; import com.lubarov.daniel.common.Logger; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; diff --git a/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpListener.java b/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpListener.java index 10e2b1f..3c8a11b 100644 --- a/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpListener.java +++ b/junkmail/src/main/java/com/lubarov/daniel/junkmail/SmtpListener.java @@ -1,6 +1,7 @@ package com.lubarov.daniel.junkmail; import com.lubarov.daniel.common.Logger; + import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; diff --git a/multiweb/src/main/java/com/lubarov/daniel/multiweb/MultiwebHandler.java b/multiweb/src/main/java/com/lubarov/daniel/multiweb/MultiwebHandler.java index d7196ce..21888e3 100644 --- a/multiweb/src/main/java/com/lubarov/daniel/multiweb/MultiwebHandler.java +++ b/multiweb/src/main/java/com/lubarov/daniel/multiweb/MultiwebHandler.java @@ -3,6 +3,7 @@ import com.lubarov.daniel.alexresume.AlexResumeHandler; import com.lubarov.daniel.blog.BlogHandler; import com.lubarov.daniel.chat.ChatHandler; +import com.lubarov.daniel.conniewedding.ConnieWeddingHandler; import com.lubarov.daniel.gw2.Gw2Handler; import com.lubarov.daniel.junkmail.JunkMailHandler; import com.lubarov.daniel.nagger.NaggerHandler; @@ -11,7 +12,6 @@ import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.server.Handler; import com.lubarov.daniel.web.http.server.util.HostBasedHandler; -import com.lubarov.daniel.conniewedding.ConnieWeddingHandler; import com.lubarov.daniel.wedding.WeddingHandler; final class MultiwebHandler implements Handler { diff --git a/nagger/src/main/java/com/lubarov/daniel/nagger/HomeHandler.java b/nagger/src/main/java/com/lubarov/daniel/nagger/HomeHandler.java index 8e25f1b..0b236e7 100644 --- a/nagger/src/main/java/com/lubarov/daniel/nagger/HomeHandler.java +++ b/nagger/src/main/java/com/lubarov/daniel/nagger/HomeHandler.java @@ -7,7 +7,12 @@ import com.lubarov.daniel.nagger.model.Recipient; import com.lubarov.daniel.nagger.storage.AlertStorage; import com.lubarov.daniel.nagger.storage.RecipientStorage; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.JavaScriptUtils; +import com.lubarov.daniel.web.html.StylesheetUtils; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TitleBuilder; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; diff --git a/nagger/src/main/java/com/lubarov/daniel/nagger/NaggerWebSocketHandler.java b/nagger/src/main/java/com/lubarov/daniel/nagger/NaggerWebSocketHandler.java index 4bb032d..84d35f9 100644 --- a/nagger/src/main/java/com/lubarov/daniel/nagger/NaggerWebSocketHandler.java +++ b/nagger/src/main/java/com/lubarov/daniel/nagger/NaggerWebSocketHandler.java @@ -3,10 +3,30 @@ import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.lubarov.daniel.data.set.MutableHashSet; import com.lubarov.daniel.common.Logger; -import com.lubarov.daniel.nagger.messages.c2s.*; -import com.lubarov.daniel.nagger.messages.s2c.*; +import com.lubarov.daniel.data.set.MutableHashSet; +import com.lubarov.daniel.nagger.messages.c2s.C2sAddRecipientMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sAddTagMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sCreateAlertMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sCreateRecipientMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sEditAlertCommandMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sEditAlertDescriptionMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sEditAlertFrequencyMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sEditAlertNameMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sEditRecipientCommandMessage; +import com.lubarov.daniel.nagger.messages.c2s.C2sMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cAddRecipientMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cAddTagMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cCreateAlertMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cCreateRecipientMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cEditAlertCommandMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cEditAlertDescriptionMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cEditAlertFrequencyMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cEditAlertNameMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cEditRecipientCommandMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cJumpToAlertMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cJumpToRecipientMessage; +import com.lubarov.daniel.nagger.messages.s2c.S2cMessage; import com.lubarov.daniel.nagger.model.Alert; import com.lubarov.daniel.nagger.model.Recipient; import com.lubarov.daniel.nagger.storage.AlertStorage; diff --git a/nagger/src/main/java/com/lubarov/daniel/nagger/Status.java b/nagger/src/main/java/com/lubarov/daniel/nagger/Status.java index 96f2def..8a5a727 100644 --- a/nagger/src/main/java/com/lubarov/daniel/nagger/Status.java +++ b/nagger/src/main/java/com/lubarov/daniel/nagger/Status.java @@ -12,7 +12,7 @@ public static Status fromExitStatus(int exitStatus) { throw new IllegalArgumentException("Bad exit status: " + exitStatus); } - private Status(int exitStatus) { + Status(int exitStatus) { this.exitStatus = exitStatus; } diff --git a/nagger/src/main/java/com/lubarov/daniel/nagger/storage/AlertStorage.java b/nagger/src/main/java/com/lubarov/daniel/nagger/storage/AlertStorage.java index 10c8655..c5cb608 100644 --- a/nagger/src/main/java/com/lubarov/daniel/nagger/storage/AlertStorage.java +++ b/nagger/src/main/java/com/lubarov/daniel/nagger/storage/AlertStorage.java @@ -1,7 +1,6 @@ package com.lubarov.daniel.nagger.storage; import com.lubarov.daniel.bdb.SerializingDatabase; -import com.lubarov.daniel.common.Environment; import com.lubarov.daniel.data.collection.Collection; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.serialization.GsonSerializer; diff --git a/stego/src/main/java/com/lubarov/daniel/Encoder.java b/stego/src/main/java/com/lubarov/daniel/Encoder.java index a02a9b2..addf8ac 100644 --- a/stego/src/main/java/com/lubarov/daniel/Encoder.java +++ b/stego/src/main/java/com/lubarov/daniel/Encoder.java @@ -15,11 +15,11 @@ public class Encoder { private static List getNextWordOptions(List words) { int l = words.size(); -// for (int lookback = Math.min(NGRAM_SIZE, l); lookback >= 0; --lookback) { -// List context = words.subList(l - lookback, l); -// if (context.isEmpty()) context.add("."); -// ; -// } + for (int lookback = Math.min(NGRAM_SIZE, l); lookback >= 0; --lookback) { + List context = words.subList(l - lookback, l); + if (context.isEmpty()) context.add("."); + ; + } throw new RuntimeException("No options (shouldn't get here)."); } } diff --git a/viewheaders/src/main/java/com/lubarov/daniel/viewheaders/Layout.java b/viewheaders/src/main/java/com/lubarov/daniel/viewheaders/Layout.java index 455521a..70b09b6 100644 --- a/viewheaders/src/main/java/com/lubarov/daniel/viewheaders/Layout.java +++ b/viewheaders/src/main/java/com/lubarov/daniel/viewheaders/Layout.java @@ -1,6 +1,14 @@ package com.lubarov.daniel.viewheaders; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.HtmlUtils; +import com.lubarov.daniel.web.html.Node; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.StylesheetUtils; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TitleBuilder; final class Layout { private Layout() {} diff --git a/web/src/main/java/com/lubarov/daniel/web/html/ParagraphBuilder.java b/web/src/main/java/com/lubarov/daniel/web/html/ParagraphBuilder.java index e0f092c..a56fed3 100644 --- a/web/src/main/java/com/lubarov/daniel/web/html/ParagraphBuilder.java +++ b/web/src/main/java/com/lubarov/daniel/web/html/ParagraphBuilder.java @@ -1,7 +1,5 @@ package com.lubarov.daniel.web.html; -import com.lubarov.daniel.data.sequence.Sequence; - public final class ParagraphBuilder { private final Element.Builder elementBuilder; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/HttpStatus.java b/web/src/main/java/com/lubarov/daniel/web/http/HttpStatus.java index 86ace9c..676a68f 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/HttpStatus.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/HttpStatus.java @@ -82,7 +82,7 @@ public enum HttpStatus { private final int code; private final String description; - private HttpStatus(int code, String description) { + HttpStatus(int code, String description) { this.code = code; this.description = description; } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/HttpVersion.java b/web/src/main/java/com/lubarov/daniel/web/http/HttpVersion.java index 51f719b..88eeffa 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/HttpVersion.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/HttpVersion.java @@ -5,7 +5,7 @@ public enum HttpVersion { private final String versionString; - private HttpVersion(String versionString) { + HttpVersion(String versionString) { this.versionString = versionString; } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/RequestHeaderName.java b/web/src/main/java/com/lubarov/daniel/web/http/RequestHeaderName.java index be341c4..748a2dd 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/RequestHeaderName.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/RequestHeaderName.java @@ -35,7 +35,7 @@ public enum RequestHeaderName { private final String standardName; - private RequestHeaderName(String standardName) { + RequestHeaderName(String standardName) { this.standardName = standardName; } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/ResponseHeaderName.java b/web/src/main/java/com/lubarov/daniel/web/http/ResponseHeaderName.java index 8afeef6..2bc229b 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/ResponseHeaderName.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/ResponseHeaderName.java @@ -38,7 +38,7 @@ public enum ResponseHeaderName { private final String standardName; - private ResponseHeaderName(String standardName) { + ResponseHeaderName(String standardName) { this.standardName = standardName; } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/cookies/CookieManager.java b/web/src/main/java/com/lubarov/daniel/web/http/cookies/CookieManager.java index ca42d6d..ecbb744 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/cookies/CookieManager.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/cookies/CookieManager.java @@ -5,12 +5,7 @@ public final class CookieManager { private static final ThreadLocal> cookies = - new ThreadLocal>() { - @Override - protected SinglyLinkedList initialValue() { - return SinglyLinkedList.create(); - } - }; + ThreadLocal.withInitial(SinglyLinkedList::create); private CookieManager() {} diff --git a/web/src/main/java/com/lubarov/daniel/web/http/parsing/LenientTokenOrQuotedStringParser.java b/web/src/main/java/com/lubarov/daniel/web/http/parsing/LenientTokenOrQuotedStringParser.java index 3ed93d0..351fefb 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/parsing/LenientTokenOrQuotedStringParser.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/parsing/LenientTokenOrQuotedStringParser.java @@ -10,7 +10,7 @@ public final class LenientTokenOrQuotedStringParser extends Parser { singleton = new LenientTokenOrQuotedStringParser(); private static final DisjunctiveParser proxy = - new DisjunctiveParser(QuotedStringParser.singleton, LenientTokenParser.singleton); + new DisjunctiveParser<>(QuotedStringParser.singleton, LenientTokenParser.singleton); private LenientTokenOrQuotedStringParser() {} diff --git a/web/src/main/java/com/lubarov/daniel/web/http/parsing/TokenOrQuotedStringParser.java b/web/src/main/java/com/lubarov/daniel/web/http/parsing/TokenOrQuotedStringParser.java index 611e50a..0805090 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/parsing/TokenOrQuotedStringParser.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/parsing/TokenOrQuotedStringParser.java @@ -9,7 +9,7 @@ public final class TokenOrQuotedStringParser extends Parser { public static final TokenOrQuotedStringParser singleton = new TokenOrQuotedStringParser(); private static final DisjunctiveParser proxy = - new DisjunctiveParser(QuotedStringParser.singleton, TokenParser.singleton); + new DisjunctiveParser<>(QuotedStringParser.singleton, TokenParser.singleton); private TokenOrQuotedStringParser() {} diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/ConnectionManager.java b/web/src/main/java/com/lubarov/daniel/web/http/server/ConnectionManager.java index 2d449e4..86d778d 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/ConnectionManager.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/ConnectionManager.java @@ -1,12 +1,16 @@ package com.lubarov.daniel.web.http.server; +import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.data.dictionary.KeyValuePair; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.table.MutableHashTable; import com.lubarov.daniel.data.unit.Instant; import com.lubarov.daniel.data.util.CompressionUtils; -import com.lubarov.daniel.common.Logger; -import com.lubarov.daniel.web.http.*; +import com.lubarov.daniel.web.http.ContentEncoding; +import com.lubarov.daniel.web.http.DateUtils; +import com.lubarov.daniel.web.http.HttpRequest; +import com.lubarov.daniel.web.http.HttpResponse; +import com.lubarov.daniel.web.http.RequestMethod; import com.lubarov.daniel.web.http.compression.AcceptEncodingParser; import com.lubarov.daniel.web.http.cookies.CookieManager; import com.lubarov.daniel.web.http.websocket.AcceptKeyGenerator; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/Handler.java b/web/src/main/java/com/lubarov/daniel/web/http/server/Handler.java index b9ffbdc..8f89373 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/Handler.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/Handler.java @@ -4,5 +4,5 @@ import com.lubarov.daniel.web.http.HttpResponse; public interface Handler { - public HttpResponse handle(HttpRequest request); + HttpResponse handle(HttpRequest request); } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/HttpServer.java b/web/src/main/java/com/lubarov/daniel/web/http/server/HttpServer.java index a85e864..91008dd 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/HttpServer.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/HttpServer.java @@ -1,8 +1,8 @@ package com.lubarov.daniel.web.http.server; +import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.util.Check; -import com.lubarov.daniel.common.Logger; import java.io.IOException; import java.net.ServerSocket; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/PartialHandler.java b/web/src/main/java/com/lubarov/daniel/web/http/server/PartialHandler.java index 0400009..e947113 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/PartialHandler.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/PartialHandler.java @@ -5,5 +5,5 @@ import com.lubarov.daniel.web.http.HttpResponse; public interface PartialHandler { - public Option tryHandle(HttpRequest request); + Option tryHandle(HttpRequest request); } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketHandler.java b/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketHandler.java index c49e2f0..32ef5d4 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketHandler.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketHandler.java @@ -3,9 +3,9 @@ import com.lubarov.daniel.web.http.websocket.WebSocketMessage; public interface WebSocketHandler { - public void onConnect(WebSocketManager manager); + void onConnect(WebSocketManager manager); - public void onDisconnect(WebSocketManager manager); + void onDisconnect(WebSocketManager manager); - public void handle(WebSocketManager manager, WebSocketMessage message); + void handle(WebSocketManager manager, WebSocketMessage message); } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketManager.java b/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketManager.java index 016c10b..5390fa1 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketManager.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/WebSocketManager.java @@ -1,9 +1,9 @@ package com.lubarov.daniel.web.http.server; +import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.stack.DynamicArray; import com.lubarov.daniel.data.stack.MutableStack; -import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.websocket.WebSocketFrame; import com.lubarov.daniel.web.http.websocket.WebSocketMessage; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/util/HttpResponseFactory.java b/web/src/main/java/com/lubarov/daniel/web/http/server/util/HttpResponseFactory.java index 3008f45..e66dfc0 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/util/HttpResponseFactory.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/util/HttpResponseFactory.java @@ -1,6 +1,11 @@ package com.lubarov.daniel.web.http.server.util; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TitleBuilder; +import com.lubarov.daniel.web.html.Xhtml5Document; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; import com.lubarov.daniel.web.http.ResponseHeaderName; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/util/LineSeparatorRemovingHandler.java b/web/src/main/java/com/lubarov/daniel/web/http/server/util/LineSeparatorRemovingHandler.java index 354d571..a44ad89 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/util/LineSeparatorRemovingHandler.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/util/LineSeparatorRemovingHandler.java @@ -1,10 +1,10 @@ package com.lubarov.daniel.web.http.server.util; +import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.sequence.ImmutableArray; import com.lubarov.daniel.data.sequence.ImmutableSequence; import com.lubarov.daniel.data.util.Check; -import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.RequestMethod; @@ -64,7 +64,7 @@ private static String getPercentEncodedBlock(String resource, int index) { while (index < resource.length() && resource.charAt(index) == '%') { Check.that(resource.length() >= index + 3, "% not follwed by two bytes in \"%s\".", resource); - sb.append(resource.substring(index, index + 3)); + sb.append(resource, index, index + 3); index += 3; } return sb.toString(); diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/util/StandardNotFoundHandler.java b/web/src/main/java/com/lubarov/daniel/web/http/server/util/StandardNotFoundHandler.java index 14ca691..a7cca5d 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/util/StandardNotFoundHandler.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/util/StandardNotFoundHandler.java @@ -1,6 +1,11 @@ package com.lubarov.daniel.web.http.server.util; -import com.lubarov.daniel.web.html.*; +import com.lubarov.daniel.web.html.AnchorBuilder; +import com.lubarov.daniel.web.html.Attribute; +import com.lubarov.daniel.web.html.Element; +import com.lubarov.daniel.web.html.ParagraphBuilder; +import com.lubarov.daniel.web.html.Tag; +import com.lubarov.daniel.web.html.TitleBuilder; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.HttpStatus; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/server/util/WwwRemovingHandler.java b/web/src/main/java/com/lubarov/daniel/web/http/server/util/WwwRemovingHandler.java index b1f627d..9d92d1a 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/server/util/WwwRemovingHandler.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/server/util/WwwRemovingHandler.java @@ -1,9 +1,9 @@ package com.lubarov.daniel.web.http.server.util; +import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.sequence.ImmutableArray; import com.lubarov.daniel.data.sequence.ImmutableSequence; -import com.lubarov.daniel.common.Logger; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse; import com.lubarov.daniel.web.http.RequestMethod; diff --git a/web/src/main/java/com/lubarov/daniel/web/http/websocket/WebSocketOpcode.java b/web/src/main/java/com/lubarov/daniel/web/http/websocket/WebSocketOpcode.java index 42a585e..c9f19f7 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/websocket/WebSocketOpcode.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/websocket/WebSocketOpcode.java @@ -10,7 +10,7 @@ public enum WebSocketOpcode { private final int encodedValue; - private WebSocketOpcode(int encodedValue) { + WebSocketOpcode(int encodedValue) { this.encodedValue = encodedValue; } diff --git a/web/src/main/java/com/lubarov/daniel/web/http/websocket/serialization/WebSocketFrameSerializer.java b/web/src/main/java/com/lubarov/daniel/web/http/websocket/serialization/WebSocketFrameSerializer.java index c678ec1..7b8d618 100644 --- a/web/src/main/java/com/lubarov/daniel/web/http/websocket/serialization/WebSocketFrameSerializer.java +++ b/web/src/main/java/com/lubarov/daniel/web/http/websocket/serialization/WebSocketFrameSerializer.java @@ -25,7 +25,7 @@ public WebSocketFrame readFromSource(final ByteSource source) { try { return WebSocketFrameDecoder.parseFrame(new InputStream() { @Override - public int read() throws IOException { + public int read() { return source.take() & 0xFF; } }).getOrThrow(); diff --git a/web/src/test/java/com/lubarov/daniel/web/http/parsing/MultipartParserTest.java b/web/src/test/java/com/lubarov/daniel/web/http/parsing/MultipartParserTest.java index 405417e..120fe19 100644 --- a/web/src/test/java/com/lubarov/daniel/web/http/parsing/MultipartParserTest.java +++ b/web/src/test/java/com/lubarov/daniel/web/http/parsing/MultipartParserTest.java @@ -9,7 +9,9 @@ import java.nio.charset.StandardCharsets; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class MultipartParserTest { @Test diff --git a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/ConnieWeddingHandler.java b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/ConnieWeddingHandler.java index b3c982b..ec2ee92 100644 --- a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/ConnieWeddingHandler.java +++ b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/ConnieWeddingHandler.java @@ -1,11 +1,11 @@ package com.lubarov.daniel.conniewedding; +import com.lubarov.daniel.conniewedding.admin.AdminHandler; import com.lubarov.daniel.web.http.server.Handler; import com.lubarov.daniel.web.http.server.util.DelegatingHandler; import com.lubarov.daniel.web.http.server.util.LineSeparatorRemovingHandler; import com.lubarov.daniel.web.http.server.util.StaticContentHandler; import com.lubarov.daniel.web.http.server.util.WwwRemovingHandler; -import com.lubarov.daniel.conniewedding.admin.AdminHandler; import java.io.File; diff --git a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/WeddingGiftsHandler.java b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/WeddingGiftsHandler.java index 0c31470..158a4d0 100644 --- a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/WeddingGiftsHandler.java +++ b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/WeddingGiftsHandler.java @@ -1,7 +1,6 @@ package com.lubarov.daniel.conniewedding; import com.lubarov.daniel.data.option.Option; -import com.lubarov.daniel.web.html.AnchorBuilder; import com.lubarov.daniel.web.html.Element; import com.lubarov.daniel.web.html.ParagraphBuilder; import com.lubarov.daniel.web.http.HttpRequest; diff --git a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminDashboardHandler.java b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminDashboardHandler.java index 702a626..2ca823a 100644 --- a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminDashboardHandler.java +++ b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminDashboardHandler.java @@ -1,6 +1,8 @@ package com.lubarov.daniel.conniewedding.admin; import com.lubarov.daniel.conniewedding.WeddingLayout; +import com.lubarov.daniel.conniewedding.rsvp.RSVP; +import com.lubarov.daniel.conniewedding.rsvp.RSVPStorage; import com.lubarov.daniel.data.option.Option; import com.lubarov.daniel.data.util.Check; import com.lubarov.daniel.web.html.Attribute; @@ -12,8 +14,6 @@ import com.lubarov.daniel.web.http.HttpStatus; import com.lubarov.daniel.web.http.server.Handler; import com.lubarov.daniel.web.http.server.util.HttpResponseFactory; -import com.lubarov.daniel.conniewedding.rsvp.RSVP; -import com.lubarov.daniel.conniewedding.rsvp.RSVPStorage; import java.text.DateFormat; import java.text.SimpleDateFormat; diff --git a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminSetupHandler.java b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminSetupHandler.java index 2485313..8a05734 100644 --- a/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminSetupHandler.java +++ b/wedding-connie/src/main/java/com/lubarov/daniel/conniewedding/admin/AdminSetupHandler.java @@ -9,7 +9,6 @@ import com.lubarov.daniel.web.html.Attribute; import com.lubarov.daniel.web.html.Element; import com.lubarov.daniel.web.html.Node; -import com.lubarov.daniel.web.html.ParagraphBuilder; import com.lubarov.daniel.web.html.Tag; import com.lubarov.daniel.web.http.HttpRequest; import com.lubarov.daniel.web.http.HttpResponse;