• The Code Analyzer is wrong. Long live the Analyzer

      Foo(std::move(buffer), line_buffer - buffer.get());

      Combining many actions in a single C++ expression is a bad practice, as such code is hard to understand, maintain, and it is easy to make mistakes in it. For example, one can instill a bug by reconciling different actions when evaluating function arguments. We agree with the classic recommendation that code should be simple and clear. Now let's look at an interesting case where the PVS-Studio analyzer is technically wrong, but from a practical point of view, the code should still be changed.
      Read more →
    • How static code analysis helps in the GameDev industry

        image1.png

        The gaming industry is constantly evolving and is developing faster than a speeding bullet. Along with the growth of the industry, the complexity of development also increases: the code base is getting larger and the number of bugs is growing as well. Therefore, modern game projects need to pay special attention to the code quality. Today we will cover one of the ways to make your code more decent, which is static analysis, as well as how PVS-Studio in practice helps in the game project development of various sizes.
        Read more →
      • Analyzing the Code Quality of Microsoft's Open XML SDK

          image1.png

          My first encounter with Open XML SDK took place when I was looking for a library that I could use to create some accounting documents in Word. After more than 7 years of working with Word API, I wanted to try something new and easier-to-use. That's how I learned that Microsoft offered an alternative solution. As tradition has it, before our team adopts any program or library, we check them with the PVS-Studio analyzer.
          Read more →
        • How to build a high-performance application on Tarantool from scratch

          • Tutorial
          image

          I came to Mail.ru Group in 2013, and I required a queue for one task. First of all, I decided to check what the company had already got. They told me they had this Tarantool product, and I checked how it worked and decided that adding a queue broker to it could work perfectly well.

          I contacted Kostja Osipov, the senior expert in Tarantool, and the next day he gave me a 250-string script that was capable of managing almost everything I needed. Since that moment, I have been in love with Tarantool. It turned out that a small amount of code written with a quite simple script language was capable of ensuring some totally new performance for this DBMS.

          Today, I’m going to tell you how to instantiate your own queue in Tarantool 2.2.
          Read more →
        • Modern Web-UI for SVN repositories

          • Tutorial

          cSvn — is a web interface for Subversion repositories. cSvn is based on CGI script written in С.


          This article covers installing and configuring cSvn to work using Nginx + uWsgi. Setting up server components is quite simple and practically does not differ from setting up cGit.


          cSvn supports Markdown files that are processed on the server side using the md4c library, which has proven itself in the KDE Plasma project. cSvn provides the ability to add site verification codes and scripts from systems such as Google Analytics and Yandex.Metrika for trafic analysis. Users who wonder to receive donations for his projects can create and import custom donation modal dialogs.


          Instead of looking at screenshots, it is better to look at the working site to decide on installing cSvn on your own server.


          It should be noted that you can browse not only your own repositories, but also configure viewing of third-party resources via HTTPS and SVN protocols.

          Read more →
        • Spring Boot app with Apache Kafka in Docker container

          • Translation
          • Tutorial

          Privet, comrads!

          In this article i’ll show how easy it is to setup Spring Java app with Kafka message brocker. We will use docker containers for kafka zookeeper/brocker apps and configure plaintext authorization for access from both local and external net.

          Link to final project on github can be picked up at the end of the article.

          Read more
        • Active Termination Drivers

          • Tutorial


          The easiest way to build a driver with specified output impedance is to use an amplifier with high load compatibility and add a resistor to its output. The penalty is voltage drop across this resistor, so there is power loss and we need a higher supply voltage. If our driver is able to deliver the same voltage and current to the same load, but the extra resistor will have a lower value, our device will be able to deliver the same output power at a lower supply voltage. Less power losses, less heat, and longer working time when a battery is used.
          There is an idea how to solve this problem: active termination. We can synthesize the output impedance!

          Now when we know what we want, go to design our drivers!
          Read more →
        • Ads
          AdBlock has stolen the banner, but banners are not teeth — they will be back

          More
        • Patroni cluster (with Zookeeper) in a docker swarm on a local machine

          • Tutorial

          There probably is no way one who stores some crucial data (and well, in particular, using SQL databases) can possibly dodge from thoughts of building some kind of safe cluster, distant guardian to protect consistency and availability at all times. Even if the main server with your precious database gets knocked out deadly - the show must go on, right? This basically means the database must still be available and data be up-to-date with the one on the failed server.

          As you might have noticed, there are dozens of ways to go and Patroni is just one of them. There is plenty of articles providing a more or less detailed comparison of the options available, so I assume I'm free to skip the part of luring you into Patroni's side. Let's start off from the point where among others you are already leaning towards Patroni and are willing to try that out in a more or less real-case setup.

          I am not a DevOps engineer originally so when the need for the high-availability cluster arose and I went on I would catch every single bump on the road. Hope this tutorial will help you out to get the job done with ease! If you don't want any more explanations, jump right in. Otherwise, you might want to read some more notes on the setup I went on with.

          Read more
        • A Guide to App Monetization in China

            Introduction and Context

            So you’ve just finished developing the next mobile gaming smash hit. You’ve already planned to launch your game worldwide and win the hearts of gamers everywhere. But what you haven’t done yet is think about how you’re going to make any money from your success and hard work. Of course, you’ve imagined becoming an instant millionaire, but you just don’t know how to get there.  

            Fear not, intrepid developer! Instead of just rehashing the tired headlines and beating the same old drum, we’ve tailored our Ad Monetization write-up for developers who are gearing up to publish their game or app in China. We’ve scoured the internet, grabbed insight from ad giants like Google, Smartyads, and PocketGamer.biz and combined it with our own hands-on knowledge of what works in China—knowledge that we have gained from the past  5 years in the industry.

            We need to briefly explore how monetization functions as a utility within the context of game design. This is especially true when examining how developers in China have made meaningful design decisions that have both shaped and been shaped by user habits. Unpacking the utility of Chinese game monetization will help developers understand why Ads Monetization or Hybrid Monetization strategies have become so popular, especially in China.

            Moving from monetization design, we’ll examine some of the best practices regarding Ads Monetization. Finally,  we’ll turn to specific case studies in the Chinese market that show how powerful Ads Monetization, specifically Rewarded Videos, can be in a well-balanced monetization strategy. 

            Designing Monetization as a Utility

            Читать далее
          • 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 →
          • Launching Grenades in Unreal with Gameplay Ability System: Part 1

            This is the first tutorial in the series dedicated to Gameplay Ability System. The goal for these tutorials is to be easily digestible, 10 minutes-long reads focused on getting a working prototype of a gameplay mechanic on screen as fast as possible. So whatever you new to Unreal Engine or new to Gameplay Ability System, Designer, Animator, or Technical Artist, these tutorials will help you build your projects faster and stop being afraid of using GAS for your projects.


            This series requires little to no knowledge of C++. It requires a basic knowledge of Blueprints scripting and general knowledge about unreal asset types and their use for building gameplay. I tried to cover steps in as much detail as possible and provide GIFs and plenty of images to help you on your way to the result, which is just 20-30 minutes away from now.


            I wish you good luck and let's go!


            image


            The end result we will be able to see very soon.

            Read more →
          • What App Stores can you consider except Apple App Store and Google Play Store? Here are 6 Alternative App Stores

              Recently Epic Games’ Fortnite was removed from the Apple App Store and Google Play Store. The main reason being Epics bypassing of in-app purchases instead of using the officially sanctioned system for both platforms. While it is still possible for you to download Fortnite directly, this large scale case brings to light the duopoly of Apple and Google in the mobile market.

              For most developers, these two stores account for almost all of their revenue and userbase. While Epic Games will be fine to go without, for the time being, what about the other 99% of developers who rely on these two stores for distributing and monetizing their apps. In this article, we’ll provide some of the alternative stores available for both developers and consumers for finding or distributing apps.

              For one reason or another, you may have found yourself wondering, ‘where are some other places I can go to find and download new apps and games for my mobile device’? Or ‘are there any other marketplaces for me to share my apps’?

              Читать далее
            • OPPO, Huawei, Xiaomi. Chinese app stores join forces to take on Google

                Major players in the Chinese app market are joining forces to take on the almighty Google Play store. Xiaomi, Oppo and Vivo are reported to launch the Global Developer Service Alliance (GDSA), a platform allowing Android developers to publish their apps in the partnering stores from one upload.

                The GDSA is expected to launch in nine countries—including India, Indonesia, Malaysia, Russia, Spain, Thailand, the Philippines, and Vietnam—although paid app support may vary across the regions. Canalys’ Nicole Peng explains the wide reach of this alliance:

                By forming this alliance each company will be looking to leverage the others’ advantages in different regions, with Xiaomi’s strong user base in India, Vivo and Oppo in Southeast Asia, and Huawei in Europe. 

                Читать далее
              • Female gamers in China

                  The latest forecast by Niko Partners shows promise that gender equality in gaming is on track to reach 50/50 by the end of 2020, as figures show a consistent rise of 4% year on year: “Female gamers are rising, making up 42% of total gamers in 2018, 46% in 2019, and forecast to be 50% in 2020, primarily on the mobile platform.” This forecast follows a report by the China Audio-Video and Digital Publishing Association last year that identified growth potential and calls for more quality games targeted at female players.

                  2019 saw the number of female gamers reach 300 million, contributing RMB 52.7 billion (USD 7.5 billion) or 22.8% of total actual sales revenue of the gaming industry in China. The Association’s report also identified low cost leisure games as most popular among females. Furthermore, the Gamma Data report gives China’s female game market revenue a forecast of RMB 56.8 billion for 2020, with 70% (RMB 40.1 million) of revenue deriving from mobile games.

                  Читать далее
                • Online Almighty

                    2020 broke in brazenly and audaciously with its rights to our quiet and measured everyday life. It seems like the whole world has gone online, making life easier for millions of people including event managers. But not so fast...

                    In this article, I will tell you how our PVS-Studio team started its year in the field of business events, conferences, what experience we gained and what mistakes we want to protect our readers from. Whether you are a CEO, a hoster of business meetings, a developer, a teamlead, or etc, our experience will be useful to everyone in case you somehow relate to conferences.

                    Читать далее
                  • Linux Switchdev the Mellanox way

                      This is a transcription of a talk that was presented at CSNOG 2020 — video is at the end of the page



                      Greetings! My name is Alexander Zubkov. I work at Qrator Labs, where we protect our customers against DDoS attacks and provide BGP analytics.

                      We started using Mellanox switches around 2 or 3 years ago. At the time we got acquainted with Switchdev in Linux and today I want to share with you our experience.
                      Read more →
                    • The Different RPG styles between East and West

                      image


                      The Chinese Mobile RPG: the Genre of Giants.


                      Chinese RPGs make up 56% of the top 500 grossing iOS games in China. According to data gathered in 2019 by Game Refinery’s Joel Julkunen. Let’s take a look at the genre and some important points for game developers and RPG enthusiasts to consider Chinese Mobile RPGs.


                      RPG or role-playing game is a game where the player plays as a character, often the main character, in a fictional game world.

                      Read more →