Saturday, September 19, 2020

Replace carpet with Luxury Vinyl Plank

We really love the general layout of our house but there are still a number of rooms with carpet.  As with our previous house, I'm slowly replacing carpet with some type of solid flooring.  The ease of cleaning and lower dust retention are big pluses for me.

Here is my first attempt at replacing carpet with Luxury Vinyl planks though.  I've done some tile in this house previously.  I did 3/4" solid hardwood in our previous house along with a bit of vinyl sheet flooring in the bathrooms and laundry room.

Initially, I was going to just do a floating floor but after a few conversations I was convinced to go ahead and do glue down.  The main reason was that some have experienced gaps over time when there are heavy items on the flooring. Since we have some heavy book cases, desk, etc - I'd rather put the extra effort in now and hope it prevents the problem rather than not try and then wish I had.

I will say that one challenge is that we tend to do things out of order.  In this case, I had purposely not painted most of the rooms when we bought the house because I knew I wanted to redo a number of things and figured I plan them together.  That would work nicer if I had painted before putting the new flooring in.  This was a bit due to getting my wife a "surprise" desk that she has been waiting on for some time to replace the cobbled together solution previously in place.

We ended up just partially assembling the desk (which is U shape when complete) so that we can move it around while working on the flooring and painting.  

Here you can see the 99.99% completed flooring along with many of the items I had to juggle during the process.  I know the general recommendation is to run the flooring with the planks length in the same direction as the rooms largest length - I didn't do that here.  It was really a matter of practicality than anything else.  I don't think it really is noticeable with this particular flooring.

I do recommend doing just 1 or 2 rows on the initial start because getting those done just right will make a big difference in how well the rest of the floor goes.  Once the first 2 rows dry well, you can be sure that they won't move on your even if you have to pry or tap on things.  Also, the unopened boxes made great weights to sit on the finished floor to make sure it was in glue well.






In general, we really like the flooring. Gluing down was extra work and much more time consuming though.  I'm hoping that improved looks/longevity and better wear characteristics will make it worth it.  

We used the recommended Bostic glue which works fine.  It is a bit messy as expected.  We usually did a chalk line for 2 rows at a time.  So generally we were able to do about 6 rows in a full day.  It took up to about 30 minutes time for the glue to set before the planks could be installed. With the right tools, strong helpers and patience you could do more and quicker.  

I generally used a miter saw to cut the planks which are 12"x24" x 8mm thick.  A box of these planks is pretty heavy compared to other stuff I've worked with.  These particular planks are a solid vinyl which adds weight.  

I'd highly recommend safety googles when cutting with power saws in this case.  It is very message.  I've seen some videos where people simply score and snap planks - I haven't tried it with these yet but I am using these in the master bedroom too so I'll have a chance.

I did use my table saw for a few full length cuts but even with a 10" sliding compound miter saw you can probably cut to max length and flip to finish as I did on a few.  For irregular cuts as near our columns - I used a jigsaw which works ok.  I had a pretty coarse tooth blade on it.

One thing that I still experienced with these  planks was a bit of gaping while installing.  These are click-lock as well but also have glue down instructions.  I have a rubber mallet mostly used for camping that also turns out useful at times like these.  If the tongue/groove didn't come together perfect, often I could take a block of wood carefully placed on the edge but on top of the bottom tongue and tap it as lightly as possible to get it aligned.  I also tapped on all the seams and face of plank to get it set in the glue well.  

I've got a couple pieces to go around the columns yet and have to get some new floor moldings.  We are going with white moldings.

The wall color is still being determined.  That has been probably the hardest part of the project - agreeing on paint colors. At some point we'll replace the drape/shades as well.

Here is the post where I replaced the master bedroom flooring.

Thanks for reading. 


Jeremiah 30:17

17 But I will restore you to health and heal your wounds,’ declares the LORD, ‘because you are called an outcast, Zion for whom no one cares.’



Tuesday, July 7, 2020

Quick survey of tech supporting Cloud/Container Development

