Educational web service "IronBrain" (beta)

    I would like to share with you a system for training, which I have been developing for several years and which has already brought me great great benefit. The system is presented as a website .

    In this article, you will find out where the ideas behind IronBrain came from, how it evolved, how to use it correctly, as well as specific practical cases - what IB can help you specifically and how much . I will also tell you in detail what problems I encountered during development and how I solved them, about some details of the technical implementation of IB.

    I warn you right away - the system is aimed at a very high and high-quality level of training and is not suitable for everyone .

    PS: The project is completely open and free, has no commercial focus, is made from the heart and laid out for your consideration - suddenly someone will come in handy ...



    Introduction


    I ’ll make a reservation right away - it’s quite possible that the ironbrain.org website will fall due to the habr effect or will slow down significantly in the days of the publication of the article, so I provided a fallback option - you can just download and run the server on your PC (for Windows). Still, the main goal of this article is to convey the idea , not the implementation.

    How the idea was born


    To convey the ideology of the program and the scope of its application most accurately, you need to understand why it was created, what tasks it solved, and how it developed. Briefly about myself - my name is Yaroslav and at the time of publication of the article I was in the 4th year of St. Petersburg SUAI. The ideas that underlie IB originated many years ago. But first things first.

    I started to get involved in programming back in 2007. Then the majority studied languages ​​independently and, as a rule, from books or manuals. For starters, I just read books and tested in practice what was written in them. But over time, the realization of the inefficiency of this technique came. I started looking for more productive learning paths - and eventually I found them.

    Friends advised to have a 48-sheet notebook and write in it a brief summary of what is in the book. At first, the idea of ​​“taking notes in a book” seemed strange and useless to me. Why rewrite what is already there? After all, I can always open a book and find the information I need. There are many books and it is not always possible to take them with you? Electronic copies can be easily obtained for most books, and with the advent of electronic ink the border is almost erased - you can have 1000 books in one device. And in general, the idea of ​​abstracts seemed to me a relic of the past - then the books were not available, I had to take notes or even rewrite them.

    But I was wrong. The main use of note-taking was far from this. When you write a compendium, your brain processes information and draws conclusions. He passes it through himself and writes it in the form in which it is better specifically for you. And this processed information is remembered much better. Especially if you add something of your own in your synopsis - thoughts that have arisen, non-obvious conclusions or remarks. Writing a compendium makes you think and draw theoretical conclusions - which ultimately will have a good effect on practice. This is the main benefit. Benefit number two - if you have not used your knowledge for a long time, for example, in a library or programming language, it is much easier for you to recall the material you read.

    In fact, you can achieve approximately the same effect by making a summary verbally - reading and pondering what you read. So in 2010 I was preparing for the exam in physics - without compiling a compendium. What, incidentally, was regretted at the beginning of the first year, since there was no desire to re-read the little book, but I wanted to refresh the basics in my memory.

    For many years, studying these or those technologies, I kept notes on them in paper form - notebooks by Assemler, Pascal, AcrionScript 2,3 were preserved. Inspecting books for me was then a major breakthrough in learning. But then I began to feel that something was missing. The first problem I started thinking about is why not replace paper notes with electronic ones? I tried, but there was no breakthrough - doc or odt - the document is essentially the same notebook, only infinitely strong and infinitely light - take it wherever you want. But these properties were not really needed. But there were drawbacks - the notebook still was much nicer to carry on, and my eyes rested. Thus, electronic notes in the traditional form did not take root in any way.

    When I was preparing for the first session in the first year of SUAI (this was a distant year 2011), I faced the task in a short time - in just a week - to study algebra at the university level. The exam promised to be severe, it is extremely difficult to write off there. Some of the material was in my lecture notes, some had to be taken from the book. When I re-read the notes, I noticed that the lecturer gave substantially more than was on the list of questions for the exam. What if in the future I was going to work as an engineer and an in-depth knowledge of algebra would be useful to me? In general, I thought deeply about this difference in the volume of material submitted. And I also noticed that the approach to compiling tickets in itself is very good for learning, and it can be useful for personal purposes, for example, in learning new programming languages ​​or libraries for them. The ticket makes you think.

    In the second semester of the first year, when we began a physics course, I thought about studying it more deeply, and for one I would prepare for the exam in advance. Why not make tickets for all the topics that the lecturer reads? And to create more questions that “pull out” all the material, forcing him to remember and ponder? I tried to compose them in the second half of the notebook, but on paper it was extremely inconvenient, it was unclear what issue was relevant to what, and I did not want to rewrite all the material separately. What was needed was a program that, among other things, knows how to cut tickets at random, and also stores whether I remember this ticket or not so as not to issue it again. But then I did not guess to make it.

    When I was relaxing in Cyprus in the summer of 2011, I came up with the idea of ​​creating a universal program for storing personal documents and adding the functions I need that are not in Word / Writer. Among other things, I remembered the idea of ​​taking notes on tickets, and decided that it could be easily implemented on the basis of this program. I decided to name the program IronBrain. According to the original idea, the program was to synchronize the knowledge of your brain with a computer, albeit very roughly and not directly - through a mouse and monitor. But this general idea was not realized then to the extent that I wanted. In fact, when you write a document and then re-read it, you synchronize your knowledge with a PC, but it is very inefficient. If you have a lot of documents, it will not be interesting for you to simply re-read them all with a specific period.

    IronBrain Evolution


    In the second year I immediately started to work. Then I saw IronBrain in the form of a harsh desktop program that works instantly quickly, sits in the notification panel and runs on global hot keys. So I did. A long search on the Internet and research has shown that using C ++ / Qt is the best solution. By “best,” I understood that the program would be the best for users — it would not require the installation of third-party virtual machines, run as a clean executable file, and look like most desktop programs. At the same time, Qt gives the desired cross-platform - I did not want to get attached to a specific operating system. I also looked towards Java / Swing, but discarded the idea. It seemed to me that Java interfaces would be terribly slow.

    Then I faced two major problems - ignorance of C ++ and ignorance of Qt. It was the absence of that very basic course in C ++ - I did not have an abstract on it and there was no time to study it normally. On Qt, I had to read several chapters from the book to understand the basics. Ultimately, the lack of knowledge of C ++ was multiplied by its complexity, and sometimes I spent hours sitting and trying to achieve the elementary - compilation of the program. Development went very slowly, and only at the end of the semester I presented something working. Admittedly, C ++ / Qt knowledge has not grown much during the development process, especially C ++. This, by the way, is another clear proof of why you don’t need to learn languages ​​like C ++ on the go and it’s better to spend some time learning “by book”.

    In fact, development was slowed down by the fact that I did not have a good idea of ​​how my program should work. I acted very stupidly and made just a large array of objects that stored sentences, and at the same time it was possible to pose a question from one sentence to another. The idea was this - first the user writes the answers - i.e. fragment of the abstract itself. Then the program forces him to pose a question to each line, and thus, most of the abstract can be pulled out using questions. But it was an extremely bad idea. In addition to everything, the program often crashed with a typical error: “the program has performed an invalid operation and will be closed” - somewhere there were errors with pointers. However, the main idea was implemented and worked, I sat on QIronBrain a couple of months in early 2013. He already began to bring substantial benefits.

    What QIronBrain Looked Like




    Then I realized that I just needed two RichTextEditor for questions and answers. It was necessary to radically change the architecture of the application, ideally - to completely redo it. That's exactly what I did. Using the same little C ++ / Qt knowledge, I wrote a working Examiner prototype from scratch in less than a week - ripping out the only successful idea from QIronBrain. I then used this IronBrain reincarnation for more than a year, having created about 600 tickets in it on various topics. Moreover, the paradox is that I did not modify it at all - I used it in the form in which I released the first version. It almost never crashed, it turned out to be very oak and reliable. Data, as in QIronBrain, was stored as a single XML file. As a basis, the QTextEdit class was used, which allowed to receive its contents in the form of HTML and build it on the basis of HTML.

    What the Examiner Looked Like




    All Examiner did was create tickets and a hierarchy for them, as well as allowing them to drive tickets from a specific section linearly. That was more than enough. In mid-2013, I decided to choose some reference programming language and study it in-depth, because my knowledge was scattered superficially and in different languages. Initially, I thought C ++ would become such a language. However, after much deliberation, thoughtful reading of holivars, analysis of vacancies on various sites and ratings, I came to the conclusion that I need Java. No sooner said than done. For half a year, I read and outlined more than half of Schildt’s book, and also ran many different tests, from Quizful to Enthuware. By the way, from the tests I got almost as much knowledge as from the book, and it was an expanded knowledge of the subtleties of the language - I sorted out inexplicable questions in detail and compiled tickets for them. In total, I created approximately 500 Java SE 6 tickets and took my knowledge to a whole new level. This gave me the opportunity to pass the Java SE 6 Programmer Certified Professional exam on a rather hardcore simulator, which is very cool, and then pass the Java SE 7 Programmer I already in a real certification authority, which was very simple (since it’s on the basics) , but it opened the way for Oracle certification in Java and the possibility of further passing steeper exams.

    In early 2014, I became interested in android and created about 100 more tickets for android. Admittedly, the android is not very well studied in the book. Or maybe I took a book too complicated. In any case, I could quite successfully create tickets based on experience gained or google, but Examiner was strictly hierarchical - I could not create a ticket from scratch and tie it to several areas of knowledge. In mid-2014, I came to the conclusion that it would not hurt to finalize Examiner and put it into the public - write an article on the hub about this whole thing. I decided that I would rewrite the program in Java / Swing and add a number of convenient functions, such as searching the ticket database and adding a ticket outside the hierarchy.

    In about 2 months of work, I created a working prototype of JIronBrain, in which new functions were implemented and a lot of things were improved. However, I realized that I had made a fundamental mistake. The GUI tools that I used were far from the best. When I developed Examiner on Qt, it turned out that the QtWidgets library, in which QTextEdit was dear to me, was not going to be developed further. QtQuickControls comes in for a replacement, which at that time did not give much of what I wanted. And it is not known when they will be finalized to this level. I was hoping that in Java / Swing this would not be the case. However, it turned out that Swing is also considered an obsolete library and has not been finalized for a long time, critical bugs are not fixed, and Oracle positions JavaFX as a replacement for Swing. I personally ran into a problem in JTextPane, when the user enters several spaces in a row and they are lost with setHtml (getHtml ()). Of course you can fix all this with crutches, but is there really no better means? I thought about rewriting the interface in JavaFX, but then I realized that this would also be a critical error.

    What JIronBrain Looked Like




    The best decision was to make IronBrain on the web. As it turned out, a contenteditable attribute has existed for a long time, which gives me the very ideal RichTextEditor that I wanted so much. And HTML5 certainly will not go anywhere. Moreover, this RichTextEditor works fine both under different desktop browsers and under android. And Swing for Android is almost impossible to launch. This fact hurt me very much, and I realized what they mean when they say that the future lies with the web. A web application is a kind of transformer - it can work in client-server mode, or you can run it as a desktop program without access to the Internet.

    I took out an A4 sheet and wrote an analysis of my Java / Swing application and what benefits I will get when switching to web architecture. They were very significant, ranging from a very promising technology to building a GUI (HTML5), ending with convenience for the end user - you do not need to download, install anything, and so on. I realized that it makes sense to rewrite IronBrain again. Fourth time. For the error of the wrong choice of technology had to pay dearly for time and effort. But the transition is worth it.

    Indeed, HTML5 gave me everything and more. Apparently, this is the most advanced technology in the world for building GUIs of small and medium complexity, although, given modern processors and fast browsers, I think you can build an interface of almost any complexity on HTML. I could not even imagine that it has a very powerful built-in RichTextEditor. In almost all the forums I worked on, you must first enter the code, and only then it is visualized in the "preview" mode. In addition, many sites are terribly slow, and I thought that my system would also slow down. But hosted on VPS WIronBrain also worked almost instantly! In addition, in extreme cases, I could run it locally, then in terms of speed it will be the same as desktop applications.

    In about a couple of months, I developed WIronBrain from scratch, with the server part in Java / Spring, and the client part in HTML5 / CSS / JS. I overtook the old base in MySQL, which, by the way, is very pleased.

    What WIronBrain Looks Like




    Idea


    Training is of great importance in our life, especially for an IT specialist. If you are constantly learning something new, then you are probably faced with the problem of losing valuable information - it is human nature to forget . Everyone is trying to solve this problem in their own way - for example, with the help of an abstract or notebook.

    I offer you a special format for storing knowledge - in the form of tickets. All your knowledge and skills, almost all of your life experience can be decomposed in the form of tickets . What is a ticket? This is a set of questions and answers to them. These can be both theoretical questions and tasks with a detailed answer. You just need to learn how to compose them - and so that it becomes a habit.

    If you forget something from a certain area, you can cut the tickets for this area that you have compiled and run them in the form of a test. The huge advantage of tickets over re-reading a book or an abstract is that they make you think . A lot to think, remember and analyze. You check yourself - whether your answer is conceived and choose whether this ticket will appear again in the current test. And after a long reflection on the questions of a forgotten ticket, you can easily remember it by looking at the answers.

    IronBrain system allows you to automate the creation of tickets, organize their cutting and search on them, as well as many other useful functions. If you regularly study something, you can fully recall the main points of the last lesson before each new lesson thanks to questions. You can look at IronBrain as a teacher who, before each new lesson, raises questions for the past and clarifies if you made a mistake somewhere. It also makes you memorize the main points. This is where the main benefit of IronBrain is. Training will become much more interesting and enjoyable, as you will see your progress and think a lot. One of the main advantages of IB is to increase the pleasure of learning and as a result - a steep increase in your productivity. In fact,To experience the main advantages of IronBrain and see the difference with the classical approach to training, you need only 3-4 days, each 1-1.5 hours . Just give it a try.

    There is no point in describing the subtleties of using the system within the framework of this article; you can read about them in the "Documentation -> User Guide" section inside IB.

    Specific applications


    Learning a general-purpose programming language


    HTML / CSS / JS can be learned on the go, without reading books or manuals (as most freelancers do), at a level sufficient to create small custom sites. With more complex programming languages, such as C ++ or Java, this approach is not effective. If you study them during the development of projects, then you risk making architectural errors, which you will pay dearly for later. Of course, everything can be learned through practice and from one’s own mistakes - but this will take years, while one can learn from someone else’s experience from books much faster.

    The algorithm is as follows - take a book on C ++ / C # / Objective-C / Java or another industrial language. Open IB, go to the [Tickets] → [Groups] section and there you create a section for your language and in it - a section for the book. In it, build a hierarchy - as you prefer - from section to chapter and subsections. They already have the tickets themselves. You read the book, outline the theory, then practice - enter the code and play with it, change it and look at the result. Be sure to check ALL the submitted material in practice, so typos, interesting points and useful features are revealed. For all the knowledge and subtleties that you have discovered, you compose tickets, such as "how to write such and such a program, what subtleties are there." Moreover, areas for tickets are NOT affixed. It is better for each chapter to indicate the area by the language name.

    Be sure to drive away the tickets that you created in the last lesson every time before a new lesson - then knowledge will be much better stacked, many things will be rethought. It is this repetition of tickets that is the main benefit of IB in this particular case. Your programming training will be significantly more effective and enjoyable. Benefit number 2 - through the search you can just easily find your tickets and use the database as a personal FAQ.

    Quite often this happens - you begin to read a new difficult chapter, moreover, it’s conceptually difficult - new concepts, approaches and principles. Sometimes you read and just do not understand what and why. IB helps to gradually "take" such chapters without much difficulty. You just need to make 3-4 tickets with the theory, at least with the simplest definitions. And the next day - to drive away and learn these tickets. Then, continuing the training, you will notice that a lot has been clarified and the training will go uphill. This arises because your synopsis - a squeeze of theory - provides a kind of “framework” for your thinking, a “foundation” from which you can build on and put everything in its place.

    Using IB, I learned Java SE at a fairly decent level and still use this knowledge in several ways. About 300 tickets for the Shieldt Java 7 Complete Guide book were compiled. It was not at all difficult, as you might think at first glance. And very productive. A day you need to do about 1.5-2 hours, amounting to about 4-6 tickets.

    Learning the graphics package


    In 2013, I was interested in the topic of creating games, I wanted to create my own little indie game, albeit not difficult, but made from beginning to end. But ignorance of 3D modeling software pulled back. Usually, in such cases, they take a separate person-designer, but first I wanted to try this area myself.

    Licensed 3D max cost a lot of money, but I didn’t want to use the hacked version, which was also not cross-platform. I saw that there was a worthy replacement - Blender - and decided to study it. I downloaded a very good series of video courses in Russian on it, began to browse and experiment. And also - in parallel to create tickets for the knowledge gained. Then QIronBrain did not allow to insert screenshots, but I did not really need them. It was enough to formulate a question in the text, for example, “How to extrude the landfill?” or "How to collapse three points?" - and answers in the form of hot keys, or a description of where the necessary buttons are located. In addition to questions and answers on elementary topics, I also asked purely technological questions and answers, for example, “How to make a cup through 2D drawing and 360 degrees rotation” - and then the description of the algorithm by points. It took about 2 weeks to study, almost every day I studied on average 1.5-2 hours.

    I learned the basics of a blender, but put off the project to create a game for the future, as there were many other tasks. And six months later, in the new semester, I had a term paper on computer graphics. This is where the enormous advantages of IronBrain affected. I opened Blender and realized that 60% of what I studied did not remember in principle, and another 30% I remember very vaguely. For six months I have not practiced 3D modeling, and I have never practiced the acquired knowledge at all - I studied and forgot. What to do? Time was spent decently on training. Watching the same video courses a second time was tiring and unproductive. Of course, re-studying the material is much faster - I would be able to review and remember all this in a week - 1.5-2 hours every day. But there was a more efficient way.

    It took me about 3 days to run all the Blender tickets for 2 hours every day. This is two times less than if I re-watched the video course. And three times nicer, because, again, questions make you think. I created excellent 3D models (for course) and passed it without any problems. Since then, a year has passed and I forgot everything again, but if I need Blender again, I can also easily remember it.
    In addition to this, searching for your tickets in this case offers great advantages. If in the case of books you could still download the electronic version and search on it, then for most video courses text search is not possible, and scrolling back and forth in search of the desired fragment is a very tedious task.

    Such an algorithm - take video courses (they are the most effective for studying graphic packages), create a new section “Computer Graphics” in the [Tickets] section. It contains a section on the name of your package, for example, Photoshop, Gimp, 3D max, etc. There is a section on the name of the video course - and in it section by section sections with tickets. Everything is similar to taking notes in a book.

    Test preparation


    When I studied Java, after reading the book, I decided to go deeper into the tests. Quizful has a huge collection of Java SE tests, and they contain a lot of knowledge and experience. Many examples can be called overly intricate, but nevertheless they sometimes contain practical experience that is not written in books and which can really be useful. In someone else's code, and not so can be found. In addition, Java is well standardized and 95% of these same language “tricks” are strictly defined by the language specification. If they are defined there, then someone needs them, right?

    Suppose you decide to test on a certain site and work on the bugs. You meet some new features of the language or its libraries that you did not know about before. Open the IDE, experiment. Now you need to write down this feature somewhere, so as not to forget. It can be useful to you on a real test, or on an interview - they often like to ask all sorts of tricks. And finally, there are practically useful points in tests.

    But where do you write down the acquired knowledge, so that later it would be easy to remember? IronBrain comes to the rescue. Yes, you will create tickets based on tickets. It may seem strange to you at first glance, but it is quite normal. You put your vision and understanding of the problem into your ticket. I repeat - you can’t just copy the question and answer from the test. You need to research it yourself, check, think through, remake and make your ticket. Each IronBrain user, let them create their own collection of tickets. It's like a notebook - you cannot use someone else's.

    The algorithm is significantly different. A test is not a book or a video course. It has no structure. Everything is randomly mixed there and it makes no sense to try to reduce this to a hierarchy. Simply create an independent ticket by clicking on the "+ Ticket" menu. But do not forget to attach it to at least one area.

    In theory, this approach can be used to prepare for almost any test on any topic. Or to extract useful practical information from the tests, if any.

    Storing fragments of source code


    A long time ago I published Habré article about CodePaster . I myself used this program for a long time, but eventually scored on it when I did a normal search in IB. Yes, code fragments can also be stored as tickets. And to throw a list of questions to some fragment, according to the general logic of work or specific methods. And this, by the way, really helps when you use the search - a list of questions explains what this code does. Those. code fragments can simply be added as tickets, then DO NOT run them as a test, only find them through a search.

    Super Interview Preparation [Assumption]


    Let's say you are a mobile application programmer. You learned Java SE from a book and made a lot of tickets for it. You studied android on a video course and also made tickets. Then you raised your VPS server and gained a lot of useful practical knowledge of Linux - solving most of the administrative problems through a search engine and third-party sites. And you also turned all this knowledge into tickets. Then you did the project “for yourself” for the android, and during the development process you came across a lot of things that are not written in books and courses - both in Java and in android. You also surpassed all these practical skills in tickets. Each ticket that you created, one way or another, was included in any area, directly or indirectly. Then you went to Linux courses and they told you a lot of interesting things, which you also checked at home and overtook into tickets. Then you read some interesting articles on the hub about Git and noted something for yourself - a couple of new tickets.

    Bottom line - you have the following IB areas - Java SE, Android, Linux, Git - and there are tickets in each area. Areas can sometimes intersect - when a ticket affects unique knowledge from both areas. You look at vacancies and find among them those that approximately correspond to your knowledge, for example, a vacancy at some MobileMegaSoft company.

    You create an IB direction that includes all of these areas and call it MobileMegaSoft direction. From now on, it includes ALL tickets that you previously composed and included in these areas. And most importantly, it calculates the percentage of tickets that you remember at the moment, and also allows you to cut those tickets that you most likely forgot. For example, you can, for a couple of weeks, every day for a couple of hours, cut and run your tickets, remembering your experience, as well as what you read in books and heard in courses. All this knowledge will be combined in your head together, and besides, during the repetition you will have a different look at many things and new ideas, an understanding of what used to seem muddy. It is entirely possible that you will even draw new conclusions and gain new knowledge by repeating the old. No wonder they say that repetition is the mother of learning. IronBrain allows you to "take to the air" all of your knowledge that you have accumulated over the years on certain topics.

    Thus, you get almost perfect preparation for the interview. At least it should be like that in theory. I have not yet been a student in large companies, and so I took small jobs. Therefore, I can’t say that they took me to such a cool company because I was preparing through IB. Maybe in a couple of years, when I graduate, I will try to do it.

    Any work that requires extensive knowledge [Assumption]


    Imagine that your knowledge is airplanes at the airport. If you do not use them for a long time, they are idle idle and eventually become unusable. Suddenly you need to keep your entire fleet in the air? In the traditional approach, this requires a lot of labor and effort ...

    All theoretical and practical knowledge can be decomposed in the form of tickets. It doesn’t matter what source of this knowledge - someone taught you, you learned from the book, got to it yourself or read it on some forum. I will give a simple example. IT professionals always need to know a lot. And here IB can significantly help you. If you work as a programmer, as a rule you are dealing with a large stack of technologies. And for each technology, you can create an IB-area, and create an IB-direction, which collects all the areas necessary for your work. Thus you will outline a lot of tickets that contains the knowledge you need for your work. Yes, this knowledge may be redundant, you can use only 10% of all repeated knowledge. But this redundancy is inevitable and natural. To make the right choice among the three libraries, a programmer must know at least at the basic level all three libraries. And the mistake of choice, as you know, can be expensive.

    IronBrain allows you to maintain a certain set of knowledge constantly "in the air." The slicing function allows you to choose random from a certain set of tickets, but choose from those that you don’t remember. And when you answer each ticket - you choose when to remember it, in a day, a month, in a year, etc. Admittedly, I myself created the IB Developer area and included areas of Java SE, Tomcat, HTML, JS, CSS, and Linux. When I learn something new - I add tickets to the relevant areas. However, so far I have not been able to coolly apply this cutting technology, and I do not presume to say whether it will help you or not. If you can - be sure to write about it. IronBrain has beta features, and this is one of them.

    I heard that the work of a lawyer involves knowledge of the theory in a very large volume - and the success of the work directly depends on this volume. I want to make the assumption that IronBrain can be very effectively used to study legal sciences and when working in this area. But this, again, is an assumption, and I could be wrong. At the moment, I do not have friends who have used IB effectively in this direction. I will make a similar assumption for the medical sciences ...

    Technical implementation


    I have been thinking for a long time about choosing Java VS PHP for the server side of IB. This fundamental holivar, which, like the Office VS Freelance, has not been resolved within me and may never be resolved. Well, except that if I finish my studies at the university and try myself fully in both directions. I tried to choose the Java side and am going to build my future career on it, however I do not know if I made the right decision. PHP, it seems to me, opens up fantastic opportunities for freelance, which Java does not have. Maybe you should choose PHP. But at a decent level I knew Java and chose this platform for the server side.

    IB is based on Java / Spring / Hibernate. This is a classic stack that is used quite often. In about 2 weeks I learned the basics of Spring and Hibernate. These are very complex industrial technologies, and I did not have the time and opportunity to practice them normally anywhere, therefore, most likely, it is full of jambs, architectural and not only. To study them, it takes years, both theory and practical work in companies. So do not judge strictly.

    Once I had a tradition of opening the source code of sites from friends of web programmers and saying how everything is crooked and oblique. Now that I have essentially released my first website, I understand that my frontend is built, perhaps even worse than that of friends of web programmers. HTML / CSS / JS require a separate study and painstaking work, and I specialize more in the server side than in the client. Maybe you should use libraries like GWT, or at least connect AngularJS. But I did a thin client on traditional HTML / CSS / JS + JQuery. Architecturally, the code is just awful, but I did not know how to do it differently when I started development.

    I could release JIronBrain as a desktop application with a Java / Swing interface. There it would be much more difficult to get to the bottom of the code, but the program would not have received the huge benefits of a web application. Therefore, I laid its foundations on the web.

    Be that as it may, the current implementation of WIronBrain, having not the best architecture on the client, works BETTER and MUCH than all previous implementations. HTML5 gave me fantastic possibilities - from the contenteditable property to the support for web sockets. Once again, the current version of IronBrain, although beta, but it works fine if used correctly and can already be used for training.

    MySQL is used as the DBMS, and all data is stored in it. A very interesting fact - in the source code there is not a single line written in SQL. All work with the database goes through the ORM Hibernate layer, and this, admittedly, is very convenient. Thus, the project is not tied to a specific DBMS and, in theory, it can be used with any relational DBMS. And the server itself was raised on a budget VPS running Debian.

    Conclusion


    I apologize if the article turned out to be large, I just wanted to maximize everything related to IB. By the way, I have long wanted to write this article ... The

    source code of the system is completely open and available on GitHub .

    If you manage to apply IronBrain in any area of ​​your life, be sure to write me your story in full detail at kciray8@gmail.com . You can do this anonymously or indicate that I do not upload it to the public. But, in any case, I will be glad to any feedback.

    In addition, it would be very interesting for me to hear about your personal training system, how you study, what methods and so on. Write ...

    Best regards, Yaroslav aka KciRay .

    UPDATE:
    The idea as a whole was very well received, especially a lot of positive reviews were sent by email. Thank you all, I will gradually develop the idea and the system further.
    The publication on the hub in 3 days brought the system about 4,000 unique visits and about 200 registrations.
    An interesting fact is that the ironbrain.org server has never crashed and the site did not slow down at all, having successfully withstood the habraeffect.

    Also popular now: