Adam Daniels

Adam Daniels

1558596491

Best JavaScript Frameworks, Libraries and Tools to Use

JavaScript (JS) is a lightweight interpreted or just-in-time compiled programming language with first-class functions. Here we have listed best JavaScript frameworks, libraries and tools to use

It seems there are more JavaScript frameworks, libraries, and tools than there are developers. At the end of 2019, a quick search on GitHub reveals 2.3 million JavaScript projects. npm has become the world’s largest module system with 700,000 usable packages on npmjs.com and billions of downloads every month.

This article endeavors to explain the basics and rudimentary differences between the most popular client-side JavaScript frameworks, libraries, and tools. Whether they are “best” for you is another question. Choose something and stick with it for a while. Just be aware your favorite option will be superseded by something “better” no matter what you select!

Table of Contents

  • Table of Contents
  • Tricky Terminology
  • Libraries
  • Frameworks
  • Tools
  • Don’t Label Me!
  • JavaScript Frameworks and Libraries
  • jQuery
  • React
  • AngularJS 1.x
  • Angular 2+ (now 7.x)
  • Vue.js
  • Sencha Ext JS
  • Lodash and Underscore
  • Backbone.js
  • Ember.js
  • Knockout.js
  • Notable Mentions
  • Tools: General-Purpose Task Runners
  • Webpack
  • Gulp.js
  • npm
  • Grunt
  • Tools: Module Bundlers
  • Browserify
  • RequireJS
  • Tools: Linting
  • ESLint
  • JSHint
  • JSLint
  • Tools: Test Suites
  • Jest
  • Mocha
  • Jasmine
  • Tools: Miscellaneous
  • Summary and Recommendations
  • Comments

Please accept the following terms and conditions before reading this article!…

  • The JavaScript landscape changes on a daily basis. This article will be out of date the moment it’s published!
  • By “best” I mean “the most popular/used/hyped general-purpose projects”. All have free/open source options but the list may not include your favorites.
  • Discontinued projects such as YUI are not included even though they may still have high use across the web.
  • Only client-side projects are referenced. Some can work server-side but the list does not include pure server-based frameworks such as Express.js or Hapi.
  • Information about each project is intentionally brief to provide an overview for further research.
  • Each project provides a usage popularity indicator but statistics are notoriously difficult to collate and can be misleading.
  • I’m biased. You’re biased. Everyone else is biased! I haven’t tried every tool here and will declare my favorites but you should make your own assessment based on your requirements.
  • Neither I or SitePoint are liable for any disastrous decisions you make!

 

Tricky Terminology

The terms “framework”, “library” and “tool” can mean different things to different people at different times depending on the context. The general definitions used here:

JavaScript Libraries

A library is an organized collection of useful functionality. A typical library could include functions to handle strings, dates, HTML DOM elements, events, cookies, animations, network requests, and more. Each function returns values to the calling application which can be implemented however you choose. Think of it like a selection of car components: you’re free to use any to help construct a working vehicle but you must build the engine yourself.

Libraries normally provide a higher level of abstraction which smooths over implementation details and inconsistencies. For example, Ajax can be implemented using the XMLHttpRequest API but this requires several lines of code and there are subtle differences across browsers. A library may provide a simpler ajax() function so you’re free to concentrate on higher-level business logic.

A library could cut development time by 20% because you don’t have to worry about the finer details. The downsides:

  • a bug within a library can be difficult to locate and fix
  • there’s no guarantee the development team will release a patch quickly
  • a patch could change the API and incur significant changes to your code.

 

JavaScript Frameworks

A framework is an application skeleton. It requires you to approach software design in a specific way and insert your own logic at certain points. Functionality such as events, storage, and data binding are normally provided for you. Using the car analogy, a framework provides a working chassis, body, and engine. You can add, remove or tinker with some components presuming the vehicle remains operational.

A framework normally provides a higher level of abstraction than a library and can help you rapidly build the first 80% of your project. The downsides:

  • the last 20% can be tough going if your application moves beyond the confines of the framework
  • framework updates or migrations can be difficult – if not impossible
  • core framework code and concepts rarely age well. Developers will always discover a better way to do the same thing.

JavaScript Tools

A tool aids development but is not an integral part of your project. Tools include build systems, compilers, transpilers, code minifiers, image compressors, deployment mechanisms and more.

Tools should provide an easier development process. For example, many coders prefer Sass to CSS because it provides code separation, nesting, render-time variables, loops, and functions. Browsers do not understand Sass/SCSS syntax so the code must be compiled to CSS using an appropriate tool before testing and deployment.

Don’t Label Me!

The distinction between libraries, frameworks, and tools is rarely clear. A framework could include a library. A library may implement framework-like methods. Tools could be essential for either. I’ve attempted to label each project but the scope can vary.

