Category Filtering: 'web-development'

Generating a self-signed SSL certififcate

Open Source, Web Development

One of the tasks every software developer needs to tackle periodically is generating a self-signed SSL certificate in one form or another for the purpose of testing SSL-secured software systems. Here is an easy method to generate a self-signed cert on the CLI.

$ openssl genrsa -out privatekey.pem 2048

$ openssl req -new -key privatekey.pem -out signingrequest.cer

$ openssl x509 -req -days 3650 -in signingrequest.cer -signkey privatekey.pem -out certificate.pem

Recommended Computer Configurations for 2020

Technology, Web Development

For professional laptop users, I recommend a baseline configuration of at least 32 GB RAM, a quad core CPU, and an M.2 SSD with 512 GB or more of space. From there, I recommend upgrading the SSD to the fastest possible speed (3500 MBps read speed currently), and increasing the size of the disk as much as you can afford. 2TB is currently the max size for a high end M.2 SSD. Depending on the use case, I also recommend increasing RAM to 64 GB if possible. Lastly, some of the very highest end models such as the top tier MacBook Pro offer a six core CPU. While that might be the CPU you get by default if you choose the top MacBook Pro, most users will not need the additional cores.


How Design Teams are Killing Usability on the Web

Web Development

I've been using the Web since almost the very beginning, and never have I seen more problems with the usefulness and usability of corporate web sites than I have seen recently. Every new corporate re-branding/web site update/enhancement round seems to lead to more and more problems.

Today, I am looking at how design considerations have overtaken basic rules of functionality and usability for the Web. My example case today is the web site for Firestone Tires, www.firestonetires.com. Firestone, if you don't know, is an established leader in the United States in auto care. Firestone Tires focuses on sales and installation of automobile tires.


Livesandbox Web app editor v 0.9.4

altseven, JavaScript, Open Source, Web Development

Another update of the livesandbox editor is available on GitHub. I made some important fixes to the application and wanted get this code released as soon as possible.

Updates in this release.

  • fix update/read issues with saving apps
  • change editor layout
  • fix sometimes incorrect saving of esModule bit field
  • fix save/retrieval/loading of app libraries
  • add getApps and getLibraries stored procedures to git
  • update db dump
  • set editor to wrap long lines so the editor width does not grow beyond 50% of sandbox width

Upgrading from previous releases:

In addition to pulling the latest master (or the 0.9.4 tag) from GitHub, you will need to update the getApps stored procedure in the database. A SQL script has been added to ./database/getApps.sql with the updated stored procedure code. You can, if you prefer, simply replace the previous database with the new backup in the ./database folder.

The application is getting closer to being stable and feature complete for a 1.0.0 release. Outstanding tasks:

  • add notifications on successful save/delete of apps and libraries
  • add warnings when discarding unsaved changes
  • add paging for apps and libraries lists

I may or may not add an admin feature as part of the 1.0.0 release.


Gadget-UI Update

gadget-ui, GitHub, Open Source, Web Development

The latest gadget-ui library update is available on GitHub and npm. Version 6.1.0 makes headway in simplifying some of the components by removing inline style options and allowing CSS classes as options that override default styling. A Full list of fixes and updates:

This release simplifies the code for several of the components in the library and adds some new options to a few of them. According to semver it could be a new major release, but I am releasing it as a minor upgrade since it represents work in progress. Major features of this release:
 

  • Remove many of the inline style options for FloatingPane, CollapsiblePane, and other components.
  • Add class and headerClass options for FloatingPane and CollapsiblePane to enable easy overriding of default styles and more flexible styling via CSS classes. Note that you can also use the pre-defined styles and override with !important, which is easier for making minimal changes.
     
  • Add hideable option to ComboBox, SelectInput, TextInput to make hiding the control when not is use optional and false by default.
  • Improve ComboBox control
    • Fix styling issues with borders and input control.
    • Add new down chevron SVG as dropdown indicator. By default requires feather-icons to be accessible from the client in /node_modules/feather-icons. Change the CSS to pick a different location as needed.
    • Fix combobox export for es6, which was misspelled.
  • Upgrade various reported vulnerable devDependencies through npm.

 


Iterative Development as Software Craft

altseven, Health & Science, Open Source, Web Development

Background

The practice of software is part engineering and part craft. Academia is full of coursework designed to teach you the theory of computing and the engineering discipline of writing software. Learning software as a craft, though, seems to occur over time in the profession of software development.

Iteration as a process for software development, in my mind, has always belonged in the realm of "software as craft" rather than "software as engineering discipline". Granted, there is plenty of room to look at iteration as part of an engineering process, but I relate it to how writers of novels build a story and refine the story over a series of drafts until they arrive at a completed work.

My approach to software development has always been to build a working skeleton of an application and then refine and expand it over time using an iterative approach. I'm going to share, briefly, the why and how of my approach.

Iterative Development as Craft

