Google+ Badge

Saturday, March 18, 2017

First week with Kotlin

Got my first nearly full week of Kotlin in place. I can't say full week as I started the new job on a Tuesday and there was training involved too. I have the iOS / Swift code to follow as well.

I needed to grab the colors used by the client along with redoing one of the main graphics as an SVG image. Previously I had Adobe Illustrator but I don't have that now so I used Vectr (I know, odd spelling) which was fine for the minor image I needed to so. I also found Krita for graphics editing and I used that to size the Android icons. I used another online helper program to do the new rounded version of the icons as well. First time I have created a set of those.

When working from home I used my personal PC to play music via Media Monkey + a helper program that exposed a web site for me to pause / skip songs. Don't have that working in an office so I started using Clementine but it has a bug where it double plays WMA songs which got annoying so I gave Vox a shot. Nice thing is I could drag and drop the playlist right out of Clementine into Vox and Vox has a plug-in so I can use the multi-media keys on the Microsoft Natural 4000 keyboard to play / pause and change the volume.

Speaking of the keyboard, the first one failed. The space bar would either not work or it would repeat spaces forever. Took it back to Microcenter who does things in what I think is an odd manner. I just wanted to swap keyboard - bad for good - but they don't do that. They will refund the bad one and give you store credit then you have to go find the replacement and go back through the line again to buy it. Seems silly to me but I have a working keyboard. I have used this style of keyboard for a long time. Sure, they have died on me in the past after years of service but I have not had a bad one out of the box.

While at Microcenter I also got a small laptop bag and a mouse pad. They want me to take the laptop home every night. No big deal, makes it easier if I need to work from home anyway. On that subject I ordered a USB C to mini-display port and USB-C to USB adapter to have at home so when I do work from home I can use my big monitor, keyboard and mouse. That showed up Friday from Amazon and they work just fine. There is a rumor I will get a separate power brick to have at home as well.

Back to Kotlin. It is very handy that when you copy in Java code it will auto convert it to Kotlin. Makes learning stuff a ton easier as well. Kotlin sure uses a lot of lines of code to do the same thing. Copied in an enumeration where I had a couple of extra fields associated. Kotlin does it with a one line constructor. Since a lot of the work I have done has been the basic setup I have not really gotten deep into Kotlin yet.

I got the first couple of screens ready, login and then the drawer based menu system. I stubbed out fragments for all the main screens and implemented the basic help screen as well. More colors, drawables and a few layouts. Also battled getting the actionbar colors I wanted with some help from Reddit. Demoed the app to the team and they were happy how far along I had gotten it.

The build.gradle files were my next target. I added some booleans so use the BuildConfig file to control access to menu items. I also setup a file so I can run tasks to update the build version string and build number for the command line as well. Tossed in some more libraries I knew I will be using in the next steps including play services so I can get a unique ID the Android way.

Next up is getting Retrofit in place. That is where I will start next week. Need to find some decent tutorials on using it with Kotlin. Will tie in some dependency injection as well. There is some documentation for our REST calls but I am also using Charles Proxy to monitor what iOS is doing. Documentation gets out of date so seeing the raw JSON is usually the way to go. Plus I can see all the data in the request header and the response.

I have not really looking into the Swift code yet. I have been in there to grab some assets including a special font they use. Of course I have the app working on the iOS simulator so I can check out the program flow and screen layouts.

I also configured Slate so I can have a configuration for single screen when I detach at work and another configuration when I am running multiple monitors. Very handy to have all the windows move to the correct position when you start up as the Mac is great at starting the programs again but it sucks at getting them in the proper layout.

Friday, March 10, 2017

Moving to Kotlin

I am going to start a new job and my goal is to go Kotlin. I have been writing Android apps in Java for a number of years. Part of that time I also wrote iOS apps in ObjC. At the job I just left I only did Java Android programming.

I learned a lot at the job including ButterKnife, Dagger, Google Analytics, Flurry Analytics, Event Bus, Twillio, BrainTree, Timber, Vector Drawables, and Glide. All of those things make Java programming easier. I also used a number of things that I used at previous jobs including Volley, GSON, AndroidSVG, and  Google Play Services.

Now it is time to move forward into the land of Kotlin. I have been using it for a number of smaller command line utilities. I had used Python for things like that in the past and I found I can whip them out just as quickly in Kotlin plus it let me learn a new language that I could also use for Android.

I then stepped up and converted a small app that I had done in Java to Kotlin using the Anko library and then I wrote an animation test program from scratch from Kotlin using XML for the layout. Gave me a good peek into a number of aspects of Kotlin. I learned how to setup Kotlin for Android. My utilities were done with IntelliJ.