If this sounds too complicated, you could consider coding vanilla JavaScript. That’s fine, but you will inevitably write your own library and/or framework code which must be maintained. JavaScript itself is an abstraction on a tower of browser and OS abstractions!

JavaScript Frameworks and Libraries

Projects in approximate order of usage/popularity/hype…

jQuery

jQuery remains the most-used JavaScript library ever created and is distributed with WordPress, ASP.NET and several other frameworks. It revolutionized client-side development by introducing CSS selector to DOM node retrieval plus chaining to apply event handlers, animations, and Ajax calls.

jQuery has fallen from developer favor in recent years, but usage remains high. It remains a viable option for projects which require a sprinkling of JavaScript functionality.

Pros:

  • small distribution size
  • shallow learning curve, considerable online help
  • concise syntax
  • easy to extend

Cons:

  • adds a speed overhead to native APIs
  • less essential now that browser compatibility has improved
  • usage has flat-lined
  • some industry backlash against unnecessary use.

React

Perhaps the most-talked about library of the last few years, React claims to be a JavaScript library for building user interfaces. It focuses on the “View” part of Model-View-Controller (MVC) development and makes it easy to create UI components which retain state. It was one of the first libraries to implement a virtual DOM; the in-memory structure computes the differences and updates the page efficiently.

React usage appears low in statistics perhaps because it’s used in applications rather than websites. Almost 70% of developers claim to have some experience using the library.

Pros:

  • small, efficient, fast and flexible
  • simple component model
  • good documentation and online resources
  • server-side rendering is possible
  • still popular and growing fast
  • plenty of jobs advertise for React developers

Cons:

  • new concepts and syntaxes to learn
  • build tools are essential
  • can require other libraries or frameworks to provide the model and controller aspects
  • can be incompatible with code and other libraries which modify the DOM

AngularJS 1.x

Angular is the first framework – or MVC application framework – to appear on this list. The most popular edition remains version 1.x which extended HTML with two-way data-binding while decoupling DOM manipulation from application logic.

Angular 1.x is still in development despite the release of version 2 (which is now version 4!) Confused? See below…

Pros:

  • a popular framework adopted by several large companies
  • a single solution to produce modern web applications
  • part of the “standard” MEAN stack (MongoDB, Express.JS, AngularJS, NodeJS) so many articles and tutorials are available

Cons:

  • steeper learning curve than some alternatives
  • large code base
  • impossible to upgrade to Angular 2.x
  • despite being a Google project, Google do not appear to use it?

Angular 2+ (now 7.x)

Angular 2.0 was released in September 2016. It was a complete rewrite which introduced a modular component-based model created with TypeScript (which is compiled to JavaScript). To add to the confusion, version 4.0 was released in March 2017 (v3 was skipped to avoid semantic version issues).

Angular 2+ is radically different to v1. Neither is compatible with the other – perhaps Google should have given the project a different name?!

Pros:

  • a single solution to produce modern web applications
  • still part of the MEAN stack although fewer Angular 2+ tutorials are available
  • TypeScript provides some advantages to those familiar with statically-typed languages such as C# and Java.

Cons:

  • steeper learning curve than some alternatives
  • large code base
  • impossible to upgrade from Angular 1.x
  • Angular 2.x has experienced relatively low uptake compared to 1.x
  • despite being a Google project, Google do not appear to use it?

Vue.js

Vue.js is a lightweight progressive framework for building user interfaces. The core offers a React-like virtual DOM-powered view layer which can be integrated with other libraries but it is also capable of powering single-page applications. The framework was created by Evan You who previously worked on AngularJS but wanted to extract the parts he liked.

Vue.js uses an HTML template syntax to bind the DOM to instance data. Models are plain JavaScript objects which update the view when data is changed. Additional tools provide facilities for scaffolding, routing, state management, animations and more.

Pros:

  • rapid adoption and increasing popularity
  • simple to get started with high level of developer satisfaction
  • lightweight, small dependency and good performance

Cons:

  • can be overshadowed by React
  • some reliance on a single developer for updates
  • fewer resources than alternatives

Sencha Ext JS

Ext JS evolved from YUI-Ext and has one of the longest histories on this list. Although best known for its wide range of configurable, accessible, cross-browser UI components and data visualisation tools, Ext JS also provides a framework for building full applications. Alternatively, you can use the component library with React or Angular.

Ext JS is the only framework here to offer commercial training and support. There are also options to have the Sencha team help review your code, automate testing, and migrate to other platforms.

Pros:

  • a wide range of usable components
  • contains everything required to create both web and mobile applications
  • script customization, design tools, and quick prototypes
  • provides tools for visually building and styling web apps
  • commercial support and excellent documentation
  • 30-day free trial and community edition for smaller applications (under a wide range of usable componentscontains everything required to create both web and mobile applicationsscript customization, design tools, and quick prototypesprovides tools for visually building and styling web appscommercial support and excellent documentation30-day free trial and community edition for smaller applications (under $10,000 revenue per year)0,000 revenue per year)

