AI Is Booming Vaccine Supply Chain—From Blockchain To Big Data

COVID-19 cases are increasing at an astonishing rate around the globe. 96.2 million cases have occurred globally, out of which 2.06 million people have died. This immense rate of patient’s data production has paved the way for new innovative data storage technologies. This data is utilized afterward to predict and analyze pandemic measures to fight post-pandemic virus conditions. 

According to a study,  ISARIC4C is collecting data of patients who are suffering from the COVID-19 pandemic from over 250 hospitals in the United Kingdom. Big data is an innovative technology that can be utilized by health care centers to store an enormous amount of patient information. This helps in developing a better understanding of the nature of this virus, and this collected information can also be further utilized for future prevention methods. This technology helps in storing all sorts of data i.e. the infected, recovered, and the number of deceased people. Prediction models have been developed by researchers which need to be fed a lot of data. The 4C deterioration model is designed using ISARIC4C data to predict the risk of COVID-19. 

Call for Feedback on Theme Review Action, a New Automated WordPress Theme Testing Project

Theme Review Action project running on and outputting test results on GitHub.
GitHub output of Theme Review Action.

Automation. It is one of those dreams in the minds of many reviewers from the Themes Team. If there was a tool to take care of 90% of the issues, the team could focus on the 10% not easily found by automated scripts.

Enter the Theme Review Action project. Steve Dufresne, a WordPress Meta team contributor, put out a call for testing and feedback of the new project on Monday.

“If we could combine some of the existing code analysis tools, automate away some of the manual testing and open them up to more development workflows, could we improve theme quality, alleviate pressure on manual testing, and speed up the theme review process?” asked Dufresne.

The project currently runs several test suites, including the current Theme Check plugin. Theme authors can run the texts by running the NPX command in their theme folder, adding it as an action on GitHub, or cloning and running it locally. Running via NPX is not currently supported on Windows.

Right now, theme authors are needed. Regardless of whether you are building themes for the directory, clients, third-party marketplaces, or a theme shop, this is an opportunity to give back to WordPress. It is also an opportunity to improve the tools that you could benefit from as a theme developer in the long term. Automated theme tests help the entire theme ecosystem.

“Theme authors need to be open to this and understand that it is not all about requirements,” said Carolina Nymark, a Themes Team representative. “It is about improving theme quality.”

The project was, in part, informed by a Themes Team proposal in early 2020. Denis Žoljom identified three problems the team was fighting against:

  • People don’t like to read requirements or handbooks.
  • Some of the issues that are popping up are repetitive and could be caught automatically.
  • Reviewing themes in Trac is really cumbersome.

The proposal’s focus was on moving reviews to GitHub, focusing on the third point. However, the Theme Review Action project could be the start of handling one or more issues.

The obvious solution is that the project can be automated. However, because the Theme Review Action project can be set as a GitHub Action, it leaves room for the team’s GitHub review proposal.

“Two things I mentioned to Steve — and these are my opinions –, is that we need checks that run on theme upload and on live themes, and we need a long-term solution,” said Nymark. “There have been attempts to automate testing before that have not been followed through, and without a plan for how the tool will be used, I am worried about spending time on it.”

The team had hoped that the Theme Sniffer project would lead to more automation at one point. It is hard to get hopes up after previous goals never came to fruition.

“I too have a similar concern where the project might not get enough adoption to make it to .ORG checking, and that is one of the reasons (other than just being super busy) that I haven’t been able to prioritize looking at [Theme Review Action],” said Themes Team rep William Patton.

While the team and some theme authors still use the Theme Sniffer, the UI leaves a lot to be desired. Nymark pointed out that it was hard for theme authors to distinguish between the baseline requirements and recommendations.

“To display messages from automated tools that are not strictly requirements is very difficult to get right,” she said. “For example, if a tool started reporting CSS linting errors for the WordPress CSS coding standards, many people would find that too opinionated and limiting.”

Theme authors, the group that reaps the most financial and reputational benefits from the theme directory, have often been reluctant to chip in. Few companies spare an employee to perform reviews or work on tools that developers and the team need. Calls for testing, feedback, and discussion often go unanswered, leaving a select few to do the lion’s share of the work. For this project to be successful and not feel like something foisted upon them down the road, theme developers need to be in the mix.

In the first episode of the WP Briefing podcast, WordPress Executive Director Josepha Haden Chomphosy talked about focusing on automation as one of this year’s goals. If there is one team that could use such tools, it would be the Themes Team.

Scaling DevOps and Delivery With a Platform

One of the impacts of the Covid-19 pandemic has been the increased urgency with which firms approach digital transformation. These initiatives aim to improve customer satisfaction, retention and acquisition through the development of modern applications to increase agility for faster delivery of products and services.

