My thoughts as an enterprise Java developer.

Wednesday, August 10, 2016

Tight scoping of constants

How do you declare constants that are only needed in a small scope (function or smaller)? I declare them in the tightest scope as final with an all-caps name. I.e.:

final int THRESHOLD = 1000;

That coveys the intent that it is a constant but minimizes scope.

Disable new UI components until the user has had time to react to them

How often do you use a program, decide to take an action (I.e. Press Return), and then have something popup and use your action before you even have a chance to read the popup? I hate when that happens because I don’t even know what I told the computer to do.

Input on a new UI element should be disabled for a short time to ensure that the user actually wants to take action on the new UI element. The delay has to be just long enough for the user to realize that the action may do something differently and not too long to slow down users who know that the popup is coming. So the delay should probably be a few hundred milliseconds.

Saturday, July 23, 2016

devopsdays 2016

There was a lot of useful info but these are the things that stuck out to me.
http://www.devopsdays.org/events/2016-minneapolis/program/

Overall

As a developer it seemed that vast majority of the content was for people with an ops focus. We need to help with better content for the dev side of devops. Based on a raise of hands the split was about even for conference attendees.

Working with Marketing and Sales:

  • Invite to demos. Record video and details in documentation so they can review later
  • Roadmapping meetings with representives from all groups
  • Get rid of the game of telephone and bring everyone together. Talk to other groups directly instead of depending on others to always filter their content.
  • Know other groups: from goals to pains

Making good choices with software

  • Code is the enemy
  • Resist software sprawl
  • Control/friction for new things on critical path
  • Correlate risk with startup timeline and use risk on differentiators
  • Replacement plan must prioritize getting rid of the old
  • Use humans for core features
  • Celebrate removal, deprecation, and refactoring because celebrated patterns will be repeated

Open Spaces

We need more developer focused discussions.
I started a discussion on monitoring for developers. Others used different tools like Datadog and Splunk that may be interesting to check out. Some developers had much less access to production – especially if production had sensitive data and needed to have PCI compliance. It is important to use both tools and provide instrumentation monitoring in code.
In internal discussions another developer-focused topic thrown out was how development deals with ops scripts. They aren't our main focus and are often written differently than a developer would write them.

Bias

I'm interested in both the methodology and outcome of https://implicit.harvard.edu/implicit/takeatest.html

Friday, February 13, 2015

Thursday, February 20, 2014

CodeCombat

CodeCombat: "Learn to Code JavaScript by Playing a Game"


Tuesday, January 14, 2014

Preferences/Settings should be minimized

Allowing a user to change how an application works by only going into preferences/settings should be avoided.

  • Most users won't even look there so features will be underused which is a waste of development resources.
  • Try to prompt the user to change their preference when they do a related action. i.e. if there is a preference for the number of items to show on a page and the user changes the dropdown to show a different number of items on the page then ask the user if they would like to update the preference to the new value.
  • When prompting the user, avoid making the user click an extra time. Instead of doing a popup, just add text that prompts the user.

Tuesday, December 10, 2013

More interesting wait screen

I have seen many wait screens that do the job but are boring. I think it might work a lot better to make a wait screen that displays something interesting. Maybe draw a fractal or present a simple game. If there is something interesting, the user shouldn't mind the wait as much.

Friday, December 06, 2013

U.S. Supreme Court to decide whether software can be patented | Reuters

U.S. Supreme Court to decide whether software can be patented | Reuters: "The U.S. Supreme Court on Friday agreed to decide on a key software industry issue of which kinds of computer-related software are eligible for patent protection."

Thursday, October 17, 2013

The type of work that I like to do

I like working on detailed, complex, and/or interesting problems on a product that I know well, has a large codebase, and has to support high load. I call those “guru-level” problems.

Tuesday, October 15, 2013

Change comments to logs?

It seems that almost all of the time, comments in a method work better as logging statements.
Reasons:

  • The log statements still give clues to the developer about what is happening
  • The log statements also give that information to someone looking at the logs
  • Since log statements will be seen more, they are more likely to to kept current

Thursday, October 10, 2013

Sitting Too Much Could Be Deadly, Experts Say | Fox News

Sitting Too Much Could Be Deadly, Experts Say | Fox News: "Scientists are increasingly warning that sitting for prolonged periods — even if you also exercise regularly — could be bad for your health. And it doesn't matter where the sitting takes place — at the office, at school, in the car or before a computer or TV — just the overall number of hours it occurs."

" "After four hours of sitting, the body starts to send harmful signals," Ekblom-Bak said. She explained that genes regulating the amount of glucose and fat in the body start to shut down."