Cons:

  • integration with frameworks other than React and Angular may be impractical as of now — see roadmap plans for Ext JS 7
  • deep custom UI changes may be difficult

Lodash and Underscore

Lodash and Underscore are combined in this section because they provide hundreds of functional JavaScript utilities to supplement native string, number, array and other primitive object methods. There is some overlap so you are unlikely to require both libraries in a single project.

Client-side usage is low but either library can be adopted for server-side Node.js applications.

Pros:

  • small and simple
  • easy to learn with good documentation
  • compatible with most libraries and frameworks
  • does not extend built-in objects
  • can be used on the client or server

Cons:

  • some methods are available in ES2015 and later editions of JavaScript.

Backbone.js

Backbone.js was one of the earliest client-side options to provide an MVC structure commonly found in server-side frameworks. Its only dependency is Underscore.js which was created by the same developer.

Backbone.js claims to be a library because it can be integrated with other projects. I suspect most developers consider it to be a framework, albeit less opinionated than some others.

Pros:

  • small, lightweight and less complicated
  • does not add logic to HTML
  • great documentation
  • adopted for many applications including Trello, WordPress.com, LinkedIn and Groupon

Cons:

  • a lower level of abstraction than alternatives such as AngularJS (although that could be considered a benefit)
  • requires additional components to implement features such as data binding
  • more recent frameworks have moved away from MVC architectures

Ember.js

Ember.js is one of the larger opinionated frameworks which is based on a Model-View-ViewModel (MVVM) pattern. It implements templating, data-binding, and libraries in a single package. The convention-over-configuration concepts will be immediately familiar to those with Ruby on Rails experience.

Pros:

  • provides a single solution for client-side applications
  • developers can be instantly productive – it uses jQuery
  • good backward compatibility and upgrade options
  • has adopted modern web development standards

Cons:

  • large distributable
  • considered monolithic compared to other frameworks which are moving toward smaller component structures
  • steep learning curve – it’s the Ember way or no way

Knockout.js

One of the older MVVM frameworks, Knockout.js uses observers to ensure the UI stays synchronized with underlying data. It features templating and dependency tracking.

Pros:

  • small and lightweight with no dependencies
  • excellent browser support going back to IE6
  • good documentation

Cons:

  • larger projects can become complex
  • development has slowed
  • usage appears to be on the wane

Notable Mentions

Hungry for more? The following projects are less popular but worth

considering:

  • Polymer – a library which enables cross-browser support for HTML5 web components
  • Meteor – a full-stack platform for web applications.
  • Aurelia – a lightweight, cross-platform framework
  • Svelte – a fairly new project which transforms framework source code into vanilla-like JavaScript
  • Conditioner.js – a new library which automatically loads and unloads modules based on state.

 

JavaScript Tools: General-Purpose Task Runners

Build tools automate a variety of web development tasks such as pre-processing, compilation, module bundling, image optimization, code minification, linting, and running tests. Tasks are usually managed together in a single executable package. The most popular options:

Webpack

Webpack supports all popular module options and has become synonymous with React development. Although claiming to be a module bundler, Webpack can be used as a general-purpose task runner. JavaScript object-based configuration can be a little awkward.Generators are available but some Webpack users have been migrating to Parcel for easier configuration and improved compilation times.

Gulp.js

While it was not the first task runner, Gulp quickly became one of the most popular and is my personal favorite. Gulp uses easy-to-read JavaScript code which loads source files into a stream and pipes the data through various plugins before they are output to a build folder. It’s simple, fast and fun, but developers have been migrating to Webpack.

npm

npm is the Node.js package manager but its scripts facility can be used for general-purpose task running. It’s an attractive option for simpler projects with few dependencies. However, more complex tasks can rapidly become impractical.

Grunt

Grunt was one of the first JavaScript task runners to achieve mass adoption but the speed and complicated JSON configuration led to the rise of Gulp. The worst issues have been resolved and Grunt remains a popular option.

JavaScript Tools: Module Bundlers

Managing more than a few JavaScript files can become a chore. Unless you can adopt the relatively new ES6 module import syntax natively, JavaScript dependencies in the browser must be loaded or concatenated in an appropriate order. A module bundler can be used if you need to support older browsers (anything released prior to 2018) but the need to use these tools will diminish over time.

Browserify

Browserify supports CommonJS modules as used by Node.js to compile all modules into a single browser-compatible file.

RequireJS

RequireJS started life an in-browser module loader although it can also be used in Node.js. It supports AMD syntax.

JavaScript Tools: Linting

Linting analyses your code for potential errors or deviation from syntactical standards. You’ll never miss a closing bracket or undeclared variable again!

ESLint

