• Flitter Your Business With AI Integrated Flutter App Development

    As we all are aware of the fact that the digital market is heavily leaning towards a reliable UX-driven process, app development has become quite complex, especially for targeting the industry for mobile platforms.

    For every organization, creating a product that is beneficial for their customer needs always comes up with a plethora of challenges. 

    From the technical point of time, there are various challenges that every business faces, including selecting the right platform for the app, the right technology stack or framework, and creating an app that fulfills the needs and expectations of customers.  

    Similarly, there are more challenges that every business faces and needs to cope with while creating its dream product. 

    So, what to do??

    Well, what if I say that the answer to all your queries and questions is Flutter app development with Artificial Intelligence (AI)  integration……

    Surprised? Wondering how? 

    Well, AI in Flutter app development is one of the best advancements in the software market. The concept of AI was first introduced during the 20th century with loads of innovations and advancements that we are still integrating into our mobile app development. 

    But, what are Artificial Intelligence and Flutter app development? 

    Read more
  • Grinding in video games and real life

    Grind is a process of slowly getting valuable resources (be it experience points or loot) by repetitive and often simple tasks in video games. It has been present from the beginning of gaming but has become more widespread with the popularization of online RPG games because of their leveling systems and competitive elements. 

    It is highly criticized by gamers around the world for making games boring and work-like, yet many people specifically choose to play grind-heavy games. The reason might be because they find simple repetitive tasks relaxing and distracting from real-life problems, as a form of escapism.

    However, there is also a gameplay reason for grinding: getting valuable resources early can make a game easier later. Some popular games like Diablo are even centered around grind. Thus, everyone will have to grind at some point to prevent gameplay from getting too difficult, which quickly becomes an inescapable habit. Later, gamers might apply grinding even to games that do not require it. Interestingly enough, grinding early on can also make the late-game boring because it is going to be too easy if the game was not designed for grinding. For example, in Subnautica, getting a lot of resources early on will make some of the late-game tools useless because all the resources that could have been gained with them have already been gained.

    From the example above, we can see that grind does not always improve the gameplay. We can also see that it is not always a necessary process and can be either minimized or avoided entirely: sometimes, the need for it exists only in our mind, forcing us to diminish the fun of actually playing the game. Is it just a question of habit or is there any other reason for us to grind?

    Читать далее
  • A tiny Rate Limiter Library for Spring MVC

    In microservice world the problem of high load is exteremely big especially when we have a REST API which is accessed quite extensively. Why do we need throttling? The main answer is to decrease the load of the service at the moment.

    Different frameworks have different solutions, mostly some additional libraries. Also there is a Guava RateLimiter and Bucket4J . What is interesting Spring MVC being one of the most popular solutions for building REST APIs (thank you Spring Boot) doesn't have any built in rate limiter. As for external solutions there not that many ways around.

    Today, I would like to present a tiny experimental library specific for Spring MVC. It is called SpringRateLimitter. The library is very tiny ,works in runtime. The idea is to annotate entire rest controller or specific method , than count the number of incoming requests for the annotated URI and based on the values check if we exceed the allowed number of calls. In case of exceeding an HTTP error code 429 is thrown and after the throttling period is over , the endpoint is available again.

    So How does it look like. As first step Maven dependency must be added

    Read more
  • Top 7 Technology Trends to Look out for in 2021

    Technology is as adaptable and compatible as mankind; it finds its way through problems and situations. 2020 was one such package of uncertain events that forced businesses to adapt to digital transformation, even to an extent where many companies started to consider the remote work culture to be a beneficiary long-term model. Technological advancements like Hyper automation, AI Security, and Distributed cloud showed how any people-centric idea could rule the digital era. The past year clearly showed the boundless possibilities through which technology can survive or reinvent itself. With all those learnings let's deep-dive and focus on some of the top technology trends to watch out for in 2021.

    Read more
  • Android interop with SWIG (a guide). From simple to weird. Part 1 — simple

    SWIG is a tool for generating cross-language interfaces - it provides interoperability of C++ and other languages (C++ and Java in our case). SWIG just simplifies and automizes cross-language interaction; otherwise, you may end up with thousands of lines of handwritten JNI code - but SWIG covers this for you.

    This guide is for newbies (Part 1) and for those who experienced in SWIG (part 2). I'm starting from basic setup and usage and ending with complex & weird cases encountered in development. The latter cases are not so complex, rather usual for modern languages, which SWIG doesn't support yet (as lambdas).

    This guide is practical. In opposition to overcomplicated huge-volume SWIG documentation, this guide is showing the cases practically. The bits developed by myself while working on the different projects or taken from StackOverflow. This guide allows you to quick-start an Android Studio project and giving practical examples of using SWIG. The link to the Android Studio project is here.

    This guide is Android-first. The goal was to make it simple to onboard for Android developers. There are many articles about SWIG, but they are mainly for desktop Java applications, and it is quite an overhead to just try them on Android to check if the solution for the particular problem is working. While this guide includes an Android Studio project, with which you can play around instantly. Of course, all the information given here applies to any Java application.

    Warning! I should warn you, that nowadays cross-platform development offers powerful tools. If you are developing a new application it is much more cost-efficient in practice to use ReactNative, Flutter of Kotlin-Native than the SWIG. While SWIG is more suitable to connect the C++ library or existing C++ application core.

    Read more
  • Tutorial. Deploying Django project to Heroku and storing static content on AWS S3: basic scenario from start to finish

    This tutorial is aimed to help Django beginners who want to run a project on Heroku while storing static files on AWS S3. While being a major help for web developers, both services can be hard for beginners to set up correctly. I’ll admit these topics can be found covered separately elsewhere, but there are also some unaccountable nuances if you are trying to make both work in a single project.

    Personally I couldn’t find a source which would not only cover Heroku deployment or S3 usage, but would address those nuances as well. Reading the manuals trying to figure out what do you have to do to deploy a project correctly might be an important part of learning, but it can also make you lose focus on what you are currently trying to study or, even worse, discourage you altogether. If this is your story, look no further. I hope instructions below will help you to deploy your project in a single track without having to consult with other resources.

    The text is broken down into 3 logically distinct chapters: prerequisites for local Django app (a mini-chapter), integrating  AWS S3 into your app for storing static files, and finally deploying to Heroku. You might not want to go through the entire process in one sitting. In the beginning of each chapter an approximate time required to complete chapter’s instructions will be noted so it is possible for the reader to plan ahead. I would advise not to break down a single chapter into multiple sittings, but if it is not possible, at least try to complete all work covered by a single sub-chapter section in a single go.

    Links to official documentation will be provided in text in case you might need extra details on particular actions.

    Text highlighted in yellow needs to be replaced in accordance with your settings/paths/accounts.

    Read more
  • Confusing extensions in Swift

    This post is a little bit the information aggregator. If you find a mistake, you could write to me about it I really appreciate that. Have a nice read.

    Example with JSONDecoder


    What would happen if we run the following piece of code?

    struct Test<T>: Codable where T: Codable {
        enum CodingKeys: String, CodingKey {
            case value
        }
        
        let value: T
        let info: String
    }
    
    extension Test {
        init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            self.value = try container.decode(T.self, forKey: .value)
            self.info = "Default init(from decoder:)"
        }
    }
    
    extension Test where T == String {
        init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            self.value = try container.decode(T.self, forKey: .value)
            self.info = "Custom init(from decoder:)"
        }
    }
    
    let data = #"{"value":"Hello, World!"}"#.data(using: .utf8)!
    let object = try? JSONDecoder().decode(Test<String>.self, from: data)
    print(object.debugDescription)
    

    Try thinking for 5 seconds about the result.

    The result
    Optional(
        Test<String>(
            value: "Hello, World!", 
            info: "Default init(from decoder:)"
        )
    )
    


    Read more →