One idea that comes to my mind is to setup a standing height desk. The computer would be setup with remote desktop so that employees using it could connect back to their workstation and do work as if they were at their desk.  That cube could then be reserved like a conference room so that employees could use it for a few short periods during the day.  Optionally, the cube could have a tread mill right in front of the computer so that employees could also walk while working.

Thursday, October 03, 2013

A Simple Rule to Eliminate Useless Meetings | LinkedIn

A Simple Rule to Eliminate Useless Meetings | LinkedIn: "materials that would typically have been presented during a meeting be sent out to participants at least 24 hours in advance so people can familiarize themselves with the content"

"begin each meeting by providing attendees roughly 5-10 minutes to read through the deck"

"Once folks have completed the reading, it's time to open it up for discussion.There is no presentation. It's important to stay vigilant on this point as most people who prepared the materials will reflexively begin presenting."

"If the material has been well thought out and simply and intuitively articulated, chances are the need for clarifying questions will be kept to a minimum."

XSLT example to iterator through a comma separated list

<?xml version="1.0" encoding="UTF-8"?>
<comma>1,2,3,4,5,6,7,88,99,100</comma>

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
    <xsl:template match="/">
        <xsl:call-template name="splitcommas">
            <xsl:with-param name="comma" select="comma"/>
        </xsl:call-template>
    </xsl:template>
 
    <xsl:template name="splitcommas">
        <xsl:param name="comma"/>
        <xsl:choose>
            <xsl:when test=" not(contains($comma, ','))">
                <value><xsl:value-of select="$comma"/></value>
            </xsl:when>
            <xsl:otherwise>
                <value><xsl:value-of select="substring-before($comma, ',')"/></value>
                <xsl:call-template name="splitcommas">
                    <xsl:with-param name="comma" select="substring-after($comma, ',')"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
 
</xsl:stylesheet>

Wednesday, October 02, 2013

Keeping sensitive data out of logs

When a product has logging there is a risk that sensitive data(i.e. passwords) will make it into the logs. How do we reduce that risk?

Logging an object or adding toString to a class might not obviously leak sensitive data so it is probably better to make sensitive data obvious. i.e. If sensitive data is stored in a Properties object, as soon as the properties object is obtained, it should move sensitive data to a separate location (i.e. a separate String variable in the class) and remove the sensitive data from properties so it is obvious that there is sensitive data.

Google security exec: 'Passwords are dead' | Security & Privacy - CNET News

Google security exec: 'Passwords are dead' | Security & Privacy - CNET News: "looking ahead, "our relationship with passwords are done," and that "passwords are done at Google.""

"any startup that still relies on standard passwords needs to ensure that it has an abuse team set up to deal "with customers getting compromised." "

"anyone starting a new technology company should be sure that one person is designated to focus on security and privacy, and that one of the first 25 employees should work full time on security and privacy."

OSGi

OSGi Tutorial: "What is the OSGi Service Platform? A Java framework for developing (remotely) deployed service applications, that require: Reliability Large scale distribution Wide range of devices Collaborative" It supports multiple jar versions so each library can use the version that it wants.

Tuesday, October 01, 2013

Semantic Web: Resource-Oriented Architecture Patterns for Webs of Data

Resource-Oriented Architecture Patterns for Webs of Data:

Start on page “1” (about 60%).

"Whatever domain we work in, we can imagine translating the data elements we care about into named resources:
http://example.com/account/user/jsmith,
http://example.com/employee/id/12345,
http://example.com/order/id/101-276-32, or
http://example.com/product/id/upc/800314900528.
These names represent good, long-lived, stable identifiers for these disparate domains."

"Avoiding data extraction, transformation, and loading (ETL) steps reduces the burden of having multiple copies of our information repositories. We can achieve the goals of a Master Data Management solution while simultaneously avoiding the unnecessary limitations of a prescribed format."

"When you point your browser at any random website, it does not “know” anything. It issues a standard, semantically constrained verb, called GET, to a named element and responds to what comes back. “Oh, an HTML document! I know how to parse that.” or “Oh, a plain text file, I know how to display that.” It is reactive. It does not know. Knowledge is a form of coupling."

"The client does not know what it is going to get, it reacts to what is returned. It knows how to parse standard types. And from there, it discovers what options to present to the user (if there is one)."

"The media type should be designed to support hypermedia links. This should identify the resource itself, as well as its related resources. Clients will be able to “follow their noses” through your hypermedia representations. In the following example, we can find our way back to the account resource itself (useful if we did not fetch it initially but were given the representation as part of an orchestration), its recent orders, as well as individual orders.
1 < a c c o u n t i d = " 12345 " >
2 < l i n k r e l = " s e l f " h r e f = " h t t p : / / e x am pl e . com / a c c o u n t / i d / 1 2 3 4 5 " / >
3 b s l e t t e n < / name >
4 < s t a t u s > g o l d < / s t a t u s >
5 < r e c e n t O r d e r s h r e f = " h t t p : / / e x am pl e . com / o r d e r / a c c o u n t / i d / 1 2 3 4 5 / r e c e n t " >
6 < o r d e r i d = " 141234541234 " h r e f = " h t t p : / / e x am pl e . com / o r d e r / i d / 1 4 1 2 3 4 5 4 1 2 3 4 " >
7 < i t e m s > . . . < / i t e m s >
8 < / o r d e r >
9 < o r d e r i d = " 452354234534 " h r e f = " h t t p : / / e x am pl e . com / o r d e r / i d / 4 5 2 3 5 4 2 3 4 5 3 4 " >
10 < i t e m s > . . . < / i t e m s >"

"A slightly more verbose representation [of a collection]:
1 < a c c o u n t s h r e f = " h t t p : / / e x am pl e . com / a c c o u n t / s t a t u s / to p " >
2 < a c c o u n t i d = " 12345 " u s e r n am e = " j o j a l e h t o " s t a t u s = " a c t i v e "
3 h r e f = " h t t p : / / e x am pl e . com / a c c o u n t / i d / 1 2 3 4 5 " / >
4 < a c c o u n t i d = " 34246 " u s e r n am e = " bkemp " s t a t u s = " a c t i v e "
5 h r e f = " h t t p : / / e x am pl e . com / a c c o u n t / i d / 3 4 2 4 6 " / >
6 < a c c o u n t i d = " 77323 " u s e r n am e = " bl u u " s t a t u s = " d i s a b l e d "
7 h r e f = " h t t p : / / e x am pl e . com / a c c o u n t / i d / 7 7 3 2 3 " / >
8 < / a c c o u n t s >"

"The clients will not have to know how to paginate across arbitrary collections, they will simply discover links related to the collection with a rel type of next or previous. The server still drives URL layout, which is what we want in a hypermedia system."

This may not be as useful for external systems but seems more useful for internal systems where you can make your clients use the extra info.

The full book is available for $20.

Wednesday, September 25, 2013

Database Changes Done Right - The Daily WTF

Database Changes Done Right - The Daily WTF: "Unlike application code, you can’t exactly drop a bunch of files in a folder and proclaim that a new version has been successfully deployed. You also can’t just put back an older set of files to rollback your changes.

The only way to change a database is by running a SQL script against that database, and once you’ve done that, there’s no going back. You can run another SQL script to change the database again, but the only way to truly rollback changes is by restoring the entire database from back-up."

"Database versioning is as simple as maintaining a metadata table with two columns: Unique ID and Execution Date. Before executing a change script, simply check the table to see if the script has been executed already and, if not, run it and stored the script’s unique ID and date."

Friday, September 20, 2013

Integrating ALM: Lessons Learned Deploying Tasktop at Nokia | Dr Dobb's

Integrating ALM: Lessons Learned Deploying Tasktop at Nokia | Dr Dobb's: "This is one of those situations where an incremental approach with early user engagement -- where you have a chance to adapt installation or orientation materials -- pays off. If you pay close attention to the sorts of things that cause people grief during development, you can deal with them by creating either a development story (which changes the UI in some way) or a training story (for which you develop or enhance your training materials)."

"The moral here is to consider carefully every case of new user confusion, as it may be a warning of things to come."

"Software that supports complex tasks will probably require an investment in time for users to become adept. A well thought out UI and training material will allow users to perform basic tasks quickly and gain immediate benefit from their first steps onto the learning curve."

"Make any training screencasts short -- even if they're well structured, their perceived size can be off-putting (the user sees a 40-minute price tag on the screen and decides to set aside their learning for another day that never comes)."

Comments for people considering software engineering

I enjoy all the new problems & industry changes, that we can make a huge difference, and that it is usually quick to see the results of my work.
I didn’t expect my college degree to teach me so little of what I use each day – they are only able to teach the basics and we have to continuously learn new stuff.
I suggest going the extra mile if you only do the minimal coursework you won’t excel.  Do more and better than is required and/or side projects to push the boundaries of what you know and practice learning on your own.  Get involved in projects, research ideas, and try out new skills.