Cloud/Container development support

  1. Eclipse Codewind plugin/Project
    1. https://www.eclipse.org/codewind/
    2. Finally got this to install property after about 3+ weeks of toying with it - someones blog entry and some fortunate timing of things got me to reinstall my Docker setup without using 'snap' and also install Docker Compose. At that point, the final install setups started working. I've not spent much time yet working with this but it is on my short list of things to check out at the moment. I created a quick project and that seems to work but when trying to port my current Quarkus code over to CodeWind using the Appsody/Quarkus template template it wasn't a drop and run it result - I'll have to debug some build issue.  Maybe lombok related.
  2. Eclipse Docker plugin/tooling and Redhat Studio Docker Tooling 
    1. https://marketplace.eclipse.org/content/eclipse-docker-tooling
    2. https://tools.jboss.org/
    3. This has worked pretty well - I do like being able to do many operations directly from Eclipse (or IntelliJ with proper plugin) - and of course the command line.
  3. SpringBoot 2.3.x
    1. https://spring.io/guides/gs/spring-boot-docker/
    2. https://www.youtube.com/watch?v=1w1Jv9qssqg
    3. I'm lumping this in for the simplication of building Docker images and such.
  4. Spring Dev Tools and Eclipse
    1. https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devtools.html
    2.  This plus SpringBoot 2.3.x has some nice features I am starting to work with a bit.
  5. Quarkus 
    1. https://quarkus.io/get-started/
    2. This has a lot of potential.  I am able to create pretty decent services [Rest style access, JPA/Hibernate support, etc] and such like I had using SpringBoot.
    3. Development uses Eclipse and maven functionality.
    4. The startup times of plain Java (non-native build image) are still very good. The live-reload works ok in Eclipse much of the time.  I still have a lot of investigation to do
  6. GraalVM
    1. https://www.graalvm.org/getting-started/
    2. I have this here for its integration with Quarkus.  The idea of building Native apps for use in light-weight containers that are "relatively easy" to generate has a huge potential. Implementing the native app docker image was a massive resource hog (time, memory and CPU) but the initial startup time of the image was great.  This still needs a bunch of testing.
  7. MicroK8s
    1. https://microk8s.io/
    2. Works ok; hopefully my overall workflow will improve as I find ways to leveage the CodeWind, Quarkus/GraalVM, etc projects.  
    3. I am trying to work with the built-in registry to see if that helps with workflow in any way. I do wish I had created some aliases for the commands though.

  8. Lightweight Kubernetes package - k3s
    1. https://k3s.io/
    2. I've not tried it; sounds easy to use and setup.
  9. Docker Swarm mode
    1. https://docs.docker.com/engine/swarm/
    2. Not using it for the most part at home
  10. Apache Mesos / Mesophere / Marathon
    1. http://mesos.apache.org/
    2. https://d2iq.com/solutions/mesosphere
    3. https://mesosphere.github.io/marathon/
    4. I like the idea but haven't found a great use case for much self-learning on this.  All the cloud tooling seems to be pulling good ideas from each and integrating in some way with each other - over time this may have some type of usage that I can leverage but not sure yet.
  11. Lightweight Kubernetes package - Minikube
    1. https://minikube.sigs.k8s.io/docs/start/
    2. Not sure this at home at the moment.  
  12. Cloud Foundry 
    1. https://www.cloudfoundry.org/
    2. I'm now using this at home at the moment.  It was pretty easy to use at a previous job but I do question the overhead in some cases.  Appears to be finding ways to integrate with other technologies such as Kubernetes (See KubeCF project at cloud foundry site).
  13. Knative - kubernetes platform for deploying serverless workloads
    1. https://knative.dev/
    2. I've not tried it yet; Some of the various serverless technologies are slowly integrating with other stuff so it is likely I will work with it more at some point but isn't the highest on my list as of yet.  Serverless workloads have a lot of potential benefits but the cost with public cloud providers can be high depending on what you are doing.
  14. Lightweight local Kubernetes - kind
    1. https://kind.sigs.k8s.io/
    2. I've not tried it yet.  So far, I think Microk8s will fit my needs.
  15. OpenShift
    1. https://www.openshift.com/
    2. Sort of functionality layered on over Kubernetes.  Heard of stability issues from a proof of concept project at a past employer but not tried it myself.
  16. Container Runtime info
    1. https://www.inovex.de/blog/containers-docker-containerd-nabla-kata-firecracker/

Thanks for reading!
I'll update as I find new things to add/update.

Hope your day is blessed!

Scott

Saturday, July 4, 2020

Early Thoughts: Quarkus / GraalVM

Containerization has become very important in recent years.  Starting about 4 years ago, jobs I've had went from no containerization in local data centers to running dockerized images in a cloud such as AWS or Azure. Initially this was just using docker directly on a cloud server.  Over time, the work has gradually migrated more towards Kubernetes though.

There are a lot of lessons learned and a few still being learned. One area of continued learning is in the area of cost. It is so easy to spend big $ in any cloud environment. The choices we make in the tech stack and architecrual areas has a huge impact on final costs.  

Native serverless solutions can become cost prohibitive when the call rate is extremely high. Slow virtual server startups means you must over-provision more initially to prevent lag time issues with auto-scaling. Fat dockerized images eat up memory typically requiring larger underlying hardware to provide additinal memory.  High initial docker container processing results in further over-provisioning to compensate for lag-time. Choices in runtime/language affect memory requirements as well.

With that said, I've been starting to toy with some relatively new technologies in the bits of spare time I have at home - Quarkus (https://quarkus.io/) which also integrates with GraalVM (https://www.graalvm.org/).

The ability to create an optimized container from Java microservice code which prunes out unused functionality and converts to a native application has some benefits.  The biggest touted benefit appears to be lower memory requirements for the deployed container and startup speed but I also think it might help improve security overall - needs some research.

My initial work with Quarkus (non-native, just local images) has been pretty straight forward. I am able to work with it from Eclipse without significant issues.  I wil say that memory requirments tend be excessive for the build process (especially native application image). Without limiting memory, it consumed too much and caused system instability and trying to tweak the memory setting for the build itself is a bit of art.  Here is a snipped of the out of memory failure with 5Gb dedicated.

[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 19.3.1 CE[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep]...
[notesvc-quarkus-1.0.0-SNAPSHOT-runner:24] Exception in thread "ForkJoinPool-2-worker-9" java.lang.OutOfMemoryError: Java heap space: failed reallocation of scalar replaced objects
Fatal error: Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceError: Image build request failed with exit status 1
Once I bumped the setting in the POM file to 6Gb and reran build it succeeded.  Here is the profile that worked:

   <profile>
      <id>native</id>
      <activation>
        <property>
          <name>native</name>
        </property>
      </activation>   
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>${surefire-plugin.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
                <configuration>
                  <systemProperties>
                    <native.image.path>${project.build.directory}/${project.build.finalName}-runner</native.image.path>
                  </systemProperties>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
      <properties>
        <quarkus.package.type>native</quarkus.package.type>
        <quarkus.native.additional-build-args>-J-Xmx6G</quarkus.native.additional-build-args>
      </properties>
    </profile>

The startup time does appear significantly faster on first tests.  I'll come back and add some of those details soon (hopefully).

Hope your day is blessed!
Scott