The old company was moving away from native development so there was not desire there to change to a new native language even if we did it bits and pieces at a time. Sure there was no harm doing some one off utilities but no way I was going to get Kotlin into the main apps.

Next up was taking some time to learn what libraries I might be able to use with Kotlin. There was an excellent talk by Jake Wharton about Okio. It started from the base of the pyramid and worked all the way up through OkHTTP, Moshi and Retrofit. Gave me a great understanding of the entire tree and what it is much better than NIO. Excited to use this chain of tools and to get away from the massive boilerplate of Volley when making REST calls. Annotations are your friend.

Don't know if I will use DSL and Anko but I might use the SQLite aspects of it. I like some of what it offers but also like seeing the preview of my layouts in XML. I do plan on using ConstraintLayout as I have used MigLayout for Java desktop and Autolayout for iOS so I think I can pick it up pretty quickly. I can pull off all kinds of things with RelativeLayout, LinearLayout, TableLayout, GridLayout and PercentLayout bit it seems silly to keep mixing all those together.

Scary to make all these changes at the same time. Kotlin will have me looking up how to do some things I already know to do easily in Java and general syntax. I have a decent base of knowledge now but I will probably fall back into old habits for speed. I know there is a lot of new syntax to use with Kotlin. Of course working code is what counts, using every trick may tighten up the code but is not a requirement. As I learn more I am sure I will go back to fairly fresh code and update it. Refactoring as you learn is a good idea.

I have watched enough Kotlin videos to know what bits and pieces are there so I will attempt to use as much as I have learned. I also think the iOS code written in Swift by the current developer will help me make the switch as it has a lot of the same programming patterns used by Kotlin.

Having a solid Android understanding is huge. I already know what I can do in Android, know about Activity and Fragment life cycles, know what the various Views do and can do recycler views with multiple row types. It will be more about learning syntax of a language and how to tie things together using Kotlin patterns.

Nervous and excited for this new life adventure. Not going to miss the old semicolon and constant null pointer checks. Will take a little bit but I bet my programming speed increases and I actually end up writing less code than I have been writing in Java.

Friday, October 7, 2016

Got a new developer laptop, here are my thoughts on it so far

I work from home and by the end of the day I am done sitting in my home office and am ready to spend some time around the family. I also work on some side projects and take some time to learn new things on my own outside of office hours.

I want to pick up more Kotlin programming so I have been playing around with that. Having a laptop I can use in the family area made a lot of sense to me. I looked over a ton of machines, tried some out at Microcenter then did a lot more research.

There were some initial requirements:
15.6 - 17.3" screen
16GB RAM minimum (OK with manual upgrade)
256GB SSD minimum (OK with manual upgrade if multiple SSD slots)
Decent video card - nVidia preferred
Keyboard must have numeric keypad along with HOME, END, PG UP, PG DN keys
Back lighting on the keyboard
Ports to support multiple monitors

I started with the ASUS ZenBook Pro UX501VW. Thought it would be great to have 5121GB SSD, no moving parts HDD. Nice and light as well. The problem? No END key, the power key is in that place. Of course you can turn off the num-lock and use that end key but I use the numeric keypad a lot as well. Plus it had a lot of glare to the screen and the reviews point out the color accuracy sucks especially for yellows. I tried one out at Microcenter and eliminated it but was very sad about that. It also has a pseudo 4K screen that does not play nice with all apps. Windows needs to catch up.

Lots of people liked the MSI models. They require you to use the FN key to get to HOME and END so those were out as well. I looked at various Acer and HP models but each had a fatal flaw. I was getting close on some of the HP models. They seemed to have good screens, keyboards and sound systems. But I just could not do it. Once you starting adding touch screen, the memory and SSD the prices started to jump quickly.

Then I found the Asus G725VL on the Microsoft store for $500 off. Hit all the requirements

17.3" touchsreen
24 GB of RAM
256 GB SSD
965M nVidia video card
Full keyboard with numpad, separate HOME, END, PG UP, PG DN keys
Fast charge USB port that even works when laptop is off
Multiple ports for extra monitors
CD/DVD drive

Plus it is the Microsoft Signature Edition so no bloatware. They kept that promise. There was nothing for me to uninstall. Came from MS store with free shipping. Odd thing is they shipping in just the Asus box - no extra padding at all. At least we had to sign for it as it was very obvious what was in the box so you would not want it just sitting on your front steps. At least the Asus box is nice and thick and was not damaged at all.