ESLint is the most popular linting tool supported by the majority of IDEs, editors, bundlers, and task runners. Every rule is a plugin so it can be configured to your liking.

JSHint

A flexible JavaScript linter which is less configurable than ESLint but strikes a good balance between genuine errors and pedantic syntactical demands.

JSLint

One of the first linters and it implements a strict set of default rules. Development has slowed and it can be a little uncompromising for some developers.

JavaScript Tools: Test Suites

Test-Driven-Development requires you to write code to test your code before you start writing it. You’re welcome to write code to test your test code too!

There are many options including Ava, Tape and Jasmine but the three most popular options are currently…

Jest

A testing framework from Facebook which has risen in popularity because of its close connections with React and Webpack.

Mocha

Mocha can run tests in Node.js and a browser. It supports asynchronous testing and is often paired with Chai to enable test code to be expressed in a readable style. It was the most popular option for several years.

Jasmine

Jasmine is a behavior-driven test suite which can automate the testing your UI and interactions in a browser.

JavaScript Tools: Miscellaneous

Despite my best efforts, I accept not everyone loves JavaScript! Compilers such as TypeScript, LiveScript and CoffeeScript can make your development life a little more pleasurable. Alternatively, consider Babel to transform modern, concise ES2015 source into cross-browser-compatible ES5 code.

There are dozens of JavaScript-powered HTML template engines including Mustache, Handlebars, Pug (Jade) and EJS. I prefer lightweight options which retain JavaScript syntax such as EJS and doT.

Finally, why write your own documentation when you can automate it? ES2015-compatible documentation generators include ESDoc, JSDoc, YUIdoc, documentation.js and Transcription.

Summary and Recommendations

If you follow the wisdom of crowds, momentum is currently behind React and other libraries are moving in a similar technical direction. It’s a safe career choice but you should also consider Vue.js or the React-compatible-but-smaller Preact.

Monolithic frameworks have fallen from favor but, should you require a strict structure for larger projects, AngularJS remains a popular option. The majority of developers have stuck with version 1.0 but that’s possibly out of necessity than choice. Longer term, version 2+ could be a safer bet but you will need to learn TypeScript.

Sencha’s Ext JS is a great option for companies (small businesses to enterprises) looking for an option that includes both a framework and pre-built, integrated components and tools, including access to commercial support. Ext JS also easily integrates its robust component library with React and Angular, for developers looking to implement pre-built components as opposed to building them on their own.

Do not discount jQuery. It’s not trendy and is rarely mentioned in the technical press, but it’s actively developed and more than capable for websites and applications. jQuery has a shallow learning curve and is understood by many developers worldwide.

If you’re feeling adventurous, new transpiler options such as Svelte and Rawact convert framework code to vanilla JavaScript. The framework dependency is removed, code is considerably smaller and runs faster.

Tools choice is less critical and can vary from project to project. Most WebPack, Gulp or npm scripts. You can’t go far wrong with ESLint and Jest for testing but there are plenty of alternatives to try.

That said, every project, team and skill set is different. You have limited time to make an assessment so it’s tempting to use what you know. This article will receive comments recommending FrameworkX but everything looks like a nail when you have a hammer.

Finally, never forget that libraries, frameworks, and tools are optional! JavaScript development has been revolutionized during the past decade; we’ve gone from a few rudimentary helper libraries to an overwhelming choice. It’s easy to fall into a trap of ever-increasing complexity or switching to the latest hot framework every few months. Always consider vanilla JavaScript – especially for smaller and personal personal. The knowledge you gain cannot date and will become invaluable when evaluating frameworks for other projects.

Have I missed, dismissed, or failed to praise the benefits your favorite JavaScript libraries, frameworks and tools? Of course I have! Comments welcome…

#javascript #web-development #jquery #npm #reactjs #angular #angular-js #vue-js #ember-js #webpack

What is GEEK

Buddha Community

Best JavaScript Frameworks, Libraries and Tools to Use
bindu singh

bindu singh

1647351133

Procedure To Become An Air Hostess/Cabin Crew

Minimum educational required – 10+2 passed in any stream from a recognized board.

The age limit is 18 to 25 years. It may differ from one airline to another!

 

Physical and Medical standards –

  • Females must be 157 cm in height and males must be 170 cm in height (for males). This parameter may vary from one airline toward the next.
  • The candidate's body weight should be proportional to his or her height.
  • Candidates with blemish-free skin will have an advantage.
  • Physical fitness is required of the candidate.
  • Eyesight requirements: a minimum of 6/9 vision is required. Many airlines allow applicants to fix their vision to 20/20!
  • There should be no history of mental disease in the candidate's past.
  • The candidate should not have a significant cardiovascular condition.

You can become an air hostess if you meet certain criteria, such as a minimum educational level, an age limit, language ability, and physical characteristics.