Modern application development necessitates breaking down applications into smaller value streams, delivered as independent services by agile teams via the cloud. But in order to do this, teams must of course possess the requisite skills to build, deploy and operate secure, cloud-native applications. Increasingly, firms that fail to ensure service teams develop these skills will struggle with digital transformation.

ASP.net Menu item Control Submenus not tapping in Touch screen

Hi all,
Used Asp.net Menu Control have designed a navigation bar .Using touchscreen Desktop in Internet Explorer(IE11), single tap not appear but double tap submenus appears but in Microsoft Edge/Google Chrome browser not appear submenus by single tap/double tap .
Touch is working in Edge/Chrome by single tap in other operations like texting etc. It's related to browser issue or code issue. I couldn't find it. Any settings need to change in the Asp.net Menu control.
I tried using jQuery /JavaScript to appear submenus but no result.Any help is appreciated .

$(document).ready(function () {
$(".menu1").click(function (e) {
$(this).toggleClass("show");
});

     });

The Importance of Payment Pages

Do you know what mistake many companies make when selling their products and services online? They focus too much on their product. In their opinion, the product should have the best properties and perfectly meet the needs of customers.

Of course, it is useless to argue with the importance of the high quality and properties of goods and services, but businesses often forget about one very important component of any successful sale: the design of the payment page. Pay insufficient attention to this page, and your potential customers will close it, thus pleasing your competitors.

The Future of Edge Computing

The edge computing market is seeing exponential growth. In fact, IDC anticipates that spending on edge computing will reach $250 billion in 2024. So, what are the driving forces behind this growth? 

There are many contributing factors. First, the options of where to deploy edge services are expanding from data center and central cloud to network edge, telco edge and device edge. In addition, the use cases for these new services are growing at a rapid pace, particularly since COVID-19 has decentralized the world. Looking into 2021 and beyond, here is what we can expect from the edge computing market:

Kotlin Multiplatform vs Flutter: What Cross-Platform Developers Should Choose?

Since the popularity of mobile apps is continuously bringing new approaches to development, many new frameworks are getting a foothold and the older ones are quickly evolving to catch up in this race. While Kotlin came as a better alternative to Java for Android development, Flutter actually revolutionized cross-platform app development.

While Kotlin offered a lot of new and powerful features it was only limited to Android app development. Kotlin is mainly a platform-specific language. Now Google even made Kotlin evolve with cross-platform capabilities and so we now have Kotlin Multiplatform, a new framework to make the awesome features of Kotlin language stretch across both iOS and Android platforms. 

Some Typography Blog Posts I’ve Bookmarked and Read Lately

  • Font-size: An Unexpectedly Complex CSS Property — From Manish Goregaokar in 2017. Of many oddities, I found the one where font: medium monospace renders at 13px where font: medium sans-serif renders at 16px particularly weird.
  • The good line-height — Since CSS supports unitless line-height, you probably shouldn’t be setting a hard number anyway.
  • Time to Say Goodbye to Google Fonts — Simon Wicki doesn’t mean don’t use them, they mean self-host them. Browsers are starting to isolate cache on a per-domain basis so that old argument that you buy speed because “users probably already have it cached” doesn’t hold up. I expected to hear about stuff like having more control over font loading, but this is just about the cache.
  • My Favorite Typefaces of 2020 — John Boardley’s picks for the past year. Have you seen these “color fonts”? They are so cool. Check out LiebeHeide, it looks like real pen-on-paper.
  • How to avoid layout shifts caused by web fonts — We’ve got CLS (Cumulative Layout Shift) now and it’s such an important performance metric that will soon start affecting SEO. And because we have CSS control over font loading via font-display, that means if we set things up such that font loading shifts the page, that’s bad. I like Simon Hearne’s suggestion that we tweak both our custom font and fallback font to match perfectly. I think perfect fallback fonts are one of the best CSS tricks.
  • How to pick a Typeface for User Interface and App Design? — Oliver Schöndorfer makes the case for “functional text” which is everything that isn’t body text (e.g. paragraphs of text) or display text (e.g. headers). “Clarity is key.”


The post Some Typography Blog Posts I’ve Bookmarked and Read Lately appeared first on CSS-Tricks.

You can support CSS-Tricks by being an MVP Supporter.

I need a little help with my code its really simply

