 So, let's dance. My name is Recky. I'm from Hennau opium in Germany and I work as a state-employed program assistant manager. In my presentation today, I will talk about dancer, the micro framework which you work for, Ms. Heuer, and DVX class, the OIM which many people use it for, and I will describe how to use both. I started with a dancer three years ago after I listened to a really awesome presentation from Soya, from Austin, and just after that I really started with it. It was something to learn, something in confidence, and we didn't have a use case for it, but I started like a month later with the project for a customer and I and he, we all really got about it. There are a couple of things I want to say about the dancer which made my favorite platform work. The first thing is that it's really easy to start with, get an application ready to go with just one command. The syntax is easy to understand, and the most important things to need at first are routes and keywords, which means the routes are for deciding what to do on the request from the user and keywords really help you to do a function which is easy to use. And the proof of that is that on the ISC channel of the dancer, all 50 people are coming in which don't have prior knowledge or prior knowledge of all that stuff. And they are really able to do a certain dancer with a lot of much help. So that's one point by the dancer. It's a really easy to expand. There are a lot of plugins. The data core is really small, but if you have features like send emails, access to database, a flash message, there are a lot of things where you can find plugins on C-Band, on Github, and it's also relatively easy to write. So for small expansion like changing the delay of the template looks like, in general, collected information and so on, there are groups which are really small functions which plan to do your workflow. And our thing is why dancers are so flexible with engines for a lot of things, which is the engines to exchange them. The engines are for the tapers, of course. There are a lot of engines for template systems on the core, and you know there are a lot of them. There is, of course, one for template toolkits for X-Lay and for all the others. You have engines for logging, for the sessions, and also for zero driver. And finally, it's solid. It's stable. It's not really good. You don't have power supply. You don't have power supply. You try and keep the behavior. You don't change the DSL, the keywords, unpredictably, or change the stuff, which really affects your application. And there is a great community for your dancer. I want to mention the IRC channel, we have a main list, and we have a link on GitHub where there's a lot of communication users, opening issues, or sending a full request. So, if you start a dancer, you get help. And people are over all of you. Okay, so that is the dance apart. My first application I wrote was a simple pop-up pipeline for the company in New York. I didn't do much, but it was very helpful for them because they used the commercial pop-ups and they wanted it. They wanted to have an easy way to exchange files with the customers, or between the different varieties of the company. And they also wanted to have a price opening. A part of this project is on ZBAR, which has some common functions if you want to implement the pop-ups. Recently, we started to move this code over to DBX class, which makes sense because we're using it for our products too. I did a lot of websites for the US government. The most prominent is eShop's data software. They're doing improvements for a lot of places which get books, which get presentation things, all over the world. And recently, I wrote a simple monitor for a power plant, really big power plant in Oregon. They have a lot of saving fields. And they give you a lot of data information about how much power they make, all that, and puts up an ICD on one website. They do a nice graph with chart clicker, and it's really helpful for them. The other part I was talking about is the DBX class. They are, of course, object-driven management in the world, but I think this is the most popular one and we're using it. Basically, you have to use instead of directly going to the SQL database and doing the data and getting hash waves over it or error waves, it allows you to get objects over power. And you don't need to worry so much about the performance because the programmers behind the DBX class, especially the university, they do a lot of optimizations. So in most cases, they're really fast and better than your server. But if you want to, you can still do it. If you have really special queries which start to map to an object, you can do that with DBX class too. So one of our major projects is to provide open source e-commerce application called Interchange, which has a really old code base and is disabled, and you can do a lot of things with it, but it's hard to understand and to maintain. So we started the project to replace it with a completely right, which is based on the DBX class for the database back end and usually gets up to do the web framework stuff. But that's kind of a long-running project. So we decided to do something else which is useful for much more people than just for e-commerce users and also which was faster to implement. So the topic is database administration, which is useful for many people. If they want to manipulate the database, you can do it with a simple web interface. The things you are usually using there might be like phd-byte and phd-htm. So you would need different runs for each database system. We started to do an application based on DBX class, which is called the table store, and the features of it are based on DBX class, so you can just access different database systems in the same interface and you don't notice it at all. It has a higher level of extraction than phd-byte because it works on the objects and the classes instead of the table and terms. This gives you a nice way to have relationships between the tables where your phone keys can just go while you show it in the minute. It has a model front end which is based on Angular bootstrap. So that means that this active source code you wrote for that control is really, really small. The front end is based on this Angular stuff, so it has also a routing system, so it stays in one page and then you click stuff and it does API calls to rest in the back end. And it has some good installation. You need 4 commands to install it. It's not simple, it's for everyone because it requires a lot of knowledge. So if you go there and you don't have to configure anything, you can use any database. So you can put a database driver, it will pop down, you can select code, it shows the things you have in the partner system to be API. And then you put in a database name and you eventually access it. And if you have it, you can put in the DVX class schema and then you can submit it and it will connect to the database and if you don't specify a schema, it will generate one. So that would be like that, this is fun for you. The database also requires an e-commerce application. The next time you have a listing of the classes, you should make the database tables. Then you have a list of products. So you can go there and sort them by name or by priority of error. And here you've got two controls for updating an item and deleting an item. You can create a new one and also a paging. And if you do it down, you follow the product itself. So there's the productivity file, there's the name and all the fields you have. Yeah, and also you have the relationships. So that's easy to see. Or the code gets added to it and it says you can be ordered. So if you click on one of these, you put in the related order line and it needs these products in one order of the customer. So you can really run the game through it and it's easy to see. So what do you need to make this happen? How do you use data, data and DBX class together? The most important part of the picture is the plug-in. The plug-in is for a denser plug-in DBIC. And we show or use it how to configure it. We have a note of our duty of aid and also tell you how to create this schema dynamically. So here's a normal code for DBX class. You have a schema which describes how your database structure is and how the tables and other stuff is related. And you can add additional logic inside that. So say, okay, I'm using a schema and then I connect. So let's use a database connection based on some parameters I get there. And then I already can make queries. So I go into the class user which relates to the user table and just can go to search. And then I get a list of objects based on DBX class. If I'm using this with the answer together and this plug-in, it looks almost like the same. On top of DBX class, you can use it. The only difference is that this is a key word. So it doesn't have a situation in front. And this key word is brought in by the plug-in. It's important your namespace and model, but our things are the same. The difference is that you don't have to connect to the database because this is the communication. As I learned from two short cuts, you directly go into the class and write an answer. So the configuration is more or less simple. You specify the schemas. So the one that's choosing automatically is the report schema to say a database name and primer. You have your details for connecting to it. And last but not least, the schemas and the schemas. They're followed need and then you can use the key words to search as updates and whatever you need to do with DBX class. You can also do multiple schemas if you want to connect to a different database for different purposes. So you still have your report one. You write a base for the surveys you get data from there. And you can say, okay, my legacy one. They have a term with us. And I want to use it in my database application. I just put the schema in the file. It's an argument for the schema. Okay. One thing which is kind of... You need to know because it can really surprise you and make your application buggy. It doesn't do by default UTF-8. Which is known as the default for the web and also used in many databases as default encoding. So if you forget about it, don't get your UTF-8 right on top of the database. You have to set this option to pass to your database driver. Otherwise, UTF-8 wouldn't work. And it's kind of sad because there's another plugin for that term. It's called Tensor Plugin Database. Which also accesses database but just gives you a DPI, a page handle so you can just handle queries on it. And this automatically sets these two things. Because it looks at the data conflict and data conflict said I'm using UTF-8, which is the default and then I just set it to be. Okay, that's the thing you need to know if you use a dense line, you're going to see it together. If you want to create the schema dynamically from your database, you just drop all the schema class from your integration. And you have to have dbx class schema loader which is doing this creation. You don't have to produce the schema before you start. This is quite nifty. For example, for the table you don't have, of course, a schema for every database you want to use. And also you will test something or develop stuff or something. But if you really want to use a serious application, it's much better to first use schema and from this schema produce the data. The next thing which I wrote is the engine for the dense line, the session engine, which means you can store all the session details from the user, also a database through this dbx class schema. So usually you store the session like in a file, like in a serial or storeable or whatever. And there are other possibilities in the dense line to store your session data. But if your whole application is built on top of dbx class, it might make sense to also store the session inside it. So I will tell you about the engines in that in general, how to configure this session back end. There's also observation, how your data is actually stored in database. And if you use this database to check the session, it's very important to use session explanation, otherwise your database still goes and goes and closes the problem. So I already mentioned that you have to compose engines in Danza. That's for big templates for the session logger and serializer. And the good thing is you have to just install the supporting module, which contains the engine, and put it in the session and you're ready to go. So the Danza configuration we have a session that we can put the name of the session engine. We have session options where you can pass some parameters to the session engine. And we have a general thing called session expired which means how long it is the session for the users to build. After this time the session is scarlet, but it doesn't mean the session is deleted from the file system or the database or whatever it is stored. That's why we have to count your own for the next operation. So in order to use it I have prepared an example for that. So first say, okay, I want to use BIC and then you have the database parameter which you can see now. And you can also find the figure which table is stored. So this is the size of the class and then the columns for the session idea and for session data. And this is an example where you say it's the session for the user expired after 12 hours. After once and even more relatively. You also can do this basic engine application starts. So you say you have Z keyword and you have to change some configuration of that and you can pass just a schema as you get it from the plugin. The plugin has a schema keyword that gives you an object to devise and you just put it in session options and you don't have to put the stuff into the configuration again. Because you already had to configure the devise to devise simply. The example looks like that. Sessions like the session data. This is what you actually need and also comes handy to store last modified so you for the session expression. So by default this the C-Session uses JS as self-designer and you can use our civilizers if you want in the session options. So the session expression you need just to remove all session from the database and for our e-commerce application you have a class for the session and we wrote an extra function for this. So we are going to say in our script we expire our regular interval at 12 hours for the devise class schema script. So on top of the objects you have in your devise class schema you can add functions which can use in your application and that's good because you can put all the business options So next time part of the presentation I will talk a little bit about the table tour how it's ensured So the installation is based on four steps. Here from GitHub go directly, install the missing models and then let's put this script which basically starts the application. So we don't need any configuration or the database you want to use a driver. You can install the drivers as well but otherwise they won't show up inside the drop-down and you connect to the database. The front end of the table tour is a really nice tool to work with APIs it also has an outsource content so it can delegate things to for example editing a data set or adding data sets for displaying stuff and say all the tests go from IAJX to the rest IAJ so there's no default page about the stuff which makes things slower. And all the communication starts in JSON. So the layout the layout for the table tour is a good step which means you can easily replace it with some other layout there are a lot of teams you can get for good thread and you just exchange one file and you get what you need of course sometimes you have to adjust some things because the colors are a little bit or whatever but it's pretty cool to get some other stuff for the design So the routes inside of the dance app part of the table are a little bit valid. This is the layout to get these normal tests for the process and then you have this matching thing so basically this is the column class and the appearance. So they say stash-loser, stash-tune is the URL that means this is a key of the layout. So the inside here in the end does the data file of the data and it's inside the data and you also add the relationships so you can use the data on the page as a seeding in the beginning. One thing you're using too is the infire again so of course you want to have to do a table tour of the database administration protected and this is by another plugin which has a team of infire again. So if the user is not locked in you never enter this route so you can't see the data. This plugin is called a dance app plugin and it's accessible and it's basically the main thing you want to use if you are using some authorization inside your dance application. I would say it's a stash-tune While it's a stash-tune it's quite flexible so you can have different providers that means different sources for your authentication. One of them is simple Unix. So you log in and get your user account. You have a provider from a database or DBIC or LDAP and you can write one of them. The one thing I want to do for the table tour is log in based on the database credentials like PHP MyAdministering. So you don't have to have a different source for the authentication. You just use this as you want to connect to a normal database. It's kind of difficult because it's accessible again. It just has only two kilometers to pass on the username and password and you can't pass on the database name and stuff like that. So you have to work out a solution for that. We support the following relationships. Might have as many as long as two, many to many. For example, you have to begin. One product can have many interests in the all-night table. It belongs to one relationship and many to many is the relationship between the bridge for three tables and the users and the roles. You can get a connecting table for the user roles and it uses the relationship to connect the user directly to the roles. So the current limitations of the table tour are basically you just use tables with a primary key which is only for one column. We'll find a solution for that. I think the problem is that Angular doesn't support that really. That might be a problem. The speed is not very good if you have really complex schemas but I'm sure it can be optimized. And the error in the ending is not as good as it should. Which is almost always the case with X applications. So you get just one error, please reload the case or something. That might happen. Okay. It's really interesting. It has configuration you want to. You can add your favorite database configuration so you don't have to type in the beginning. Configure is all accessible. It's only fixed to can and configure. And need configure. It's a few just a better search based on Solver, Elasticsearch frameworks, method to select if you're different schemas. For example if you find many of them in the installation or you can store different ones in your database. And one of the things I want to produce in the package for this is I'm a deviantainer and you know many of us can install stuff like that from GitHub. But for the normal user that's too difficult. Okay. So that was what I did. And the next thing I want to tell you is not directly related to Danza. But something I found which is not really documented and it's useful if you're using DBX class. Especially if you have other applications. So say you have a simple table with rows with three columns so you can say in database it's like from rows where rows are either in the screen simple. And if you want to use the same through DBX class to say it's a class whole, I want to find them to use the final 15. And then I can access the final 15 in a very clever way. It's not as simple. It's not as simple if you want to debug stuff you get from DBX class. But if you get this role object from DBX class and say that's a debug role, then output is so, so, so, so big. It's really, really big. So it fills you in a lot and you can't really see what's forward. So for debugging, logging it could be really good to get the hash ref. It's a debug hash ref and you see just the columns which are inside this object. Other uses for this are templates because most templates don't support if you're pushing the object to them. They want the hash ref and also for the table trade example they have an API which works with JSON. There's also no need for objects. You know beforehand that you don't need objects to be faster. We tell DBX class they want hash ref. So there's a function you can need on your DBX class object. It's called getting fit columns and just gives you a hash ref. That's a really good tool to use. Almost done. Just a few things about the future and development. Let's start with DBX 12 and also what about Dancer 2? Dancer 2 is a unique nation and basically a ride of Dancer 1 which should be coming to production ready like this year. This was completely advised so we kind of do plugins for this, for Dancer 1. So there's already a DBX C plugin for Dancer 2. Yesterday, part of my official DBX engine for Dancer 2 as well. They will entirely be the mainstream product. Okay, finally, they're also on the ATT website. Yeah, now it's time for questions a little bit. Usually it's great to get chicks. Yeah, we're using Dancer 6 and using the table tour as a base for the simple administration control. Okay, more questions around. Thank you.