📜 ⬆️ ⬇️

Stages of development of the Java Online Projects learning project: how it was, an inside look



Hello! My name is Grigory Kislin, author and host of educational projects and Java internships. I wanted to tell from a technical point of view how the project lived and developed. At each stage, it was necessary to choose only the most necessary solutions for the current work, which were implemented on the KISS principle, or, the Russian equivalent of the DUP: Cheap, Convenient and Practical .


Start: teaching at the training center


It all started with offline teaching at the St. Petersburg Paid Training Center in October 2013. There I spent several full-time releases of the course “Practicing Java. Web application development. The teaching was based on the development of one large web project and it was necessary to solve rather trivial things, for example, the transfer of the code I wrote to all participants. Flash drives were tried :), Skype, file transfer over the network. The solution was to update the project by the participants and separate my code from the homework code. In the end, we came to an obvious solution - to the version control system, updating the project with patches and doing homework in the git branches .
')
Git and GitHub training was added to Java learning, without knowing which the developer’s life is unthinkable. In parallel with teaching, I developed a Java Enterprise training project (Spring, JPA / Hibernate, REST, ..), based on the introductory task at Toptal .

Free swimming care


In teaching, we wanted some autonomy, for example, to bring our participants to the course with a small discount and receive commissions for them, which was not in the plans of the owners of the center. As a result, he switched to the online format and began to develop the project on webinars independently. I made a simple website on Bootstrap , chose low-cost host-food hosting (you can also buy a domain cheaply) and screwed a php script to the php website for sending emails: when registering on the site, it sent 2 letters to me and the participant. Web client Yandex sorted registration letters into different folders from where I inserted them into Google Sheets. He sent letters in several groups (no more than 25 recipients in one letter).

For webinars, I took the Adobe Connect platform (25 people in the room and the month Trial), chatted in a Skype group. Adobe works well with 2 screens (one for the show, the second one with a pre-arranged project code for the lesson) and records well in its cloud the webinar video, which is available to participants immediately after the session (you just have to remember to turn on the recording!). Parallel to the scratching of all the bottom of the barrel for the recruitment of the first release of Java Enterprise. Launched it in August 2014, gathered as many as 6 people!

Growth deep


Soon the management of accounting and mailing began to take considerable time and I realized that I needed my own mailing service. I didn’t want to use a third-party service (automatic adding new users there was not much easier than deploying my own), and I wanted to practice with Spring Boot.

The choice fell on AWS hosting with a year (!) Of free use . Be careful with the free stack , after a couple of weeks I was charged about a dollar for not having disabled my empty PostgreSQL daily backup, and they exceeded the free 5 Gb on Amazon S3. And when I clicked the Deplo example button in AWS Elastic Beanstalk, he deployed 3 instances at once, which cost me a few cents :). As a result, I stopped at a simple configuration: EC2 (Amazon Linux AMI), H2 base (I liked the ability to connect to it when the application was running via TCP server launch) and Spring Boot launch as a JAR. By the way, with my loads, backup H2 is a regular copy.
file without stopping the server. The project did push on GitHub, and took it through pull on the server (recently the process has become even more simple - I push from my computer directly to EC2 via ssh , and I look at the logs in the IDEA Terminal window). I made letter templates in Thymeleaf with clearing the cache every 3 seconds (I think this solution is better than disabling it completely). As a result, the template on the server is updated immediately, before the need is not required.

I sent mail via SMTP Yandex (a limit of ~ 500 emails per day, a List-Unsubscribe header is required for mass mailing to be able to unsubscribe). The registration form on the site pulled my service, which kept the person in the database, sent a letter and showed the result of the dispatch.

Instead of admin, I made a REST controller with basic authorization and set up Postman with a set of pre-made templates for REST twitching (mailing, payment, manual registration).

Further more: restrictions


500 letters a day was not enough, and Yandex began to ban me. Switching to the spare email was not the best option and, after shuffling, I found a great solution: Amazon Simple Email Service (SES) .


The only thing is that for normal work with him you need to write to tech support with a request to remove restrictions, give a link to the site and answer “Yes” 3 times to questions about subscription management. As a result, I sent letters for free for a whole year and now I pay cents for them (volumes are small, ~ 5-7 thousand letters per month).

The Skype group, where more than 50 people, becomes uncomfortable for learning. We switched to Slak, where for each lesson and each topic (for example, help, feedback on work, vacancies) made their own channel. Over time, channels of RSS subscriptions, changes in the project, etc. appeared . The invitation to Slack also made automatic through their undocumented API .

The next restriction was the maximum number of people to access the folder in Google Drive (I keep the edited videos of webinars there): 600 people. The problem was solved through the provision of access to Google Groups and the G-Suite Admin SDK to automatically add members to the group. I had to pretty much (days 3-4) google to integrate with him . It’s worth 4 € per month per participant (because I’m one participant, and the rest are guests, it’s inexpensive :)

Development in breadth: new features (features)


The site on host-food became superfluous, it was logical to move it along with the application to AWS. With the redesign of the site, simple recommendations from Google helped, and when setting it up, testing for download speeds . For example, following the recommendation, simple
The inclusion of Gzip in Ngix raised the download speed rating from Good to Excelent.

To give partners information, I screwed a universal interface to the database (the topic of a separate article): I keep the requests in a periodically reloading property file, and I read the names of the columns from the request metadata. As a result, setting a new request with a report is no different from updating a template and also takes seconds. And I animate it with simple js, which is returned as (horror!) SQL query results. For example, a universal interface for employment partners gives a list of internship participants with the ability to view information on each participant and upload data to CSV.

For a long time, I lived without authorization at all. The participant got into his profile on the site via a link from a letter with salted hash of his email. And only recently, with the help of graduates (there is not enough time for everything) I added authorization via OAuth2 through Google and GitHub.

The interface for setting a password, its change and reminder was not required.

The authorization made it possible to make the profile “smart”: for each project (as long as there are 3, I am preparing the 4th), if it is already completed, a free repetition is offered, if not - getting a free introductory lesson. I also made an automatic calculation of the price for each participant, taking into account the referral program and bonuses for participation.

Finally, I recently took the next step in automation - receiving payments from the site (according to modern Internet acquiring). Interrogated with Tinki Business , because they opened an account with them (there were conditions for free registration of documents, opening an account and the first 6 months of service for new IPs). Already in the process of connecting, they added a fly in the ointment - they lowered the free limit on cash withdrawals. Yes, and the connection process itself was not straight because of the fuzzy documentation and thoughtful work of the acquiring service. Compensated for this attentive and professional work of managers to work with clients, so that the overall impression remained good.

The application is in constant change: I had to change the process of issuing free coupons to IDEA when JetBrains switched to a new policy, set up a subscription from the site to mailings to VK groups (see the article in the VK newsletter ), I integrate with the GetCoder developer search service. By the way, if you are considering job offers, fill in a location in your GitHub profile - this is important information for HR. About 2 years ago, I had to leave the main job of senior and completely give myself to the project.

I will answer your possible questions in advance:


Does your current business generate income at least at the level of a senior salary? Do you regret the transition?
No, although now it turns out about the same. The lord has a ceiling: his possibilities. And in business everything depends on you, only you have to move. I have to work a lot, but I can also relax when I want (with the computer, though :). And work on yourself brings more joy and satisfaction. Especially when you see its results - employed graduates and good reviews.
This is not in the heading "I am promoting"?
I hope no. He did not give any references to himself, wrote about the historical development of the project and technical solutions, which, I hope, will be useful to someone.

If the article was interesting or useful, plus. If not, write a comment. Thanks for attention.

Source: https://habr.com/ru/post/338442/


All Articles