This is a simple tictactoe game. When I launch my code, the alert to enter 1,2, or 3 for the row only shows up after I press enter. How do I make it show up first each time I put a new entry?

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <title>TikTakToe Game</title>
  </head>
  <body>
       <input type="hidden" id="row">
       <input type="hidden"id="col">
       <input type="hidden" id="O_X" value="">

        <input type="hidden" id="c1" value="___">
        <input type="hidden" id="c2" value="___">
        <input type="hidden" id="c3" value="___">
        <input type="hidden" id="c4" value="___">
        <input type="hidden" id="c5" value="___">
        <input type="hidden" id="c6" value="___">
        <input type="hidden" id="c7" value="___">
        <input type="hidden" id="c8" value="___">
        <input type="hidden" id="c9" value="___">
        <input type="hidden" id="t" value="">


    <script type="text/javascript">
      generateGrid();
      function myFunction(grid) {
        var rowColVal = prompt(grid);
        if(rowColVal != "" ){

          var rowVal = $("#row").val();
          var colVal = $("#col").val();
          var valueOfInputRow = document.getElementById('row').value;
          var valueOfInputCol = document.getElementById('col').value;
          if(valueOfInputRow == ""){
            rowVal = rowColVal;
            if(rowVal == "1" || rowVal == "2" || rowVal == "3"){
              document.getElementById('row').value = rowVal;
            }else{
              alert("Please Enter Row # 1 , 2 or 3");
                generateGrid();
            }
          }else{
            colVal = rowColVal;
            if(colVal == "1" || colVal == "2" || colVal == "3"){
              document.getElementById('col').value = colVal;
            }else{
              alert("Please Enter Col # 1 , 2 or 3");
              generateGrid();
            }
          }

          if (rowVal != "" && colVal != "" ) {
            if(rowVal == "1"){

              if(colVal == "1"){
                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
                var c1 = $("#c1").val();
                if(c1 != "___"){
                  alert("Row # 1 & Col # 1 Already Filled");
                  generateGrid();

                }else{
                  var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                   $("#c1").val(o_x);
                    checkWinner();
                    generateGrid();
                }

              }
           if(colVal == "2"){
                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
                var c2 = $("#c2").val();
                if(c2 != "___"){
                  alert("Row # 1 & Col # 2 Already Filled");
                  generateGrid();

                }else{
                    var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                 $("#c2").val(o_x);
                    checkWinner();
                    generateGrid();
                }
              }
               if(colVal == "3"){

                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
               var c3 = $("#c3").val();
                if(c3 != "___"){
                  alert("Row # 1 & Col # 3 Already Filled");
                  generateGrid();

                }else{
                    var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                   $("#c3").val(o_x);
                    checkWinner();
                    generateGrid();
              }
            }
      }

          if(rowVal == "2"){

              if(colVal == "1"){
                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
                var c4 = $("#c4").val();
                if(c4 != "___"){
                  alert("Row # 1 & Col # 1 Already Filled");
                  generateGrid();

                }else{
                  var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                   $("#c4").val(o_x);
                    checkWinner();
                    generateGrid();
                }

              }

               if(colVal == "2"){
                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
                var c5 = $("#c5").val();
                if(c5 != "___"){
                  alert("Row # 2 & Col # 2 Already Filled");
                  generateGrid();

                }else{
                   // $("#c2").val(" X ");
                    var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                 $("#c5").val(o_x);
                    checkWinner();
                    generateGrid();
                }
              }
               if(colVal == "3"){

                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
               var c6 = $("#c6").val();
                if(c6 != "___"){
                  alert("Row # 2 & Col # 3 Already Filled");
                  generateGrid();

                }else{
                    var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                   $("#c6").val(o_x);
                   checkWinner();
                    generateGrid();
              }
            }
          }

          if(rowVal == "3"){

              if(colVal == "1"){
                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
                var c7 = $("#c7").val();
                if(c7 != "___"){
                  alert("Row # 3 & Col # 1 Already Filled");
                  generateGrid();
                }else{
                  var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                   $("#c7").val(o_x);
                   checkWinner();
                    generateGrid();
                }
              }
               if(colVal == "2"){
                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
                var c8 = $("#c8").val();
                if(c8 != "___"){
                  alert("Row # 3 & Col # 2 Already Filled");
                  generateGrid();

                }else{
                   // $("#c2").val(" X ");
                    var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                 $("#c8").val(o_x);
                  checkWinner();
                    generateGrid();
                }                
              }
               if(colVal == "3"){

                document.getElementById('row').value = "";
                document.getElementById('col').value = "";   
               var c9 = $("#c9").val();
                if(c9 != "___"){
                  alert("Row # 3 & Col # 3 Already Filled");

                  generateGrid();

                }else{
                    var o_x = $("#O_X").val();
                  if(o_x == ""){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " X "){
                    var o_x = " O ";
                     $("#O_X").val(o_x)
                  }else if(o_x == " O "){
                    var o_x = " X ";
                     $("#O_X").val(o_x)
                  }
                   $("#c9").val(o_x);
                    checkWinner();
                    generateGrid();
              }
            }
          }
          }else if(rowVal != "" && colVal == ""){

          alert("Please Enter Col 1 2 or 3");
             generateGrid();
          }
        }else{
          alert("Please Enter  Row 1 2 or 3");
             generateGrid();
        }
      }

