Kickstart your Widget Development
If you’re looking for best practices and new ways to develop widgets in Mendix, view this webcast for expert advice and a real-world view of the new tools available for widget development.
-
Transcript
[00:00:00.030]
hello and welcome everyone to a new[00:00:02.340]
mendax expert developer webinar my name[00:00:05.279]
is Jung dufus and I will be your host[00:00:06.870]
for today today’s webinar will be about[00:00:09.510]
kick starting your widget development[00:00:10.889]
with node yes grunt and other useful[00:00:14.549]
tools JavaScript developer yell – laughs[00:00:18.029]
and I will teach you how to use the new[00:00:19.830]
widget generator upgrade your existing[00:00:21.960]
widgets and how to check your code for[00:00:24.600]
deprecations during the webinar you can[00:00:28.560]
submit your questions in the question we[00:00:30.359]
know after the demos the elta will go[00:00:33.210]
through some of the questions the[00:00:35.280]
questions and answers will be posted on[00:00:36.989]
the webinar page afterwards[00:00:38.989]
before we start please take a look at[00:00:41.190]
the handouts window and go to webinar to[00:00:43.770]
find the presentation slides please[00:00:46.350]
enjoy the presentation I’ll now give the[00:00:48.480]
floor to Yelton I am thank you and thank[00:00:54.030]
you everybody for joining the expert[00:00:56.430]
webinar kickstart your widget[00:00:58.230]
development my name is Lt lacnic I am a[00:01:01.500]
JavaScript developer for the community[00:01:03.420]
team at mendax at the community team we[00:01:06.750]
want to enable you as a JavaScript[00:01:10.020]
developer to create your own widgets and[00:01:12.630]
we want to enable our community to[00:01:14.640]
create content for this webinar we[00:01:18.030]
expect you to know how a widget works[00:01:20.600]
have technical knowledge about[00:01:22.770]
JavaScript and have a basic[00:01:25.560]
understanding what nodejs is we will not[00:01:31.170]
go in depth on how a widget works in the[00:01:34.290]
notes of the slide deck we provided a[00:01:36.240]
link for a how-to for great in your[00:01:39.240]
first widget the hello world widget in[00:01:41.700]
this webinar I am focusing on Julie[00:01:46.009]
first we’ll talk about how to scaffold a[00:01:48.810]
widget in a minute using our latest tool[00:01:51.060]
the widget generator next we’ll discuss[00:01:55.430]
grunt which is included in our latest[00:01:58.890]
tools and widgets repositories I’ll talk[00:02:03.240]
about how we can use the tools namely[00:02:05.790]
the widget generator to update existing[00:02:08.039]
widgets[00:02:11.090]
as a bonus I will show another tool that[00:02:13.700]
we built back in November to check your[00:02:16.849]
widget and when it comes to deprecations[00:02:19.129]
in minik 6 last but not least I’ll give[00:02:23.569]
a demo demonstrating these tools we’ll[00:02:26.900]
go into a step by step guide using the[00:02:29.599]
widget generator and grunt in a slide[00:02:33.830]
deck we added links and further[00:02:35.269]
explanations in the notes per slide the[00:02:38.810]
notes in the last slide contains a brief[00:02:41.660]
step-by-step guide on the things that we[00:02:43.910]
are going to demo at the community team[00:02:52.760]
we create and maintain a lot of witches[00:02:55.750]
in order to do this properly we need[00:02:58.670]
development tools so up until now we[00:03:01.610]
only had brackets the code editor[00:03:04.060]
combined with a custom plugin to create[00:03:07.099]
widgets there are a couple of in depth[00:03:10.190]
how tools that you can find on our[00:03:12.500]
website regarding this editor it has[00:03:16.670]
advantages and disadvantages it’s visual[00:03:20.569]
and it’s easy to use but there are a few[00:03:24.889]
bugs in the plugin that because of the[00:03:27.230]
very little support in brackets are hard[00:03:30.079]
to fix simply put the plugin not always[00:03:34.280]
works as expected but it’s hard to debug[00:03:37.069]
and fix it for example the plugin will[00:03:40.549]
not work if you are not connected to the[00:03:42.829]
Internet this led to the creation of a[00:03:47.030]
new tool the yeoman widget generator[00:03:49.870]
it’s faster it’s more reliable it’s[00:03:54.380]
better maintainable its editor[00:03:57.340]
independent and we’ve made this tool[00:04:00.669]
transparent and open-source the files[00:04:03.950]
you can find them on github for those of[00:04:11.540]
you[00:04:11.930]
do not know in what nodejs this simply[00:04:15.739]
put it’s a framework that uses[00:04:18.290]
JavaScript to run basically anything on[00:04:21.079]
your computer it has been around for a[00:04:23.810]
long time and has a large ecosystem of[00:04:26.509]
open-source libraries now you might have[00:04:30.139]
already used it without knowing it[00:04:32.330]
for example the previously mentioned[00:04:34.750]
brackets editor is built on top of node[00:04:39.520]
yeoman is a command-line tool that is[00:04:42.259]
built on top of no GS as well it’s what[00:04:46.130]
is called a scaffolding tool using a[00:04:49.130]
template and by entering a few[00:04:50.960]
parameters it can quickly scaffold a web[00:04:54.229]
application a website or in our case a[00:04:58.100]
widget the widget generator is basically[00:05:02.150]
a template that is used by the yeoman[00:05:04.340]
command-line client to create a widget[00:05:10.780]
grunt is a task runner that can be found[00:05:14.900]
on crunches calm[00:05:17.349]
it is also built on top of note yes and[00:05:20.780]
it has the ability to run predefined or[00:05:24.860]
custom Li defined tasks grunt uses a[00:05:29.599]
single file a grünfeld digest to run[00:05:33.289]
these tasks it has a few advantages[00:05:36.349]
mainly it is independent of any editor[00:05:39.770]
you use you can run this from the[00:05:42.409]
command-line client and you can run this[00:05:44.510]
from the command line but for a lot of[00:05:47.180]
editors there are also plugins that can[00:05:51.020]
use grunt now our community comes up[00:05:55.190]
with new ways to improve development[00:05:57.020]
either through the forum through github[00:05:59.990]
or meetups and I actually have to thank[00:06:02.780]
one of our MVPs unleash MIT for[00:06:05.180]
providing the first version of this[00:06:06.860]
grunt file using hiss as an example we[00:06:10.669]
created our own which is now included in[00:06:13.310]
the sources of many of our widgets on[00:06:15.889]
github as well as automatically provided[00:06:20.060]
by our widget generator[00:06:24.599]
we have created a few tasks that you can[00:06:27.789]
use out of the box to speed up your[00:06:29.919]
widget development in a demo I will[00:06:33.519]
demonstrate the use of grunt and running[00:06:35.529]
the various tasks like built version[00:06:38.649]
start muddler and a default task in a[00:06:43.599]
slide deck you will find a short[00:06:45.189]
description per task and the most[00:06:47.979]
important task the default task will let[00:06:51.399]
you develop your widget while running[00:06:54.099]
your mimics application without a[00:06:56.529]
necessity to redeploy your application[00:06:59.439]
every time you make a change to your[00:07:02.110]
javascript files in your widget now you[00:07:09.369]
might have already built a widget or for[00:07:12.519]
a client you are customizing one we have[00:07:17.079]
adapted the widget generator to include[00:07:20.289]
the necessary files for grunt[00:07:22.300]
in your existing widget repository so[00:07:26.349]
this will give you the ability to[00:07:28.300]
quickly use the power of grunt there are[00:07:33.219]
a few steps that you will need to take[00:07:34.919]
you open your widget folder in the[00:07:37.240]
terminal and that can either be a[00:07:39.369]
command line client or a powershell you[00:07:43.449]
have to make sure that the source files[00:07:45.099]
are in a subdirectory called SRC[00:07:48.689]
you run the widget generator in the[00:07:51.189]
terminal it will ask you if you’re[00:07:53.439]
updating an existing widget the widget[00:07:58.419]
generator will then create a package to[00:08:00.699]
Jason and a grunt file j/s it will[00:08:05.050]
install the necessary dependencies for[00:08:06.969]
grunt and you can start using it now as[00:08:13.269]
a bone[00:08:13.790]
in this webinar I’ll also talk about[00:08:16.870]
deprecations in November last year we[00:08:21.770]
had to make sure our mimics supported[00:08:24.200]
widgets were up-to-date and compatible[00:08:27.140]
with the new mendax six release there[00:08:31.460]
were methods and api’s were already[00:08:33.290]
Markus deprecations in mimics five these[00:08:37.130]
would be removed in mimic six if any of[00:08:43.400]
the widgets would contain deprecations[00:08:45.290]
they would break the remaining six[00:08:47.540]
application due to JavaScript errors so[00:08:52.280]
we created a deprecation checker that is[00:08:55.280]
also built on top of no GS and run as a[00:08:58.550]
standalone command-line client with this[00:09:02.840]
client you can quickly check your[00:09:05.540]
existing widgets in your project you run[00:09:09.860]
this client in your widgets folder of[00:09:11.890]
your project and it will tell you[00:09:15.410]
whether or not any widget has possible[00:09:18.440]
deprecations now I said we use this tool[00:09:22.730]
to check any of our own supported[00:09:26.990]
widgets the tool can also export an[00:09:31.430]
excel file for future references so[00:09:39.970]
enough theory let’s go let’s get down to[00:09:43.730]
business and let’s demo the tools that I[00:09:47.600]
discussed[00:10:04.270]
okay first of all and to use these tools[00:10:08.360]
we need note yes no js’ can be[00:10:14.210]
downloaded from Noah’s Ark and we[00:10:19.220]
recommend that you installed the LTS[00:10:21.920]
version in this case the 4.2 that six[00:10:25.490]
version you can also install the stable[00:10:28.340]
version if you want it as long as you[00:10:30.920]
make sure that the version is minimally[00:10:35.530]
4.2 now once you’ve installed node yes[00:10:40.940]
it is available on your command line and[00:10:44.020]
I will show this by opening a PowerShell[00:10:48.770]
I have my PowerShell opened here you can[00:10:53.720]
also use if you want the standard[00:10:56.300]
command line client in Windows this one[00:11:00.770]
you can open by going to start and then[00:11:03.520]
in the search bar type CMD press ENTER[00:11:09.020]
and this will start your command line[00:11:11.120]
client now for this demo I’m going to[00:11:14.090]
use a PowerShell I personally prefer the[00:11:17.060]
PowerShell okay so I’ve installed no[00:11:22.370]
Jess and I can check if it’s there by[00:11:28.880]
typing note – V and this will give me a[00:11:33.650]
version number now in my case I have[00:11:36.020]
version 4.2.1 you also can check whether[00:11:40.970]
or not the node package manager is there[00:11:43.870]
by typing NPM – V and this will give you[00:11:49.760]
the version of the node package manager[00:11:52.930]
now these these are necessary to install[00:11:59.300]
the yeoman generator so first I’ll show[00:12:03.440]
you the website of yeoman yeoman is on[00:12:07.220]
yeoman dot IO and this will give you an[00:12:10.580]
explanation of what yeoman does and how[00:12:13.910]
it works and how you can install it now[00:12:15.940]
if I go to[00:12:18.520]
yeoman dot io / generators here I have a[00:12:23.600]
list of all the generators and currently[00:12:25.510]
yeoman has about 33 or by 3400[00:12:30.560]
generators and MINIX has built their own[00:12:33.440]
generator as well so if I type in min[00:12:35.750]
decks here you’ll see a link to the[00:12:39.500]
MINIX widget generator now if I click on[00:12:42.440]
it I go to our get up page now at the[00:12:47.450]
moment we have not yet provided a how-to[00:12:51.980]
on our website this how-to will be[00:12:55.400]
published as soon as this video will be[00:12:58.730]
published for now I’m I refer to the[00:13:02.630]
readme page on get up here you’ll see a[00:13:08.180]
short explanation on how it works and[00:13:11.630]
how you need to install it and you[00:13:14.360]
install this by typing this command in[00:13:18.530]
your command line window so if I go to[00:13:21.350]
powershell it would be npm install[00:13:24.940]
install – g which means globally yo[00:13:30.500]
that’s the yeoman client generator[00:13:34.610]
– Bendix that’s the MINIX widget[00:13:39.410]
generator and grunt – climb and that’s[00:13:43.820]
the grunt client now this can take up to[00:13:48.470]
a minute or two minutes I’ve already[00:13:51.470]
installed it so I don’t want you to be[00:13:54.350]
looking at a window where it’s trying to[00:13:57.860]
install I already have it so let’s use[00:14:04.240]
the widget generator[00:14:06.890]
I want to scaffold a new widget so I[00:14:12.050]
create an older where I want to scaffold[00:14:15.020]
this widget in this case I have a folder[00:14:18.710]
generate a widget which is empty so if I[00:14:21.890]
go to my parish shell here I see you[00:14:26.480]
listening and I go to[00:14:29.720]
this folder and it is empty so let me[00:14:35.279]
clear this and now I’m going to run the[00:14:40.139]
widget generator I do this by typing yo[00:14:45.799]
Bendix pressing enter this will start my[00:14:52.290]
generator and this generator is going to[00:14:57.059]
ask me for a few parameters first of all[00:15:00.949]
it asked me what’s the name of my widget[00:15:03.869]
now let’s say I’m going to call this[00:15:06.209]
webinar widget I press ENTER I can enter[00:15:16.919]
a description now what you might see if[00:15:19.319]
you open the widget generator is that[00:15:22.759]
there is already a value here between[00:15:25.790]
brackets so if I press ENTER now it will[00:15:29.279]
use the default value if you open the[00:15:34.139]
widget generator and for example here[00:15:36.209]
you have add a copy right now between[00:15:39.149]
brackets there is mendax 2016 for you[00:15:45.089]
that would be different now that is[00:15:47.850]
because I’ve already used the generator[00:15:50.809]
before and so it will save these values[00:15:57.529]
so I’ll just press enter enter here’s[00:16:02.610]
the initial version and we always always[00:16:05.249]
start the widget with version 1.0.0 and[00:16:09.989]
this is actually what is called semantic[00:16:12.809]
versioning that means that first number[00:16:16.799]
is the major number the second number is[00:16:19.529]
the minor number and the third number is[00:16:22.980]
a patch number and we recommend that[00:16:26.910]
everybody uses semantic versioning you[00:16:30.329]
will see this in our app store you will[00:16:33.629]
see this on github and we recommend that[00:16:37.110]
you stick to this versioning version[00:16:40.919]
numbering[00:16:41.960]
so press ENTER again again I’ve already[00:16:45.529]
used this so the author is already[00:16:47.540]
filled in and I have here my github[00:16:50.450]
username that’s not completely[00:16:54.860]
functional right now but you can already[00:16:57.140]
set it so if I press enter now it will[00:17:01.120]
scaffold a new widget so if I let me[00:17:07.059]
here you will see the folder that I’m[00:17:09.949]
working in and right now it’s empty so[00:17:12.410]
if I press enter now what it will do is[00:17:15.709]
create all the files and these files are[00:17:19.309]
actually a copy of our app store widget[00:17:23.420]
boilerplate that is on github as well so[00:17:26.750]
this follows the pattern of the app[00:17:30.860]
store widget boilerplate that is also[00:17:34.880]
discussed on our website in the[00:17:40.309]
documentation what it also does here you[00:17:45.320]
see it has copied all the files and now[00:17:48.530]
it’s installing all the dependencies[00:17:50.420]
that are needed for grunt when these[00:17:55.700]
dependencies are installed it will[00:17:58.179]
automatically run grunt built to build[00:18:01.490]
the first version of your widget and the[00:18:04.820]
first version of my widget will be in my[00:18:06.980]
distal der and it is called the webinar[00:18:09.830]
widget I will show you the tasks that[00:18:14.600]
you can run in grunt later on now I also[00:18:20.710]
mention that you can use the Bendix[00:18:24.100]
widget generator to update existing[00:18:27.500]
widgets so if I go to I have here a[00:18:32.150]
folder and let me go to my folder[00:18:43.020]
now as you might see there is no grunt[00:18:47.440]
file here and there is no package no[00:18:50.500]
Jason here now normally you could um[00:18:56.100]
manual copy these files but like I said[00:19:00.159]
we’ve adapted the generator to create[00:19:02.650]
them for you so let me run the generator[00:19:06.970]
again in this mint and in this folder so[00:19:10.260]
third is and I type in yo mendax and I[00:19:15.640]
press ENTER now what will happen is the[00:19:21.520]
generator will see that the directory is[00:19:24.970]
not empty and let me maximize this and[00:19:29.370]
it will give you a warning and if there[00:19:33.730]
is already if there are already files in[00:19:36.309]
your folder but it will also ask you[00:19:41.559]
whether or not you are upgrading a[00:19:43.659]
custom widget and in this case I am so[00:19:47.890]
I’ll press yes what it will do now is[00:19:53.190]
try to read the package XML in your[00:19:59.020]
source folder so if I go to my source[00:20:06.159]
folder here is the package XML and here[00:20:12.130]
is my demo which is XML and so it will[00:20:15.520]
automatically detect this is the name of[00:20:18.909]
your widget so here I can press ENTER[00:20:21.490]
and since my widget is of version 1.0.0[00:20:28.120]
it will take this version number as well[00:20:31.570]
so I press enter and now it will copy a[00:20:36.520]
couple of files but the most important[00:20:38.860]
one is a package to Jason and grunt file[00:20:42.370]
and as you might see now it has included[00:20:48.520]
the grunt file and the package Jason[00:20:54.020]
it will then install all the[00:20:57.690]
dependencies and now you can use grunt[00:21:01.850]
in your existing widget repository let[00:21:08.340]
me break out of this now it might also[00:21:16.440]
happen that you have downloaded a widget[00:21:21.380]
and if you’ve downloaded a widget you[00:21:24.840]
have the widget from us so if I go to[00:21:28.820]
the mendax a repository and for example[00:21:32.850]
I take the chart yes widget if I I can[00:21:39.690]
clone this using git or I can download[00:21:42.600]
it as a zip file and it will include a[00:21:45.720]
grunt file and a package Jason so I[00:21:51.150]
should be able to use grunt from this[00:21:54.480]
repository so if I type right now it[00:21:58.500]
will give me an error and that is[00:22:00.930]
because grunt cannot find the local[00:22:04.740]
grunt and that’s because the[00:22:07.610]
dependencies that are used by grunt are[00:22:11.370]
not yet installed so I need to install[00:22:14.790]
these and I do this by typing npm[00:22:19.290]
install and if I press ENTER it will[00:22:23.720]
install the dependencies that’s because[00:22:26.580]
it has a package that jason and so the[00:22:30.090]
node package manager will understand[00:22:33.420]
which dependencies to install so if i[00:22:37.080]
open i will open this in my editor and[00:22:45.890]
so in my editor here you will see the[00:22:50.130]
packages are jason and in here are the[00:22:54.090]
dependencies that are used by grunt to[00:22:56.670]
run their tasks[00:23:00.640]
so that concludes using the widget[00:23:05.679]
generator and so now let’s go let’s use[00:23:09.970]
grunt so for this I’m going to use[00:23:19.170]
actually use one of our widgets that[00:23:22.240]
we’ve built the chart yes we would you[00:23:30.750]
in here I have a grunt fell I have a[00:23:33.910]
package that Jason and my dependencies[00:23:36.309]
are already installed because I have a[00:23:38.350]
node modules folder so let’s go to my[00:23:43.840]
partial and I go to charge s now from[00:23:51.370]
here I can run my grunt tasks and so[00:23:56.740]
first let’s build a new NPK file a[00:24:00.790]
widget fell so here’s my NPK fell and[00:24:06.580]
now I’m going to run grunt build now[00:24:16.240]
grunt what grunt built will do is take[00:24:19.799]
all the files in your source folder here[00:24:23.740]
and create a an archive a sip archive[00:24:29.520]
with an mpk extension and it will put[00:24:33.929]
this NPK file into this folder and as[00:24:37.929]
you can see by the time stamp I just[00:24:39.970]
created this mpk file so that’s how you[00:24:44.500]
use the grunt build tool and this this[00:24:49.299]
NPK you can distribute in the app store[00:24:52.990]
or you can use it in your project now if[00:24:58.780]
I’m updating the code in my widget I[00:25:02.700]
need to do some versioning so every time[00:25:06.429]
I create a new version of my widget I[00:25:09.610]
need to update the version number if I[00:25:12.640]
go to[00:25:13.809]
let me go through my editor in my source[00:25:21.519]
folder I have a package dot XML here and[00:25:28.659]
here is a version number and currently[00:25:32.919]
the version is 3.1.3 now if I want to[00:25:37.779]
update my version number I could change[00:25:42.460]
this myself but we have created a[00:25:46.119]
current task for this so if I run grunt[00:25:50.190]
version it will try to read the package[00:25:55.899]
XML in the version number in package XML[00:25:59.320]
and in this case it’s 3.1.3 so if I want[00:26:03.489]
to update my version number for example[00:26:06.249]
I want version 3.2 I can set this using[00:26:11.799]
grunt version so I say grunt version[00:26:20.279]
3.2.40 the patch number here if I say[00:26:23.109]
it’s version 3.2 it’s actually 3.2 dot[00:26:27.639]
and so now I press ENTER and if I go[00:26:33.159]
back to my editor you will see that in[00:26:36.549]
the package dot XML the version number[00:26:39.369]
has changed to 3.2 dot oh so that’s an a[00:26:43.690]
fast way to change the version number of[00:26:47.879]
your widget it will also update the[00:26:51.549]
version number in your package JSON and[00:26:54.629]
we try to keep these two aligned but[00:26:59.589]
this version number is not used in the[00:27:02.259]
app store or anywhere it’s just for[00:27:05.019]
convenience that we also change it here[00:27:07.330]
in the package that Jason when we[00:27:15.729]
develop[00:27:16.220]
a widget we always add a test project[00:27:20.870]
and usually if you’re looking at our[00:27:24.710]
widgets at our structure you have in[00:27:27.770]
your widget repository you have a folder[00:27:32.179]
called test and in test here is my test[00:27:36.590]
project now I can run this test project[00:27:42.580]
just by clicking on it but we also[00:27:46.370]
included a current task for that so I[00:27:51.049]
can run this by typing grunt start –[00:27:57.730]
muddler now what it will do is search[00:28:06.080]
for your mimics version selector and[00:28:10.360]
taking the test test project and opening[00:28:15.710]
it with the version selector so right[00:28:18.049]
now from the command line I’ve started[00:28:20.240]
my test project now let’s do some[00:28:29.179]
development on the widget so right now[00:28:32.750]
what I’m going to do is I’m going to[00:28:34.490]
going to run this project locally[00:28:46.570]
and in the meantime in a source folder[00:28:50.950]
I’m going to update one of my files in[00:28:55.930]
this case cord rjs and i will uncomment[00:29:01.570]
this line now if I’m if I open my test[00:29:07.840]
project locally and I open my chrome[00:29:12.040]
inspector by right-clicking and then go[00:29:15.700]
to inspect in the tab sources okay I can[00:29:23.830]
look at all the sources of the files[00:29:26.890]
that are loaded and in this case it has[00:29:31.480]
loaded the charges files and in this[00:29:36.010]
case I want to look at the court at je s[00:29:38.470]
file now if I look at the quarter J’s[00:29:41.710]
file you’ll see that this line is[00:29:53.280]
commented but I just uncommon it here[00:29:59.500]
let me save it again and reload it’s[00:30:08.080]
still commented that’s because the[00:30:11.770]
modeler will take all the widget files[00:30:14.140]
and unpack them in the deployment folder[00:30:16.750]
so if I go into my project and I go to[00:30:21.340]
my test test project folder to[00:30:25.390]
deployment then to web into widgets hill[00:30:32.380]
here here you will see the files of in[00:30:36.730]
this case the charge yes widget and so[00:30:39.700]
if I go to core here you’ll see that[00:30:44.590]
it’s commented now if I want to do[00:30:48.880]
widget development it’s useful to change[00:30:52.630]
files in your source folder and see[00:30:56.170]
these changes reflected directly[00:30:59.770]
your project so that’s why we created[00:31:06.400]
the default task for grunt and I run the[00:31:12.730]
default task I can say grunt default but[00:31:16.690]
if I omit a task name I can just say[00:31:19.870]
grunt run grunt so I press ENTER and[00:31:23.790]
this will run the watch task now what[00:31:28.240]
watch will do the watch task will do is[00:31:33.420]
watch your source folder so let me go[00:31:36.880]
back to my source folder arrived my core[00:31:41.500]
dot JS file it will watch for any[00:31:46.890]
changes in these files and when one of[00:31:50.950]
those changes happens and let me do this[00:31:55.930]
by say triple comment in here for[00:31:58.810]
example and I’d press save now you’ll[00:32:02.260]
see that grunt detects a change in this[00:32:05.380]
case in cordage is now it will run[00:32:08.680]
actually run two tasks it will compress[00:32:12.130]
all the files in the source folder and[00:32:15.640]
it will basically build a new NPK file[00:32:18.870]
so this is similar to the grunt build[00:32:22.450]
task but it will do it will also do[00:32:26.650]
something else it will copy the changed[00:32:30.820]
file to your deployment folder so in[00:32:35.980]
this case here I have cordage is opening[00:32:39.340]
my source file and just as I saw that[00:32:42.810]
the cordage is file in my deployment[00:32:46.360]
folder was not changed if I go to my[00:32:49.560]
cordage a s file here you’ll see that it[00:32:53.350]
now has triple comments and so here if I[00:32:59.520]
reload the page now[00:33:06.190]
already had a sources open so and the[00:33:09.909]
quartet JS file open and now we’ll see[00:33:12.309]
that it’s triple committed and basically[00:33:16.769]
what this means is that all the changes[00:33:19.750]
I make in my source folder are now also[00:33:23.529]
reflected in my deployment folder and so[00:33:26.200]
when I’m developing this widget and I[00:33:29.620]
make changes to the JavaScript files I[00:33:32.860]
do not have to read the redeploy my[00:33:37.179]
project or synchronize my project[00:33:40.600]
directory as you can see in the if you[00:33:43.990]
have in the modeler and what it was all[00:33:46.600]
all also done when developing in records[00:33:52.259]
now I emphasize on changes in your[00:33:56.710]
JavaScript because when you’re changing[00:34:00.639]
files for example in this case the[00:34:05.679]
package XML or let’s take for example[00:34:10.060]
the bar chart here this XML is loaded by[00:34:16.119]
the modeler now if I make changes here[00:34:20.079]
for example we create a new property so[00:34:23.919]
for demo purposes I will just copy this[00:34:28.119]
and I’ll say the key is size caption[00:34:35.169]
size now if I save this my grunt will[00:34:44.859]
also see this change it will create a[00:34:48.159]
new mpk file but if I go to my modeler[00:34:52.720]
and in this case go to the bar chart I[00:34:55.770]
will not see this key here yet and[00:34:59.290]
that’s because it now needs to reload[00:35:02.319]
the mpk file so in this case if I make[00:35:06.130]
changes to my XML file or or CSS because[00:35:12.010]
that also needs a reload from the[00:35:16.510]
modeler[00:35:17.900]
I now need to synchronize my project[00:35:20.630]
directory and if I do that you’ll see[00:35:23.150]
that it has added a couple of errors and[00:35:26.270]
that’s because the definition of the[00:35:28.700]
widget in this case the bar chart is[00:35:31.730]
changed so if I click on the error what[00:35:36.260]
I need to do is update this widget so I[00:35:40.340]
right-click and I say update all widgets[00:35:43.600]
and now if I double click on the bar[00:35:48.440]
chart now you’ll see that it has added a[00:35:53.990]
key so that is something that you need[00:35:58.730]
to keep in mind when you’re developing[00:36:01.100]
your widget that if you make changes to[00:36:03.800]
either your CSS file or an XML file then[00:36:08.510]
you need to you need to simply[00:36:11.930]
synchronize your project directory but[00:36:14.420]
while running this grunt task it will[00:36:16.370]
always have the latest version of the[00:36:19.310]
mpk file in your test project because i[00:36:24.470]
said that grunt when you went grunt[00:36:29.000]
built runs it will create an MPA file[00:36:32.360]
and puts it in the dist folder but it[00:36:36.170]
will also make a copy of this in your[00:36:39.020]
test project in this case in my test[00:36:41.900]
folder and then widgets and so this mpk[00:36:46.190]
file is also the latest version of your[00:36:51.380]
widget now I[00:36:58.940]
promised a bonus and that is the[00:37:03.790]
deprecation checker so let me break out[00:37:08.359]
of this if you want to stop run in this[00:37:10.579]
case the the the the standard grunt[00:37:14.060]
watch task you can break out of it by[00:37:17.089]
pressing ctrl + C and then press yes and[00:37:21.200]
now I’m I have stopped grunt so like I[00:37:27.230]
said we created a deprecation checker[00:37:29.660]
and this can be found on github as well[00:37:32.890]
under manic so koat.com slash mendax and[00:37:38.829]
if I type in deprecation it will show me[00:37:44.150]
the MX – check – deprecations now this[00:37:50.990]
will give you a short description on how[00:37:54.470]
to install it and this is similar of[00:37:57.760]
installing your widget generator or[00:38:02.930]
yeoman in this case we install the[00:38:06.680]
deprecation checker by running npm[00:38:09.319]
install MX – check – deprecations[00:38:13.280]
– g which means globally so you can use[00:38:16.339]
it everywhere in your terminal so i’ve[00:38:21.530]
already installed it so if i run MX[00:38:25.310]
check deprecations – h which means help[00:38:32.170]
it will show me the deprecation checker[00:38:34.790]
with a short description of the options[00:38:38.240]
that you can give so let me go to a[00:38:41.869]
project where i want to check whether or[00:38:44.930]
not a widget has deprecations that will[00:38:48.890]
break in mendick 6 so i go to the folder[00:38:52.790]
i created a test project in the folder[00:38:57.380]
deprecations for demo purposes and so in[00:39:01.400]
this folder[00:39:09.640]
this is a standard project folder and in[00:39:12.880]
my widgets folder I have a couple of[00:39:15.789]
widgets and now I want to check these[00:39:17.619]
widgets using the deprecation checker to[00:39:22.240]
see if there are any deprecations so I[00:39:25.079]
go to widgets and now here I run a mix[00:39:33.039]
check deprecations now what it will do[00:39:39.099]
is run through every widget so as you[00:39:43.150]
can see here if run runs through[00:39:46.089]
bootstrap RTE NPK which is here and it[00:39:53.109]
will check for any deprecations and in[00:39:54.670]
this case it hasn’t found any[00:39:56.349]
deprecations the same for the calendar[00:39:58.450]
widget the same for the charge as widget[00:40:02.049]
and here I have deprecations in my micro[00:40:07.210]
flow label dot mpk now what it will tell[00:40:10.390]
you is what kind of deprecation do I[00:40:14.740]
have in on which javascript file in this[00:40:19.779]
case the microphone labelled is in the[00:40:24.069]
NPK foam it will tell me what the[00:40:26.529]
deprecation is it will tell me on what[00:40:29.589]
line it is in what column it is and it[00:40:33.640]
will tell me what the the match and this[00:40:37.990]
is basically a short snippet of the the[00:40:42.509]
deprecation and that’s because the[00:40:46.420]
application checker will tell you about[00:40:49.089]
possible deprecations so if i go to for[00:40:52.089]
example here is a deprecation it says[00:40:55.269]
the deprecation is MX UI dot HTML dot[00:40:58.359]
set content but this is set contents and[00:41:02.319]
this is clearly a method in the widget[00:41:05.740]
and so this is actually a false positive[00:41:08.410]
so the deprecation checker just checks[00:41:12.160]
for deprecations but it will tell me not[00:41:14.559]
tell you whether or not it is really a[00:41:17.829]
deprecation because it might be a false[00:41:20.710]
positive[00:41:21.279]
now of course this[00:41:23.380]
create a list in your terminal your[00:41:26.740]
terminal and that might not be very[00:41:28.900]
convenient so if I run this again but[00:41:31.869]
now by using – II it will do the same[00:41:35.950]
thing but it will create a deprecations[00:41:39.009]
dot XLS file and this is basically an[00:41:42.039]
excel file where all the deprecations[00:41:44.529]
are listed and so you can check them for[00:41:49.049]
for later references and that concludes[00:41:55.059]
my demo yum[00:42:04.109]
great thank you very much for that yell[00:42:06.849]
– great explanation and awesome demos[00:42:09.490]
it’s now time for some questions[00:42:11.740]
you can ask questions through the[00:42:14.079]
questions window in GoToWebinar during[00:42:17.440]
the webinar we’ve already received some[00:42:19.509]
great questions so let’s go through some[00:42:22.210]
of them the first question is by Ahmed[00:42:26.710]
and his question is is yeoman better[00:42:30.700]
than brackets and what would you[00:42:32.980]
recommend I think we’ve seen some of it[00:42:35.319]
during your demos but I’d love to hear[00:42:38.380]
your answer in this yeah it’s a great[00:42:43.599]
question thank you what is better the[00:42:48.819]
brackets editor in our opinion is not[00:42:53.589]
well supported and the plugin that we[00:42:56.890]
created is as I said earlier is[00:43:01.740]
difficult to maintain we have the code[00:43:04.809]
of this this plug-in on github as well[00:43:07.000]
but it’s very hard to maintain and so we[00:43:12.730]
thought let’s create a better tool and[00:43:16.390]
in this case it’s the yeoman which[00:43:18.069]
generator so which one is best[00:43:20.980]
I think it’s yeoman but brackets is more[00:43:25.839]
visual so yeah I think that’s that would[00:43:31.420]
be my short explanation great IMed does[00:43:36.880]
it[00:43:37.210]
answer your question can you now make a[00:43:41.200]
decision on what you prefer because I[00:43:43.780]
think that’s what it comes down to it’s[00:43:45.550]
not specifically that one is better than[00:43:47.500]
the other but more of what you prefer to[00:43:51.609]
use Michael asks a question hi guys is[00:43:56.079]
it possible to get a recorded version of[00:43:57.970]
the webinar at some later time and yes[00:44:00.280]
every expert webinar is recorded and[00:44:02.349]
posted on the developer website[00:44:04.170]
developer Dominic’s calm and we also[00:44:07.359]
post the slides with the notes along[00:44:10.300]
with the questions and answers so you[00:44:12.250]
can see and read everything afterwards[00:44:16.390]
jayven Bari asks a question is there a[00:44:19.540]
plan to make this into a GUI instead of[00:44:22.599]
a command line not right now[00:44:30.240]
there might be possibilities – to create[00:44:33.460]
a GUI right now there isn’t a plan on on[00:44:39.280]
doing that and basically the Yeomen[00:44:42.160]
client is always a terminal a client so[00:44:47.589]
a command line client and I have to[00:44:50.500]
check because for instance for grunt[00:44:53.890]
there are a couple of plugins for a lot[00:44:57.760]
of editors in my case I use Adam a lot[00:45:01.079]
so for Adam there is a grunt plug-in and[00:45:04.230]
maybe but that’s something I have to[00:45:06.910]
check maybe there’s a plugin for using[00:45:11.440]
yeoman from your generator and then yeah[00:45:15.630]
sorry from using yeoman in your editor[00:45:19.299]
and so then you don’t need to command[00:45:23.470]
line client anymore but that’s something[00:45:27.099]
I have to check so maybe maybe all right[00:45:32.799]
thanks[00:45:35.770]
Mohammed asks a question is there a[00:45:38.349]
webinar to show how to build a widget[00:45:40.089]
from scratch well actually we’ve hosted[00:45:44.920]
another webinar exactly one year ago[00:45:47.410]
also in February[00:45:49.720]
which was hosted by hit art Aidan’s[00:45:52.240]
about creating custom widgets and it[00:45:56.049]
also includes a basic webinar and how to[00:45:57.910]
create your first hello world widget and[00:46:01.240]
we’ve also got some how-tos on that in[00:46:05.380]
the MINIX documentation so if you go to[00:46:08.170]
world man x-com you’ll find that in the[00:46:11.710]
how-to section Ivana asks suppose you[00:46:16.839]
want to develop a new widget on what[00:46:19.329]
version of mendax can you best start if[00:46:23.349]
you would also want to support the[00:46:25.329]
current mendax customer base if you want[00:46:38.529]
to develop a widget I would recommend[00:46:42.579]
that you start on MINIX 518 and that’s[00:46:51.549]
because when you for example you would[00:46:54.970]
want to use this this this widget in[00:46:58.630]
many six if you want to update it to too[00:47:02.859]
many clicks it’s more convenient to[00:47:04.990]
start add MINIX 518 that would be my[00:47:08.799]
recommendation all right thank you so[00:47:13.690]
not necessarily the latest version not[00:47:16.240]
6.2 but 518 plus half v 5 would be 5[00:47:23.619]
would be now 5 is used to most so yeah I[00:47:27.940]
think it’s best to start at for example[00:47:31.210]
518 something like that yeah so it’s[00:47:35.319]
there’s more support for it and more[00:47:37.690]
people using it yeah all right so the[00:47:40.390]
next question is by I’m Matt so he wants[00:47:43.720]
to know how you can become an expert[00:47:45.480]
widget developer in a short time so do[00:47:48.549]
we have any suggestions for how you can[00:47:51.940]
you know quickly ramp up widget[00:47:54.519]
development is there something specific[00:47:56.200]
you can do for mendax or maybe a crash[00:47:58.779]
course online somewhere we have[00:48:03.480]
couple of how to’s on the MINIX[00:48:06.570]
developer website which will tell you[00:48:10.380]
how to to create a widget but it will[00:48:13.920]
also tell you how a widget is structured[00:48:16.590]
so what’s the the for example the folder[00:48:20.250]
structure and things like that and yon[00:48:23.070]
also mentioned the other webinar from[00:48:26.130]
last year that also goes into creating I[00:48:30.150]
think there was a hello world widget and[00:48:34.950]
so that would be a quick way to to start[00:48:38.550]
and I think the other way to to learn[00:48:46.320]
this is by experimenting[00:48:49.140]
so just by developing and if you make[00:48:52.440]
for example a an error I mean that’s[00:48:55.619]
something that you learn from so you’ll[00:48:59.460]
learn also by I would say trial and[00:49:02.520]
error so I think that that yeah plus[00:49:05.940]
well be how choose and the other webinar[00:49:09.930]
I think that would be a quick way to to[00:49:13.530]
start your your widget development great[00:49:17.640]
thank you very much I’m at does that[00:49:19.380]
answer your question[00:49:20.490]
I think it comes down to practicing a[00:49:23.220]
lot finding a good idea and just trying[00:49:26.430]
it out and if you have someone around[00:49:28.859]
you maybe colleague or a JavaScript[00:49:32.580]
expert who’s maybe built widgets before[00:49:36.000]
maybe they can assist you and give you[00:49:38.700]
some pointers give you some tips and[00:49:40.140]
otherwise of course there’s a the medics[00:49:42.960]
forum where you can always ask you[00:49:44.400]
questions and guaranteed answers yeah[00:49:49.109]
and I I think there’s also something[00:49:50.880]
else I mean a we have a lot of our[00:49:54.720]
widgets we have them on github so that’s[00:49:58.410]
also a quick way to try to find out what[00:50:02.070]
the structure is take the how-tos and[00:50:04.380]
then take one of our existing which it’s[00:50:06.869]
um get up and try to look at the code[00:50:09.690]
and try to understand how to structured[00:50:12.630]
and I think that I mean that helped me[00:50:15.000]
when I started[00:50:16.900]
as a JavaScript developer at MINIX that[00:50:19.750]
helped me tremendously just by looking[00:50:22.450]
at the code of existing widgets as well[00:50:25.480]
and I mean then it goes pretty fast and[00:50:29.260]
yeah the forum is a good one as well[00:50:31.120]
yes all right thank you very much so[00:50:35.590]
a yellow Decker asks a question he says[00:50:39.100]
would this work as a yeoman GUI for[00:50:42.250]
mendax and he links to an atom package[00:50:45.820]
called atom yeoman and perhaps you can[00:50:50.440]
open that on your UI so that we can all[00:50:55.870]
see what he means[00:50:57.820]
so that would be atom dot io / packages[00:51:03.510]
/ atom – a yeoman and perhaps you know[00:51:09.340]
that’s that’s something we have to look[00:51:11.590]
into and perhaps yell that can already[00:51:14.860]
tell us now if this is looking good or[00:51:18.990]
maybe something for for the future well[00:51:25.180]
thank you[00:51:27.120]
I didn’t see this one but I’ll be sure[00:51:32.500]
to to look into it I mean if if it works[00:51:35.590]
then I’m going to experiment with it and[00:51:39.250]
and if it works and then I would really[00:51:42.640]
recommend it yes thank you excellent so[00:51:46.690]
thank you very much for the suggestion[00:51:49.360]
gonzo heart which is asking if you want[00:51:52.090]
to adapt an existing widget that has no[00:51:54.850]
node yes and Jason with grunt for[00:51:58.960]
example one you download it from the App[00:52:01.810]
Store how do you start and install grunt[00:52:06.340]
so I think that’s I think you show that[00:52:10.390]
as part of the updating a widget but[00:52:12.520]
perhaps we can quickly go through that[00:52:14.740]
so through the main steps yeah of course[00:52:19.480]
now if you[00:52:23.220]
well if you’ve downloaded a Witcher then[00:52:30.400]
you won’t have the grunt file and the[00:52:32.770]
package are Jason here and so you can[00:52:38.050]
install these using the widget generator[00:52:41.350]
so like I already showed if I go to now[00:52:56.830]
suppose I don’t have a grunt file and[00:52:59.650]
effects urges and I can just run your[00:53:01.690]
Linux from here and it will see that the[00:53:06.190]
folder is not empty and it will ask you[00:53:08.710]
if you’re upgrading which it were[00:53:10.540]
pressing yes it will take the name of[00:53:13.360]
the widget and the version number of the[00:53:15.340]
widget and then it will try to it will[00:53:21.100]
will put package star Jason and the the[00:53:25.900]
grunt file there so that’s that but if[00:53:32.770]
you have downloaded widget here’s the[00:53:35.830]
thing a widget is has a dot m PK[00:53:41.410]
extension but basically this is a zip[00:53:44.890]
archive so if I rename this to dot zip[00:53:51.420]
and I change it now I have a zip folder[00:53:54.400]
and if I open this there you go so you[00:53:57.700]
can unpack this these files into a a dot[00:54:02.410]
SRC folder and then run your widget[00:54:07.270]
generator in the your root folder and[00:54:09.250]
there you have it then you can start[00:54:11.980]
developing or editing an existing widget[00:54:17.350]
that you downloaded from the from from[00:54:19.240]
the App Store all right[00:54:23.830]
perfect thank you very much for the for[00:54:25.210]
the answer do we have any more questions[00:54:28.110]
if not we will be rounding up and all[00:54:36.100]
the questions and answers will be posted[00:54:38.470]
on the website afterwards and we’ll be[00:54:41.290]
sure to post that on Twitter and on the[00:54:44.470]
mendax forum so that concludes the[00:54:48.280]
webinar for today thank you all very[00:54:50.260]
much for attending and don’t forget to[00:54:52.450]
fill out the survey afterwards see you[00:54:54.970]
at the next web