Is Your Website Pleasant to Use?

Image Source: Pexel Using the internet means browzing various websites for important information. Or, if you’re one of those people who like to browse Youtube or play games finding what you’re looking for is just as important. Finding what you’re looking for doesn’t start with a Google search; you also need to navigate someone’s website […]

The post Is Your Website Pleasant to Use? appeared first on designrfix.com.

Common Mistakes When Building a Multilingual WordPress Site

Common Mistakes When Building a Multilingual WordPress SiteMore people than ever are working, playing, socializing and even shopping online. There is an increasingly global presence of “netizens”, or people who transcend the more traditional national borders. Current trends on the internet suggest that people are increasingly likely to associate with and even shop from foreign based websites, provided that they can review, […]

The post Common Mistakes When Building a Multilingual WordPress Site appeared first on WPExplorer.

OpenJS World 2020 Conference Goes Virtual, Tickets Are Free: June 23–24

Like many tech conferences, OpenJS World 2020 was forced to go virtual for its upcoming event scheduled for June 23-24, in Austin. The global conference was designed to be representative of all 32 projects hosted with the OpenJS Foundation. This includes Node.js, webpack, jQuery, Mocha, ESLint, Lodash, Grunt, and other popular projects. The Foundation is also in the process of initiating AMP and Electron through an incubation process.

Prior to going virtual, regular attendee ticket prices for OpenJS World ranged from $350 (early bird) – $899 (late). Ordinarily, travel expenses and missed work can make conferences like this cost-prohibitive for some attendees whose employers don’t sponsor their work travel. Now that the event has moved to be fully online, tickets are free for all who want to attend.

OpenJS World gives developers the opportunity to connect with others across the JavaScript and web ecosystem while learning from a diverse, world-class lineup of speakers. The schedule spans a variety of topics, including JavaScript architectures and patterns, internationalization, diagnostics and debugging, infrastructure, IoT, and more.

Glitch CEO Anil Dash is one of 16 keynote speakers. He will be talking about JavaScript and its place in tech after 25 years, as well as how its community should be working together. NASA astronaut Christina Hammock Koch will also be a keynoting the event on June 24, at 9 AM CT. Koch served as a flight engineer on the International Space Station for multiple expeditions and holds the record for longest single spaceflight by a woman (328 days). The event also features keynote panels with engineers and executives responsible for deploying applications at a massive scale.

While the pandemic has rendered many people housebound, there are a lot of virtual events competing for your attention. Although these sessions are likely to be available on YouTube at some point in the future, there are a few distinct benefits of attending live: the opportunity to network with other attendees, engage in live speaker Q&A sessions, and interact with sponsors. For WordPress developers, it may be a convenient avenue for getting outside the WordPress bubble and connecting with others in the industry.

Getting all records from sql database generates error

Hi there, I've come across an issue while trying to get all the records from a SQL database in java.
A bit of necessary introduction here.
I'm not using any framework just JDBC and the getAllBooks method is part of a REST call. The failing method is essentially doing this:
-getting the number of all records in the db;
-getting all the ids and use them to get the records, store them in an array and return that array;
Unfortunately the call generates the following error in the while loop:

SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/book-storage-REST] threw exception
java.lang.IllegalArgumentException: the object parameter to marshal() is not marshallable
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:280)
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:163)
    at com.sun.jersey.json.impl.provider.entity.JSONListElementProvider.writeList(JSONListElementProvider.java:145)
    at com.sun.jersey.core.provider.jaxb.AbstractListElementProvider.writeTo(AbstractListElementProvider.java:264)
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:302)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1510)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

Ok, the code now:

public Book[] getAllBooks()
    {
        Book[] books = null;        
        try
        {
            resultSet = statement.executeQuery(SqlStrings.SELECT_NUMBER_ALL_RECORDS);//runs "SELECT COUNT(*) from books";           
            resultSet.next();
            int dbRecordNo = resultSet.getInt(1);//get number of record
            resultSet = statement.executeQuery("SELECT books.id FROM books");//get all ids
            books = new Book[dbRecordNo];

            int i = 0;
            while(resultSet.next() && i < dbRecordNo)
            {
                int bookId = Integer.parseInt(resultSet.getString("id"));
                books[i] = getBook(bookId);         
                System.out.println();
                i++;
            }

            return books;
        } 
        catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

The problem seems to be occurring because I use && i < dbRecordNo in while(resultSet.next() && i < dbRecordNo). I run a few tests and if I remove that && statement the while loop runs absolutely fine. So, I can't quite understand why this while(resultSet.next()) goes through the resultSet absolutely fine and this instead while(resultSet.next() && i < dbRecordNo) goes through only once then returns and generates the error.
I could probably try other ways (I haven't explored any other yet but I guess I could create a hashmap of ids and book objects and then extract the book objects from there) but I'm interested to know why this isn't working as it's just a simple while loop with an additional condition. Debugging doesn't really clarify it because, as I said, it only runs for i = 0, when i is 1 it fails to get the record

Gutenberg 8.3 Updates Block Categories, Includes Parent Block Selector, and Adds New Design Controls

Yesterday, the Gutenberg team released version 8.3 of the ongoing plugin behind the block editor. While much of the focus for the team is on the upcoming full-site editing, this update includes several user-facing features, such as a reorganized set of block categories, a parent block selector, a spacing control, and link color options.

One smaller enhancement includes the ability to filter the Latest Posts block by author. The level control for the Heading block has also changed. Instead of selecting the level in the block options sidebar, the level selector is now located in the editor toolbar.

In Gutenberg 8.2, hitting the Enter key within the caption field for an image block created a new paragraph. In 8.3, that feature has been extended to all blocks with captions.

The team corrected over 20 bug fixes in the latest release. On the whole, the new plugin update appears to be solid after a day of use. However, some of the experimental additions, such as the new padding control, may be worth some concern. Theme authors need to start testing this, providing feedback, and making sure development is heading in the right direction.

New Block Categories

Screenshot of the Gutenberg block inserter.
New “Design” category in the block inserter.

The Gutenberg team has renamed and reorganized the block categories. The new list seems to make more sense and is better consolidated into proper groups:

  • Text
  • Media
  • Design
  • Widgets
  • Embeds

While I am a fan of the new category names, I find the categories useless for any practical purpose at this point. Ever since Gutenberg dropped the tabbed interface in the block inserter, it has felt like a large wall of blocks. My eyes naturally skip by the category names as I scroll and scroll and scroll through the list of available blocks to find that particular block I need. I almost always use keyboard slash commands for inserting blocks. In those cases where I don’t, it is not an ideal user experience, and the new categories do not help much.

Select Parent Block

Hovering over the editor toolbar to find the parent block selector.
Hovering over toolbar to find parent block selector.

One of the more frustrating experiences in Gutenberg is attempting to select a parent block in a nested-block scenario. Far too often, users feel like they are clicking around at random in the hopes they hit that sweet spot where they can actually navigate to the block they need to edit. It is an exercise in frustration in the best moments.

The Gutenberg team took a step — a small step — toward alleviating this pain. When hovering over the “change block type or style” button in the editor toolbar, a new button appears to select the parent block.

I am unsure if this is the right way of handling the problem. I would like to see some experiments with some sort of arrow button that appears without hovering. For now, I am satisfied that the team is attempting to solve the issue and hope that future iterations improve navigation within nested blocks.

This feature does not seem to work when the top toolbar mode is enabled. For those who use this mode, the best way to select a parent block is via the breadcrumb navigation at the bottom of the editor.

Experimental Spacing/Padding Control

Using the new padding control for the Cover block.
Adding custom padding to a Cover block.

Theme authors can now add support for an experimental padding control via add_theme_support( 'experimental-custom-spacing' ). When supported, the end-user will see a new Spacing tab under the block options sidebar for the Cover block, which should be available for other blocks in the future. By default, users can control the padding for all four sides of a block with a single value. They can also “unlink” the padding and control the top, bottom, left, and right values individually.

Presumably, the Gutenberg team will extend this spacing feature to include a margin control too. It would be the natural move and one in which I hope that leads to the death of the Spacer block that users have had to live with for the past couple of years.

However, I am not sold on allowing end-users to control padding with explicit values. Haphazardly changing padding values will break the vertical rhythm that many theme authors take the time to meticulously calculate. When using pixel values (the default), users will most certainly run into issues with tablet and mobile screen sizes. Essentially, it will create a complete mess of spacing.

I am not against the idea. I want it done right before this lands in WordPress. Theme authors should be able to register named classes that are handled via the stylesheet. This goes back to the idea of WordPress having a design framework. Create a set of utility classes for spacing (oh, hello, Tailwind). Let theme authors define the spacing based on their design. Let users choose from those. Then, provide a custom option for those times where users want to take matters into their own hands. At that point, they have made an explicit decision to break away from the design flow the theme author has chosen.

Link Colors

Selecting a link color in the block editor.
Selecting a custom link color.

One of the tougher hurdles theme authors have had to face when styling for the block editor is figuring out what to do with link colors when the user changes the background color of a block. Users have long had control of the text color in that scenario. However, link colors could quickly become inaccessible or just downright ugly. Forward-thinking theme authors would style those link colors so that they inherited the text color, but that is not always the ideal solution.

That’s where user-controlled link colors come in. To add support for custom link colors, theme authors must opt into the feature via add_theme_support( 'experimental-link-color' ). This will add a new color selector for the Paragraph, Heading, Group, Columns, and Media & Text blocks.

Unable to get this feature working with the theme-support function call, I had to dig into the code a bit to find the issue. For theme authors to add support for link colors, they should also define their default links as shown in the following CSS code snippet:

a {
	color: var( --wp--style--color--link, #000 );
}

WordPress will automatically set the --wp--style--color--link variable. For further specificity, theme authors can also target .has-link-color a.

Stand-Up 2.0: It’s time to ditch the daily from 1993

The daily stand-up is broken. 

No wonder. It was invented almost 30 years ago and we're still running it the exact same way.

When daily stand-up meetings started in the early 90s, the software development process looked very different. Git didn't exist. Jira didn't exist. Collaboration tools didn't really exist. DevOps didn't exist. Automation tools didn't exist. Analytics tools didn't exist.

GitLab Expands Developer Platform Via Peach Tech Acquisition

Recently GitLab, an application for the DevOps lifecycle, announced it has acquired Peach Tech, a security software firm specializing in protocol fuzz testing and dynamic application security testing (DAST) API testing, and Fuzzit, a continuous fuzz testing solution providing coverage-guided testing. These acquisitions will add fully-mature testing solutions including protocol fuzzing, API fuzzing, DAST API testing, and coverage-guided fuzz testing.

OpenAI Announces API Access to New AI Models

OpenAI has announced an API for accessing new AI models it develops. OpenAI is known for open sourcing most of its AI tools, but it has taken a different approach with this particular project. The company has decided to commercialize this product to ensure that it can be controlled from a privacy and safety standpoint, and help fund its broader mission to put artificial intelligence in the hands of as many developers as possible.

Every Branch Gets a Stack: A How-To Guide

Turbocharge your team’s development workflow with this strategy that provides quick feedback in a collaborative, no-risk environment.

Last year SingleStone set out to build its first SaaS solution. We decided to do things differently and lean into a branching strategy. We’ve built plenty of custom software in our 23-year history, but always for clients. In those projects, there are always pre-existing factors that guide design decisions: specific languages, tooling, and processes. Sometimes, there are existing CI workflows in place that dictate how our contributions are incorporated.

Deploying Only the Interaction Model for OU Alexa Skill

In the new ASK CLI 2.x that has just been recently released, I found that the choice to deploy only the interaction model seems to have disappeared. In this article, I will show you how to regain this powerful time-saving capability back.

The Value of Deploying Only The Interaction Model

This option is important to me as I do a lot of local debugging. To save time I used to deploy only the interaction model from my local machine when I do simple minor changes, especially on the utterances, slot types, and values.

Site Reliability Engineering (SRE) 101 With DevOps vs SRE

Consider the Scenario Below

An Independent Software Provider (ISV) developed a financial application for a global investment firm that serves global conglomerates, leading central banks, asset managers, broking firms, and governmental bodies. The development strategy for the application encompassed a thought through DevOps plan with cutting-edge agile tools. This has ensured zero downtime deployment at maximum productivity. The app now handles financial transactions in real-time at an enormous scale, while safeguarding sensitive customer data and facilitating uninterrupted workflow. One unfortunate day, the application crashed, and this investment firm suffered a severe backlash (monetarily and morally) from its customers.  

Here is the backstory – application’s workflow exchange had crossed its transactional threshold limit, and lack of responsive remedial action crippled the infrastructure. The intelligent automation brought forth by DevOps was confined mainly to the development and deployment environment. The IT operations, thus, remained susceptible to challenges.

Launching an EC2 Instance on AWS

To be able to host your web application, you will need a hosting solution. You can easily get started with AWS and commission an EC2 instance to be able to host your web application.

Step 1: Create an AWS Free Tier Account 

AWS provides 1-year access to the Free Tier Program which can allow you to play around with various services free of charge. For this just register with a new email address and you are good to go.

Threat Modelling Tools Analysis 101

Abstract

An interconnected world with an increasing number of systems, products and services relying on the availability, confidentiality, and integrity of sensitive information is vulnerable to attacks and incidents. Unfortunately, the threat landscape expands and new threats, threat agents and attack vectors emerge at all times. Defending against these threats requires that organizations are aware of such threats and threat agents. Threat modeling can be used as part of security risk analysis to systematically iterate over possible threat scenarios.

The motivation for this research came from the constantly growing need to acquire better tools to tackle the broad and expanding threat landscape. One such tool which help to categorize and systematically evaluate the security of a system, product or service, is threat modeling.

Sending IoT Data From Arduino to Questdb

IoT on QuestDB

As you can well imagine, I've been super busy in my hew job at QuestDB so this has taken me longer than I would have liked, but here we are. If you know me at all, you know that one of the first things I always do with new things is, well, connect things to them! So I immediately went to connect an IoT device to QuestDB to see how it went. Unsurprisingly, it went quite well. So here's how it went, from start to finish.

The Database Part

The first thing I had to do was to get QuestDB up and running. Luckily, this is very straightforward. I guess I could have gone the Docker route, but as you're probably aware, I'm not a huge fan of Docker (in no small part due to the fact that it will literally suck the life out of a macOS laptop). There's also (for you MacOS users) `brew install questdb` but since I work here, and I wanted to test out the latest and greatest web console, I decided to build from source:

How to Read Files and Transfer Them to Other Location Using TIBCO BW 6.5

In this article, we will walk through reading files of any types/extensions from one location and transferring all of them to other locations using Tibco BW 6.

All We Need Are Three Activities i.e.

  1. Timer: This will be our starter activity to start the process, you can have other starter depending on your use case.
  2. ListFile: This List Files activity is a synchronous activity that returns information about files or directories, or a listing of all the files in the specified directory.
  3. RemoveFiles: Remove File activity is a synchronous activity that removes the specified files from the directory. If the specified directory is not empty, it generates an exception.

Our Flow Looks Like

message flow