As can be seen from the preceding information, a 10+2 pass is the minimal educational need for becoming an air hostess in India. So, if you have a 10+2 certificate from a recognized board, you are qualified to apply for an interview for air hostess positions!

You can still apply for this job if you have a higher qualification (such as a Bachelor's or Master's Degree).

So That I may recommend, joining Special Personality development courses, a learning gallery that offers aviation industry courses by AEROFLY INTERNATIONAL AVIATION ACADEMY in CHANDIGARH. They provide extra sessions included in the course and conduct the entire course in 6 months covering all topics at an affordable pricing structure. They pay particular attention to each and every aspirant and prepare them according to airline criteria. So be a part of it and give your aspirations So be a part of it and give your aspirations wings.

Read More:   Safety and Emergency Procedures of Aviation || Operations of Travel and Hospitality Management || Intellectual Language and Interview Training || Premiere Coaching For Retail and Mass Communication |Introductory Cosmetology and Tress Styling  ||  Aircraft Ground Personnel Competent Course

For more information:

Visit us at:     https://aerofly.co.in

Phone         :     wa.me//+919988887551 

Address:     Aerofly International Aviation Academy, SCO 68, 4th Floor, Sector 17-D,                            Chandigarh, Pin 160017 

Email:     info@aerofly.co.in

 

#air hostess institute in Delhi, 

#air hostess institute in Chandigarh, 

#air hostess institute near me,

#best air hostess institute in India,
#air hostess institute,

#best air hostess institute in Delhi, 

#air hostess institute in India, 

#best air hostess institute in India,

#air hostess training institute fees, 

#top 10 air hostess training institute in India, 

#government air hostess training institute in India, 

#best air hostess training institute in the world,

#air hostess training institute fees, 

#cabin crew course fees, 

#cabin crew course duration and fees, 

#best cabin crew training institute in Delhi, 

#cabin crew courses after 12th,

#best cabin crew training institute in Delhi, 

#cabin crew training institute in Delhi, 

#cabin crew training institute in India,

#cabin crew training institute near me,

#best cabin crew training institute in India,

#best cabin crew training institute in Delhi, 

#best cabin crew training institute in the world, 

#government cabin crew training institute

Chloe  Butler

Chloe Butler

1667425440

Pdf2gerb: Perl Script Converts PDF Files to Gerber format

pdf2gerb

Perl script converts PDF files to Gerber format

Pdf2Gerb generates Gerber 274X photoplotting and Excellon drill files from PDFs of a PCB. Up to three PDFs are used: the top copper layer, the bottom copper layer (for 2-sided PCBs), and an optional silk screen layer. The PDFs can be created directly from any PDF drawing software, or a PDF print driver can be used to capture the Print output if the drawing software does not directly support output to PDF.

The general workflow is as follows:

  1. Design the PCB using your favorite CAD or drawing software.
  2. Print the top and bottom copper and top silk screen layers to a PDF file.
  3. Run Pdf2Gerb on the PDFs to create Gerber and Excellon files.
  4. Use a Gerber viewer to double-check the output against the original PCB design.
  5. Make adjustments as needed.
  6. Submit the files to a PCB manufacturer.

Please note that Pdf2Gerb does NOT perform DRC (Design Rule Checks), as these will vary according to individual PCB manufacturer conventions and capabilities. Also note that Pdf2Gerb is not perfect, so the output files must always be checked before submitting them. As of version 1.6, Pdf2Gerb supports most PCB elements, such as round and square pads, round holes, traces, SMD pads, ground planes, no-fill areas, and panelization. However, because it interprets the graphical output of a Print function, there are limitations in what it can recognize (or there may be bugs).

See docs/Pdf2Gerb.pdf for install/setup, config, usage, and other info.


pdf2gerb_cfg.pm

#Pdf2Gerb config settings:
#Put this file in same folder/directory as pdf2gerb.pl itself (global settings),
#or copy to another folder/directory with PDFs if you want PCB-specific settings.
#There is only one user of this file, so we don't need a custom package or namespace.
#NOTE: all constants defined in here will be added to main namespace.
#package pdf2gerb_cfg;

use strict; #trap undef vars (easier debug)
use warnings; #other useful info (easier debug)


##############################################################################################
#configurable settings:
#change values here instead of in main pfg2gerb.pl file

use constant WANT_COLORS => ($^O !~ m/Win/); #ANSI colors no worky on Windows? this must be set < first DebugPrint() call

#just a little warning; set realistic expectations:
#DebugPrint("${\(CYAN)}Pdf2Gerb.pl ${\(VERSION)}, $^O O/S\n${\(YELLOW)}${\(BOLD)}${\(ITALIC)}This is EXPERIMENTAL software.  \nGerber files MAY CONTAIN ERRORS.  Please CHECK them before fabrication!${\(RESET)}", 0); #if WANT_DEBUG