Building complex software systems is hard. If you've worked in the field for a few years, you've probably had more than your share of frustrations during a complex software project where careful planning went into the requirements gathering and specification phase, only to have some significant aspect of the specification change midway through the project. These kinds of failures (yes, they are failures, though individually they might not doom an entire project) have become less common through the use of iterative software development.

Instead of trying to build every aspect of a software system in a single pass, iterative development encourages you to build a skeleton of functionality for the application, prove that it works, then layer in additional functionality in successive passes. The craft of iterative development begins with understanding how much you can build in a single iteration without compromising a primary goal of iterative development - building in small chunks to simplify the testing and debugging phase of each iteration. Knowing how much you can take on in a single pass requires enough experience to be familiar with the pace of development and the complexity of debugging for a given system.

By using source control and building iteratively, you can provide yourself with a history that shows in time how your application has developed over a series of iterations. On GitHub, I use semver and tags to mark my progress.

Iterative Development v. Versions

Speaking of semver, you might object, "But you are really talking about versions. Every software company since forever has made successive versions of their products/projects." In a sense, that's true, versions are a long version of iterative development. When I refer to iteration, though, I'm really talking about the process of iterating within the development process, though what that means may be a little fuzzy. In the tasklist altseven sample app, I have been slowly building more complexity into the application over a period of time to demonstrate how the altseven framework has been evolving. You can go to the repos for both projects and see the snapshots (as tags) at each step along the way. When I think of iterative development within a single version, what I am referring to is building in passes to get to a pre-defined end state. Version development (which you can see more clearly in the building of altseven) involves building new features with each successive pass.

Iteration as Exploration

Not too long ago, Kyle Simpson (@getify of You Don't Know JavaScript fame) pondered about having a tool for realtime execution of JavaScript - browser-based - other than the browser console. I took on the challenge to build something useful as quickly as possible. With only the barest of specs, I built a very simple mechanism to execute JavaScript from a Web page. Over a few iterations, I slowly built it into something that, while still very much a prototype, more fully meets the initial functional requirements that Kyle was looking for. You can see it for yourself at https://github.com/robertdmunn/livesandbox. It is still very much a prototype, but it has features that make it useful if you need a simple scratchpad for JavaScript code.

Iteration Within a Single Task

Even within individual version development projects, you may have isolated tasks that benefit from an iterative process. Recently, I completed a two year consulting project that involved converting large chunks of a twenty-ish year old codebase into a new framework in the same language (CFML). If you've never taken on a project like that, you might immediately think about writing some sort of parser to read in the old code and generate output code in the new framework. While that might work in certain projects, in this particular project I felt like there was no payoff for trying to write a proper parser for old CFML. Instead, I used an iterative process where I slowly ported individual pieces of code into the new framework, tested that they worked, and made successive passes at the code until I had ported the entire chunk of functionality.

One aspect of this particular task involved porting tag-based CFML code to cfscript, the ECMA-compliant script version of CFML. I have found that a series of passes using regular expressions inside a text editor/IDE can be used to convert a lot of CFML code to cfscript with very little hassle. Because of the nature of the old codebase, this approach made far more sense than trying to write a very complex parser to read in the old code base and try to output something useful for the new framework.

 

In Conclusion

I hope that I have helped you understand, in at least some minimal detail, both the motivations and the strategies behind iterative development. Going into more detail requires digging into code and showing real world examples, and might require a book length discussion to provide useful insight into the details of the process.


Embracing ReactJS-style UI rendering in altseven with ES6 Template Literals - Part I

altseven, CommandBox, JavaScript, Web Development

I spent yesterday adding support for ES6 Template Literals as an alternative to Mustache/Handlebars. It works well and obviates the need for a templating framework in your project. However, I got stuck when I decided to modify the UI rendering functionality. I am trying to make it more ReactJS-like, but without a compile step or a virtual DOM.


UI library gadget-ui updated with ES6 module support

gadget-ui, JavaScript, Open Source, Web Development

I just published gadget-ui v. 6.0.0. There are no significant changes or additions to the library itself, but I have added ES6 modules exports to support importing the library, in whole or in part, using the ES6 import command.


Creating a NodeJS REST API with Express and MySQL

JavaScript, NodeJS, Open Source, Web Development

NodeJS offers the ability to build Web apps using JavaScript. Today, I will show you how to build a NodeJS REST API for a task list using Express and MySQL.


Logging into Lucee Admin of a New Instance

CommandBox, Lucee, Web Development

[ This post is part of my ongoing instructional series on setting up some baseline IT infrastructure for the fictional startup Shoestring Lab. Shoestring has committed to using Open Source wherever possible. Shoestring Lab has standardized on Ubuntu for its server and desktop/laptop computer systems.

Today's lesson

Provisioning new web application servers in Lucee requires logging into the Lucee Admin, setting administrator passwords, and updating Lucee.]


Categories


Recent Entries

Entries Search