Application Development
RSS feed
  • Windows 10 and lein self-install fails on Powershell – Solved

    I am starting to learn Clojure and wanted to set up Leiningen on my Windows 10 professional.

    Here is how I solved the Windows Security problem that was preventing me from downloading the github zip file needed.

    Here is hoping that someone finds this solution helpful.

    Using PowerShell running as Administrator, I was having trouble getting my REPL going:

    PS C:\> lein repl

    C:\Users\{YourUserName}\.lein\self-installs\leiningen-2.8.1-standalone.jar can not be found.
    You can try running "lein self-install"
    or change LEIN_JAR environment variable
    or edit lein.bat to set appropriate LEIN_JAR path.

    Next, I tried to command lein to self-install:

    PS C:\> lein self-install
    Downloading Leiningen now...
    Exception calling "DownloadFile" with "2" argument(s): "The request was aborted: Could not create SSL/TLS secure
    channel."
    At line:1 char:145
    + ... che]::DefaultNetworkCredentials; $client.DownloadFile($a, $f)} "https ...
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : WebException

    Failed to download https://github.com/technomancy/leiningen/releases/download/2.8.1/leiningen-2.8.1-standalone.zip

    It is possible that the download failed due to "powershell",
    "curl" or "wget"'s inability to retrieve GitHub's security certificate.
    The suggestions below do not check certificates, so use this only if
    you understand the security implications of not doing so.

    The PowerShell failed to download the latest Leiningen version.
    Try to use "curl" or "wget" to download Leiningen by setting up
    the HTTP_CLIENT environment variable with one of the following
    values:

    a) set HTTP_CLIENT=wget --no-check-certificate -O
    b) set HTTP_CLIENT=curl -f -L -k -o

    NOTE: Make sure to *not* add double quotes when setting the value
    of HTTP_CLIENT

    The suggested fix as you can see deals with getting around our inability to get GitHub’s security certificate.

    This is really not the right thing to do from a Security perspective. The real problem as I understand is that GitHub only supports TLS 1.2.

    In order for us to use PowerShell with TLS 1.2, I needed to do the following:

    1. In power shell, type in the following to find where your PowerShell profile lives:

      PS C:\> $profile
      C:\Users\{YourUserName}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

    2. I went to that location but did not see a file. I ran this test to see if my PowerShell detected a profile file:

      PS C:\> test-path $profile
      False

      False means that the file is not there, but we already knew that right?

    3. Next, I created the PowerShell profile file like so:

      PS C:\> new-item -path $profile -itemtype file -forceDirectory: C:\Users\YourUserName\Documents\WindowsPowerShell

      Mode LastWriteTime Length Name
      ---- ------------- ------ ----
      -a---- 10/27/2018 2:38 PM 0 Microsoft.PowerShell_profile.ps1

    4. Once that command finished casting its spell, I did another test-path:

      PS C:\> test-path $profile
      True

      It sees my profile ps1 script now! Progress is Good.

    5. Next, using Notepad, I opened the Microsoft.PowerShell_profile.ps1 file. It was empty. I added the following line which allows PowerShell to use TLS 1.2 and saved the file:

      [Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12
    6. With renewed confidence, I tried to command lein to self-install once more:

      PS C:\> lein self-install
      Downloading Leiningen now...
      PS C:\>

      No news is good news. I thought. No error this time. What happened? Did it self-install this time?

    7. The only way to find out was to try running my repl once again, fingers crossed:

      PS C:\> lein repl
      Retrieving org/clojure/tools.nrepl/0.2.12/tools.nrepl-0.2.12.pom from central
      Retrieving org/clojure/pom.contrib/0.1.2/pom.contrib-0.1.2.pom from central
      Retrieving org/sonatype/oss/oss-parent/7/oss-parent-7.pom from central
      Retrieving clojure-complete/clojure-complete/0.2.4/clojure-complete-0.2.4.pom from clojars
      Retrieving org/clojure/tools.nrepl/0.2.12/tools.nrepl-0.2.12.jar from central
      Retrieving clojure-complete/clojure-complete/0.2.4/clojure-complete-0.2.4.jar from clojars
      nREPL server started on port 60194 on host 127.0.0.1 - nrepl://127.0.0.1:60194
      REPL-y 0.3.7, nREPL 0.2.12
      Clojure 1.8.0
      Java HotSpot(TM) Client VM 1.8.0_191-b12
      Docs: (doc function-name-here)
      (find-doc "part-of-name-here")
      Source: (source function-name-here)
      Javadoc: (javadoc java-object-or-class-here)
      Exit: Control+D or (exit) or (quit)
      Results: Stored in vars *1, *2, *3, an exception in *e

       

      user=>


      Success!!!!


    Now you know how to overcome this problem Take care and Happy coding.

    References:

    https://leiningen.org/

    StackOverflow

    Microsoft Tech Net

  • Outlook Redemption (Redemption.dll) and Background Threading do not mix.

    Outlook Redemption is a very nice library which allows access to many Outlook functions many of those not exposed via the Outlook object model. We are currently using Redemption in our application to add outlook appointments with reminders, pop email messages with pre-populated information, etc.

    We wrapped the Redemption.dll into our own Singleton class and called it OutlookRedemption as you will see in the following code examples.

    We have had a couple of situations where emailing from our application stops working or works intermittently and in both of those occurrences, the culprit was using the API in a back ground thread.

    Read the rest of this entry »

  • ClickOnce Deployment – Deploying multiple versions of the same application

    According to Wikipedia, ClickOnce is a Microsoft technology that enables the user base to install and run a Windows Application by clicking a link in a web page. ClickOnce is a component of Microsoft .NET Framework 2.0 and later and it supports deploying applications made with Windows Forms or Windows Presentation Foundation.

    ClickOnce attempts to bring the ease of deployment similar to web applications to the Windows user base. ClickOnce aims to solve three common problems with conventional methods of deploying an application:

    1. The sometimes difficulty of updating a deployed application.
    2. The impact of an application on a user’s computer system.
    3. The need for administrator permission in order to install or update the application.
  • WPF coding mutually exclusive Check Boxes with Data Binding

    Last week I was coding a View that required for me to show two ChekBox controls which were mutually exclusive in the same way that two or more RadioButton controls that belong to the same group would interact.

    My problem was that one Boolean property which came from a bit column in the database needed to drive which CheckBox would be checked: “Yes” or “No”.

    In this example I attempt to show how to code two mutually exclusive checkboxes while binding to the Boolean property described above:

    image

    The Name of the Property in the Code Behind file that we are going to bind to is AddInsurance.

    Here is the XAML code:

    Read the rest of this entry »

  • Creating a Singleton (Instance) Class in C#

    In application development there are various situations in which it makes sense to code a class in a manner that it can be created (instantiated) once and used throughout the lifetime of the application. Generally this type of class is called a Singleton object.

    When creating and object, CPU cycles are used up during the:

    • Creation of the Object
    • Initialization of the Object
    • Loading of the Object, including seed data from the dB etc.

    Read the rest of this entry »

  • Include Application Name in Connection Strings

    In addition to the SQL Server, Database, User ID and Password, you may want to include the Application Name in your connection string parameters. Application Name is an optional argument, but it can greatly help you to segregate the SQL that your application is executing from any other database calls that are being sent from other applications/processes.

    Data Source=myServer;
    Initial Catalog=myDB;
    User Id=myUsername;
    Password=myPassword;
    Application Name=myApp;

    In example:

    Read the rest of this entry »

  • The Object-Oriented Thought Process …

    Recently I came across a book which was a recommendation from a senior colleague at work. The Object-Oriented Thought Process by Matt Weisfeld. Although the first three chapters can seem a bit basic at first glance, they help to remind ourselves and reset in our minds what a true OO approach to a given problem should be.

    Here is the Conclusion for (summary) Chapter 1 – Introduction to OO Concepts:

    Read the rest of this entry »