use constant METRIC => FALSE; #set to TRUE for metric units (only affect final numbers in output files, not internal arithmetic)
use constant APERTURE_LIMIT => 0; #34; #max #apertures to use; generate warnings if too many apertures are used (0 to not check)
use constant DRILL_FMT => '2.4'; #'2.3'; #'2.4' is the default for PCB fab; change to '2.3' for CNC

use constant WANT_DEBUG => 0; #10; #level of debug wanted; higher == more, lower == less, 0 == none
use constant GERBER_DEBUG => 0; #level of debug to include in Gerber file; DON'T USE FOR FABRICATION
use constant WANT_STREAMS => FALSE; #TRUE; #save decompressed streams to files (for debug)
use constant WANT_ALLINPUT => FALSE; #TRUE; #save entire input stream (for debug ONLY)

#DebugPrint(sprintf("${\(CYAN)}DEBUG: stdout %d, gerber %d, want streams? %d, all input? %d, O/S: $^O, Perl: $]${\(RESET)}\n", WANT_DEBUG, GERBER_DEBUG, WANT_STREAMS, WANT_ALLINPUT), 1);
#DebugPrint(sprintf("max int = %d, min int = %d\n", MAXINT, MININT), 1); 

#define standard trace and pad sizes to reduce scaling or PDF rendering errors:
#This avoids weird aperture settings and replaces them with more standardized values.
#(I'm not sure how photoplotters handle strange sizes).
#Fewer choices here gives more accurate mapping in the final Gerber files.
#units are in inches
use constant TOOL_SIZES => #add more as desired
(
#round or square pads (> 0) and drills (< 0):
    .010, -.001,  #tiny pads for SMD; dummy drill size (too small for practical use, but needed so StandardTool will use this entry)
    .031, -.014,  #used for vias
    .041, -.020,  #smallest non-filled plated hole
    .051, -.025,
    .056, -.029,  #useful for IC pins
    .070, -.033,
    .075, -.040,  #heavier leads
#    .090, -.043,  #NOTE: 600 dpi is not high enough resolution to reliably distinguish between .043" and .046", so choose 1 of the 2 here
    .100, -.046,
    .115, -.052,
    .130, -.061,
    .140, -.067,
    .150, -.079,
    .175, -.088,
    .190, -.093,
    .200, -.100,
    .220, -.110,
    .160, -.125,  #useful for mounting holes
#some additional pad sizes without holes (repeat a previous hole size if you just want the pad size):
    .090, -.040,  #want a .090 pad option, but use dummy hole size
    .065, -.040, #.065 x .065 rect pad
    .035, -.040, #.035 x .065 rect pad
#traces:
    .001,  #too thin for real traces; use only for board outlines
    .006,  #minimum real trace width; mainly used for text
    .008,  #mainly used for mid-sized text, not traces
    .010,  #minimum recommended trace width for low-current signals
    .012,
    .015,  #moderate low-voltage current
    .020,  #heavier trace for power, ground (even if a lighter one is adequate)
    .025,
    .030,  #heavy-current traces; be careful with these ones!
    .040,
    .050,
    .060,
    .080,
    .100,
    .120,
);
#Areas larger than the values below will be filled with parallel lines:
#This cuts down on the number of aperture sizes used.
#Set to 0 to always use an aperture or drill, regardless of size.
use constant { MAX_APERTURE => max((TOOL_SIZES)) + .004, MAX_DRILL => -min((TOOL_SIZES)) + .004 }; #max aperture and drill sizes (plus a little tolerance)
#DebugPrint(sprintf("using %d standard tool sizes: %s, max aper %.3f, max drill %.3f\n", scalar((TOOL_SIZES)), join(", ", (TOOL_SIZES)), MAX_APERTURE, MAX_DRILL), 1);

#NOTE: Compare the PDF to the original CAD file to check the accuracy of the PDF rendering and parsing!
#for example, the CAD software I used generated the following circles for holes:
#CAD hole size:   parsed PDF diameter:      error:
#  .014                .016                +.002
#  .020                .02267              +.00267
#  .025                .026                +.001
#  .029                .03167              +.00267
#  .033                .036                +.003
#  .040                .04267              +.00267
#This was usually ~ .002" - .003" too big compared to the hole as displayed in the CAD software.
#To compensate for PDF rendering errors (either during CAD Print function or PDF parsing logic), adjust the values below as needed.
#units are pixels; for example, a value of 2.4 at 600 dpi = .0004 inch, 2 at 600 dpi = .0033"
use constant
{
    HOLE_ADJUST => -0.004 * 600, #-2.6, #holes seemed to be slightly oversized (by .002" - .004"), so shrink them a little
    RNDPAD_ADJUST => -0.003 * 600, #-2, #-2.4, #round pads seemed to be slightly oversized, so shrink them a little
    SQRPAD_ADJUST => +0.001 * 600, #+.5, #square pads are sometimes too small by .00067, so bump them up a little
    RECTPAD_ADJUST => 0, #(pixels) rectangular pads seem to be okay? (not tested much)
    TRACE_ADJUST => 0, #(pixels) traces seemed to be okay?
    REDUCE_TOLERANCE => .001, #(inches) allow this much variation when reducing circles and rects
};