function generateGrid(){
  var c1 = $("#c1").val();
  var c2 = $("#c2").val();
  var c3 = $("#c3").val();
  var c4 = $("#c4").val();
  var c5 = $("#c5").val();
  var c6 = $("#c6").val();
  var c7 = $("#c7").val();
  var c8 = $("#c8").val();
  var c9 = $("#c9").val();


  var grid = " "+c1+" "+"| "+c2+" | "+c3+" \n"+
             " "+c4+" "+"| "+c5+" | "+c6+" \n"+
             " "+c7+" "+"| "+c8+" | "+c9+" \n";

  myFunction(grid);
}

function checkWinner(){
  var c1 = $("#c1").val();
  var c2 = $("#c2").val();
  var c3 = $("#c3").val();
  var c4 = $("#c4").val();
  var c5 = $("#c5").val();
  var c6 = $("#c6").val();
  var c7 = $("#c7").val();
  var c8 = $("#c8").val();
  var c9 = $("#c9").val();

    if( (c1 == c2) && (c1 == c3) && ( c1 != "___" && c2 != "___" && c3 != "___" )){
    alert(c1+" is Winer");

    newGame();


    }else if( (c4 == c5) && (c4 == c6) && ( c4 != "___" && c5 != "___" && c6 != "___" )){
      alert(c4+" is Winer");
      newGame();
    }else if( (c7 == c8) && (c7 == c9) && ( c7 != "___" && c8 != "___" && c9 != "___" ) ){
      alert(c7+" is Winer");
      newGame();

    }else if( (c1 == c5) && (c1 == c9) && ( c1 != "___" && c5 != "___" && c9 != "___" )){
      alert(c1+" is Winer");
      newGame();
    }else if( (c3 == c5) && (c3 == c7) && ( c3 != "___" && c5 != "___" && c7 != "___" )){
      alert(c3+" is Winer");
      newGame();
    }else if( (c1 == c4) && (c1 == c7) && ( c1 != "___" && c4 != "___" && c4 != "___" )){
      alert(c1+" is Winer");
      newGame();
    }else if( (c2 == c5) && (c2 == c8) && ( c2 != "___" && c5 != "___" && c8 != "___" )){
      alert(c2+" is Winer");
      newGame();
    }else if( (c3 == c6) && (c3 == c9) && ( c3 != "___" && c6 != "___" && c9 != "___" )){
      alert(c3+" is Winer");
      newGame();
    }else{
       var t = Number($("#t").val());
        if(t == 0){

          t=1;
          $("#t").val(t);
        }else{
          t+=t;
          $("#t").val(t);
        }
        if(t == "256"){
          alert("Game Draw");
          newGame();
        }else{
          generateGrid();
        }

    }  


}
function newGame(){
  alert("New Game Start");
  $("#c1").val("___");
    $("#c2").val("___");
    $("#c3").val("___");
    $("#c4").val("___");
    $("#c5").val("___");
    $("#c6").val("___");
    $("#c7").val("___");
    $("#c8").val("___");
    $("#c9").val("___");
    $("#t").val("");
     generateGrid();

}
</script>

  </body>
</html>

Flutter For Novices: Create Your First Cross-Platform App in 2021

In this era of the internet, it's no secret that a good and scalable mobile app can take your business to a new level. Running a business in this digital and competitive time is not a cakewalk. There are numerous apps that get launched on Play Store and App Store, but all of them are not successful. Therefore, business owners need a mobile app that fosters customer loyalty and builds brand advocacy. 

Technological innovations are leaving no stone unturned and are mostly impacting app development. More and more technology tools are launched into the market that makes developers' lives easy and helps them create beautiful apps. 

Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends

Java has a large number of tools and frameworks to facilitate integration with databases, microservices, and so on. These tools have evolved considerably. It all started with class integrated with XML files and has undergone significant evolution with reflections and annotations within the class definitions. In the cloud-native scenario, requirements have changed and this impacts applications in ways that weren't critical before. For example, cold starts and boot time wasn't critical with application servers but is crucial in serverless and microservices. The objective of this presentation is to talk about how these frameworks behave in the native cloud age and they affect the new world of Jakarta EE: the trade-off of Reflection, Annotation Processing, and Native Image capabilities are some examples, and the tools and frameworks you can choose in for your next application. 

Serverless as a Competitive Advantage for Your Business

How could serverless help move your business faster and outpace competitors?

In this article, I'll go through several of those reasons, the theory behind them, how the theory might not work in practice, and what it takes to actually takes to extract the full benefits from serverless infrastructure.