Machine boots in 10 seconds. Runs like a champ, is nice and quiet. Keyboard has good travel and 3 levels of back lighting. Screen is semi-gloss and looks good in everything but direct sunlight. I really like the touchscreen as well. When I do Android work I can pop-up the emulator and treat it like a real device when it comes to scrolling, tapping, long press and swiping. It does not support pinch zoom. The PC does for Windows but does not for the emulator. It is in Google's list to address.

Using the touch screen is nature in Windows as well. We are all pretty used to using a touch device such as a tablet or a phone so you want to do it on your computer screen as well. Tapping a button or scrolling works great.

I have had no issues with wireless internet connectivity. It also has standard port to hook right in to a wired connection as well.

As stated boot times are quick, starting any program off the SSD is very fast. Android compile speeds with the source code, SDK and tools off the SSD are are top notch in speed as well.

What is wrong with it?

1T HDD is only 5,400 RPM. Wish it was 7,200 but since I can fit all the stuff I want to access quickly I can fit onto the 256GB SDD. I put music, videos, images, utilities, etc. out on the HDD.

It is heavy but I don't plan to haul it all over the place. It may go to an offsite meeting from time to time but that is about it. I would not recommend this for a college student to haul about. The power brick is just that - a brick. Needs to be big to power this beast.

The trackpad itself is responsive but the buttons seems to miss clicks at times. Still trying to get used to that. Track pad is nice and big so you don't have to lift and scroll over and over. Responds to multiple finger scrolling and the like as well. It does show finger prints as well but you tend to slide around so they kind of smear on to the pad.

While the back lighting is good the font used on the keys is a bit much on the Star Trek / gaming side. The font could be more readable. I touch type quickly so I generally and not looking at the font but it is still weird.

Sound is just OK, on the muddy side and full volume is way too low. You can tweak some of it with the Asus Sonic Sound Studio control panel. Headphone volume is great. Good thing there are separate settings for that vs. speakers so  you can set speakers at full volume and headphones at 50%. I was able to get headphones to sound respectable. Still need to work on the speaker side of things.

I know new Pascal based machines are coming out. They cost a whole lot more and were very game oriented. I needed something I could game on but was mainly for Android development. This machine hit all the big items on my list. I am very happy with the purchase. There is space under a one screw to remove panel to add another SSD if I need it. I have a feeling the current configuration will last a pretty long time.

At first I was trying to figure out how to right click on the screen. I thought maybe two fingers or quick taps. Turns out you long press then a rectangle will start to grow from where you finger is then a release will show the right mouse click menu. Windows realizes you use a finger so there is more spacing between the menu items as well for easier tap zones. Would not game doing this but it works fine for doing user interface based interactions.

No regrets on this machine. Doing everything I ask of it. I was not expecting perfect and it is not but it hits the majority of the areas I need, just missing some minor things but none of those things were on my must must have so I don't feel I settled.

Compared to the new stuff coming out this is a B for gamers, it is a A for developers.

Sunday, May 22, 2016

Google I/O makes owning and Android device depressing

I watched a number of the Google I/O 2016 videos on YouTube. Tons of new stuff coming our way which is great. I am happy that Google is innovating in a lot of areas. So why is it depressing? Because I have a Samsung Note 4 phone that is still back on 5.1.1. My wife's Note 2 is on 4.4. Only 7.5% are on Marshmallow.

It is great that Google broke out some of the features like the new constraints based layout manager to support libraries but a lot of the other features I can't use because Samsung + TMobile has not updated. It sucks to be stuck in the past.

My next phone will be a Nexus phone so I can get updates close to the speed that iOS users are accustomed to getting. I know I can't code against all of them but at least I can enjoy them and I can test things like multi window support on my devices.

I have to be honest with myself. The things that Samsung added such as the stylus and multi window I don't use that often. Not all apps support them. I am happy to see Google adding that as a base feature to Android especially for tablets when I think it will be very helpful. I can give up the stylus for a Nexus phone. I like the large size of the Note but there are similar Nexus devices out there.

This really is an area I totally wish Android was more iOS like. New version of the OS and pretty much everyone can get it nearly right away. Yes, at some point you have to cut off devices that are older than 4 or so years. Otherwise here you go, enjoy all the new features. Instead I sit here not even enjoying the stuff they talked about two years ago.

At least my tablet has Marshmallow on it so I can test there.

Samsung, you do some cool stuff but then you do some real a-hole stuff so I have to move on.

Monday, February 22, 2016

So far Windows 10 has been a big thorn in my side

I started with my main PC - an i5 with 16g of RAM. Hand built box with a newer nVidia graphics card. I upgraded from Windows 7 to Windows 10. Had to find one off drivers from my sound card but got that working.

Then I made the mistake of using the MS website to order an Xbox One for my sons for Christmas. MS switched my login to use that account. I did NOT want that to happen. Then my network card got confused and it could not see the internet so I could not log in. After many hours of screwing around with way too many tools I finally was able to create a different admin account, get the network working again and then log back into my main account with the MS website password. I was hating Windows 10 at this point and I wasted way too many hours.

I got my sons machine, that was on Windows 8.1, upgraded next. Another pain. Everything was working until yesterday. This is also a hand built machine. Now I just get a black screen with the basic white mouse cursor running about. Tried for a couple of hours yesterday to get that resolved but no such luck. Might have to reinstall I don't know.

My wife's parents installed Windows 10 on their box and then lost the ability to talk to their Android phone and Kodak camera. This is a refurbished eMachine from Microcenter. I was able to get things back up and running by doing some manual driver installs. Still don't trust everything but it is working for now. Also a Windows 7 upgrade that was an upgrade from Vista. The main menu was broken on this machine until I uninstalled drop box and reinstalled it. Took hours to figure that out as well.

Looked up my wife's Lenovo laptop and it is recommended that you DO NOT upgrade this box as you will lose sound. They just are not going to do drivers for it. Since I have had all the other issues really wanted to skip this box too.

A friend upgraded her newer Lenovo laptop to Windows 10 and then brought it to me as it was all screwed up. I upgraded every thing I could on the machine, mainly Lenovo drivers, and got it back in shape. Since then it has been working OK for her, fingers crossed.

Not doing either of my son's laptops. Older laptops and he attends a virtual school so having them down would be a huge hassle. They will be left alone until they die. Both on Windows 7 at this time and they run just fine using that.

Finally I am skipping the family file / print server. Windows 7 on another refurbished eMachine. Just as stated it is file / printer server that does M-W-F backups to an external HD. Everyone stores everything out there so you can use any machine in the house to get to things. It also needs to be running at all times. Not going to risk Win 10 screwing that up.

I just can't recommend Win 10 as an existing machine upgrade. Yes, once I got it going on my main PC it has been fine. I do think MS is being way to snoopy with this update as well. I disabled all the call home stuff I could on all the machines that I did upgrade. But I keep running in to new issues. Have to get my son's machine out of black screen of cursor only mode. Did the boot from physical media and tried to get it to repair things but no luck there yet even. Lots of posts about this issue, some get it fixed, others do not.

You will have something broken. It will take you hours to figure it out. You will cuss and scream at all of this. Sure Win 10 is fine on a new machine but upgrading has been very painful and I now I have a machine that is down again. Plan on cussing at it tonight some more trying to get it back to life. I will not risk any more machines in my house and I have warned all family and close friends to not update and just to ride out Windows 7 until they get a new machine.

Friday, February 5, 2016

Headhunters, can't live without them, can't get them to stop asking inane questions

I get contacted by head hunters / recruiters / talent hunters at least once a week. A lot of it is blanket emails from LinkedIn but some from local folks I have worked with in the past. I am not looking for a job so this is all cold calls hoping like heck you want to change positions.

Head hunters need to clean up how they perform cold calls. Yes, some time in the past I have done Basic, Delphi, Clipper, C/C++, C# and other languages but I have not really touched them in the past 5 years. It is silly to approach me for a job where the company is looking for a Delphi programmer. I doubt they want to talk to someone who used it for a few months 7 years ago. Keyword searches without also using a timeframe context is a waste of everyones time.

Quotas are stupid. I work remote so I don't drive any place during the day. I can tell a head hunter that I am not looking for a job but they want to take me out for coffee anyway. Why? They can write it off and hit some "talked to a developer quota" they have. Why would I take time off work to do that? When I was looking I did have lunch with a few head hunters so I could give them a better idea of what I was looking for and to get a feel for the current job market.

When I was looking to change jobs I had one head hunter try to send me to interviews to up her count. She did not care about me or the company that was looking to hire. I was told the name of the company and I knew it totally underpaid for the area. They have been advertising for senior level C# developers for same salary for years. Second it was C# which I had not touched in years and I specifically told her I was only interested in mobile work. She was getting mad at me for not wasting my time - it would have been a $35k a year pay cut in a language I was not interested in doing. She said it would give me interview practice. What? Totally waste my time and their time but she got a notch in some ledger for trying. I told her the other company would be mad at her for even sending me over. They probably pull 2 or 3 people out of important work to talk to me. She called me back a few days later to apologize but I will never work with her or the firm she represents ever again.