#Also, my CAD's Print function or the PDF print driver I used was a little off for circles, so define some additional adjustment values here:
#Values are added to X/Y coordinates; units are pixels; for example, a value of 1 at 600 dpi would be ~= .002 inch
use constant
{
    CIRCLE_ADJUST_MINX => 0,
    CIRCLE_ADJUST_MINY => -0.001 * 600, #-1, #circles were a little too high, so nudge them a little lower
    CIRCLE_ADJUST_MAXX => +0.001 * 600, #+1, #circles were a little too far to the left, so nudge them a little to the right
    CIRCLE_ADJUST_MAXY => 0,
    SUBST_CIRCLE_CLIPRECT => FALSE, #generate circle and substitute for clip rects (to compensate for the way some CAD software draws circles)
    WANT_CLIPRECT => TRUE, #FALSE, #AI doesn't need clip rect at all? should be on normally?
    RECT_COMPLETION => FALSE, #TRUE, #fill in 4th side of rect when 3 sides found
};

#allow .012 clearance around pads for solder mask:
#This value effectively adjusts pad sizes in the TOOL_SIZES list above (only for solder mask layers).
use constant SOLDER_MARGIN => +.012; #units are inches

#line join/cap styles:
use constant
{
    CAP_NONE => 0, #butt (none); line is exact length
    CAP_ROUND => 1, #round cap/join; line overhangs by a semi-circle at either end
    CAP_SQUARE => 2, #square cap/join; line overhangs by a half square on either end
    CAP_OVERRIDE => FALSE, #cap style overrides drawing logic
};
    
#number of elements in each shape type:
use constant
{
    RECT_SHAPELEN => 6, #x0, y0, x1, y1, count, "rect" (start, end corners)
    LINE_SHAPELEN => 6, #x0, y0, x1, y1, count, "line" (line seg)
    CURVE_SHAPELEN => 10, #xstart, ystart, x0, y0, x1, y1, xend, yend, count, "curve" (bezier 2 points)
    CIRCLE_SHAPELEN => 5, #x, y, 5, count, "circle" (center + radius)
};
#const my %SHAPELEN =
#Readonly my %SHAPELEN =>
our %SHAPELEN =
(
    rect => RECT_SHAPELEN,
    line => LINE_SHAPELEN,
    curve => CURVE_SHAPELEN,
    circle => CIRCLE_SHAPELEN,
);

#panelization:
#This will repeat the entire body the number of times indicated along the X or Y axes (files grow accordingly).
#Display elements that overhang PCB boundary can be squashed or left as-is (typically text or other silk screen markings).
#Set "overhangs" TRUE to allow overhangs, FALSE to truncate them.
#xpad and ypad allow margins to be added around outer edge of panelized PCB.
use constant PANELIZE => {'x' => 1, 'y' => 1, 'xpad' => 0, 'ypad' => 0, 'overhangs' => TRUE}; #number of times to repeat in X and Y directions

# Set this to 1 if you need TurboCAD support.
#$turboCAD = FALSE; #is this still needed as an option?

#CIRCAD pad generation uses an appropriate aperture, then moves it (stroke) "a little" - we use this to find pads and distinguish them from PCB holes. 
use constant PAD_STROKE => 0.3; #0.0005 * 600; #units are pixels
#convert very short traces to pads or holes:
use constant TRACE_MINLEN => .001; #units are inches
#use constant ALWAYS_XY => TRUE; #FALSE; #force XY even if X or Y doesn't change; NOTE: needs to be TRUE for all pads to show in FlatCAM and ViewPlot
use constant REMOVE_POLARITY => FALSE; #TRUE; #set to remove subtractive (negative) polarity; NOTE: must be FALSE for ground planes

#PDF uses "points", each point = 1/72 inch
#combined with a PDF scale factor of .12, this gives 600 dpi resolution (1/72 * .12 = 600 dpi)
use constant INCHES_PER_POINT => 1/72; #0.0138888889; #multiply point-size by this to get inches

# The precision used when computing a bezier curve. Higher numbers are more precise but slower (and generate larger files).
#$bezierPrecision = 100;
use constant BEZIER_PRECISION => 36; #100; #use const; reduced for faster rendering (mainly used for silk screen and thermal pads)

# Ground planes and silk screen or larger copper rectangles or circles are filled line-by-line using this resolution.
use constant FILL_WIDTH => .01; #fill at most 0.01 inch at a time