It may sound cool to get approached by five head hunters in a week. Looking at it logically you can easily see a pattern. There is one job opening and they are all trying to fill it. A business in the area first attempted to fill it using internal HR staff. When that did not work they reached out to a few trusted firms. Once those did not pan out they shot gunned the head hunter pool. Now they all want to fill this position. Do you know why it is open? Because the hiring company has a bad reputation in town. Either they under pay or they have a less than stellar work environment.

I have been called to fill a position I previously had. Listed right on my resume and on LinkedIn. I left for a good reason and don't want to go back. Not that I have burned a bridge, just would not work there again. When they call they give me some generic "local company in the financial industry" and I say "Is it Company X" and they fully admit it is. Tell them I worked there before and I know the person who left leaving this vacancy. They tell me management changed since I left and I inform them yes, it changed for the worse as my buddy who just left filled me in on the current set of issues.

It is pretty easy to get a bad reputation in town as it really is a small developer community which is even smaller when you are dealing with mobile developers. Once you have a bad name you are not going to get primo talent again. I let the head hunters know they are going to need to reach outside the area to find someone.

Which brings us to another point. If you get called about an out of town position guess what happened? They have scared off all the local talent so they are reaching farther out. Since I have been watching this pattern locally I would be really scared to take a job in another area of the country. Company either underpays and you don't understand the local economy to know that or they have a crappy environment. Either way you need to run away from them. If you are a novice developer just looking to get into the business it might not be a bad idea to get some experience under you belt but if you have experience it probably is not a good idea.

Wednesday, January 20, 2016

Hey, I want to be an Android programmer. Tell me what to do.

How many times have you seen a post on various forums about someone wanting to be an Android programmer? Is there a simple answer? Of course not, programming is not easy and there are piles of things you end up doing during any given day.

Wait a minute there! Isn't all I have to do is learn Java and some Android libraries? Oh, how we all wish but there is a lot more going on and that is just the start. Yes, you need to learn Java (or Kotlin) and you need to learn about the SDK as well but there is a ton more.

Today it hit me I had been in the following in just one day:

  1. Java writing the main app code
  2. Kotlin working on a utility program to convert iOS plist to Android format
  3. Groovy because I was editing the gradle build scripts
  4. Bash as I updated my Java version and needed to change my .profile 
  5. Various Linux terminal commands
  6. Various Git commands on command line and in Source Tree
  7. Vector Graphics as I was working on a new image I needed
  8. XML for the Android layout manager, string tables and color tables
  9. PNG images for new icons
  10. REST calls
  11. JSON parsing for REST call responses
  12. Sublime text editor creating and running macros against text files
  13. File manipulation in Finder
  14. Looking at ObjC in Xcode that I am converting to Android
  15. Using IntelliJ, Android Studio and Xcode

It is not just learning Java and an API. I could not get Adobe Illustrator to do exactly what I wanted to I directly edited the SVG file. How many languages and file formats have I been in today already? Piles of them and I was able to quickly do the list above and I am sure I missed stuff.

Obviously Java, Kotlin and Groovy have a similar syntax so it is not like I am switching from assembler to JavaScript mentally but there are differences so you do have to perform a mental switch.

I don't mess with graphics every day but we have been setting up a number of build flavors this week so I have been doing a lot of graphics work along with "normal" programming. Honestly there is no such thing as normal. I shift around all the time. I decide to write the utilities in Kotlin as something new to learn, it was not required by my job. Glad I did, gives me a better appreciation of the language. Really want v1 to move out of beta before I use it for my Android apps.

Developers have to understand more than just the language they are using. You end up using a lot of tools like Git, Paint.NET, Adobe Illustrator, Adobe Photoshop, different IDEs, text editors and various utilities. Plus you get to keep the OS on your machine updated along with IDE, SDK, Language versions and tools.

Never know when the boss will need your help on a spreadsheet, document or power point as well. You have to be able to run at least a minimal feature set in a ton of tools just to keep up with life as a developer.

I am unsure how a new developer even gets started. I have amassed a large quantity of knowledge over the years. I can apply that to Kotlin when I experimented with it this week. I already knew the IDE, the .plist file format, XML, how to use collections, etc. I was picking up a new syntax but when you start from scratch you are tossed into a tank of sharks. The only way is to start small. Just work on one concept then move on. If you try to do an entire game or program with multiple screens you will go nuts before you get very far.