# The max number of characters to read into memory
use constant MAX_BYTES => 10 * M; #bumped up to 10 MB, use const

use constant DUP_DRILL1 => TRUE; #FALSE; #kludge: ViewPlot doesn't load drill files that are too small so duplicate first tool

my $runtime = time(); #Time::HiRes::gettimeofday(); #measure my execution time

print STDERR "Loaded config settings from '${\(__FILE__)}'.\n";
1; #last value must be truthful to indicate successful load


#############################################################################################
#junk/experiment:

#use Package::Constants;
#use Exporter qw(import); #https://perldoc.perl.org/Exporter.html

#my $caller = "pdf2gerb::";

#sub cfg
#{
#    my $proto = shift;
#    my $class = ref($proto) || $proto;
#    my $settings =
#    {
#        $WANT_DEBUG => 990, #10; #level of debug wanted; higher == more, lower == less, 0 == none
#    };
#    bless($settings, $class);
#    return $settings;
#}

#use constant HELLO => "hi there2"; #"main::HELLO" => "hi there";
#use constant GOODBYE => 14; #"main::GOODBYE" => 12;

#print STDERR "read cfg file\n";

#our @EXPORT_OK = Package::Constants->list(__PACKAGE__); #https://www.perlmonks.org/?node_id=1072691; NOTE: "_OK" skips short/common names

#print STDERR scalar(@EXPORT_OK) . " consts exported:\n";
#foreach(@EXPORT_OK) { print STDERR "$_\n"; }
#my $val = main::thing("xyz");
#print STDERR "caller gave me $val\n";
#foreach my $arg (@ARGV) { print STDERR "arg $arg\n"; }

Download Details:

Author: swannman
Source Code: https://github.com/swannman/pdf2gerb

License: GPL-3.0 license

#perl 

Top 15 Free JavaScript Frameworks for Web Applications

List of some useful JavaScript Frameworks and libraries for website, web apps, and mobile apps development, that developers should know about to make selection easier.
This article will help you understand the various types of JavaScript Framework available in the market. When it comes to choosing the best platform for you, it’s not only the number of features you need to consider but also its functionality. The ease with which it fits within your project is also an essential factor. The next step is to choose the framework that best fits your company requirements or you can select the best from the list of top web development companies to develop your product based on your requirements.

#javascript frameworks for web applications #web applications development companies #progressive javascript framework #javascript frameworks #javascript #frameworks

Sunny  Kunde

Sunny Kunde

1597848060

Top 12 Most Used Tools By Developers In 2020

rameworks and libraries can be said as the fundamental building blocks when developers build software or applications. These tools help in opting out the repetitive tasks as well as reduce the amount of code that the developers need to write for a particular software.

Recently, the Stack Overflow Developer Survey 2020 surveyed nearly 65,000 developers, where they voted their go-to tools and libraries. Here, we list down the top 12 frameworks and libraries from the survey that are most used by developers around the globe in 2020.

(The libraries are listed according to their number of Stars in GitHub)

1| TensorFlow

**GitHub Stars: **147k

Rank: 5

**About: **Originally developed by researchers of Google Brain team, TensorFlow is an end-to-end open-source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries, and community resources that lets researchers push the state-of-the-art research in ML. It allows developers to easily build and deploy ML-powered applications.

Know more here.

2| Flutter

**GitHub Stars: **98.3k

**Rank: **9

About: Created by Google, Flutter is a free and open-source software development kit (SDK) which enables fast user experiences for mobile, web and desktop from a single codebase. The SDK works with existing code and is used by developers and organisations around the world.


#opinions #developer tools #frameworks #java tools #libraries #most used tools by developers #python tools

Abigale  Yundt

Abigale Yundt

1603336938

What Will Be The Best JavaScript Frameworks in 2021? -

Someone who is beginning their work journey as a developer or software engineer might encounter an issue while selecting which language, framework, or tools they should be trained in or must have knowledge about. A lot of individuals had to go through such a scenario. Since there is a large range of languages and frameworks available in the software development community, there is not a single solution or option. Hence, we have created this list to narrow down your option. In this post, we will talk about various _ JavaScript Frameworks_ that we feel will be the most useful in 2021.

When we are talking about the development of websites, the JavaScript framework comes in the mind quickly for companies and programmers in today’s world. You most likely had a chance to work on one or two of the JavaScript Frameworks that we have mentioned on the list. Go on and learn more about these JavaScript Frameworks.

1. ReactJS

React is the most prominent JS framework since it was launched by Facebook in 2003. The potential to utilize it for native development comes amongst the key benefits of React. A broad community, Facebook support, saturated environments, improved efficiency, and reusable components are the key reasons behind React’s success. React is ideally suited for building SPA or cross-platform applications and designing small business applications.

ReactJS

#javascript #frameworks #javascript #javascript frameworks #mobile application