The world's biggest initial public offering since Alibaba's $25 billion market debut in 2014
Xiaomi filed today to go public in Hong Kong
Bitcoin could be boosted by the current political unrest Hong Kong as the upper and middle classes are reportedly starting to move their assets offshore. Hong Kong Begins Moving Wealth Offshore Fears over the hated extradition bill, whose introduction the Hong Kong government has only suspended but declined to withdraw, are causing the wealthy to start moving their capital from Hong Kong to offshore. People in Hong Kong vehemently oppose a proposed bill, which would give authorities the power to deport those suspected of crimes to mainland China. In protest, Hongkongers have been staging massive street demonstrations for several days, with varying degrees of violence. These demonstrations have caused widespread alarm, particularly for both government and business. On June 10, 2019, the US State Department warned that “the amendments could damage Hong Kong’s business environment and subject our citizens residing in or visiting Hong Kong to China’s capricious judicial system.” Moreover, the city is already suffering from liquidity problems, fueled in part by the China-U.S. trade war. Many now fear that if the extradition bill passes, it will increase capital outflows, thus further reducing liquidity. As a consequence, rich people are now focusing on how to move their wealth offshore. According to Reuters, Some Hong Kong tycoons have started moving personal wealth offshore as concern deepens over a local government plan to allow extraditions of suspects to face trial in China for the first time, according to financial advisers, bankers and lawyers familiar with such transactions. In addition, many middle-class Hongkongers are withdrawing their money from Chinese banks in protest. Even if you don't listen to the people, maybe you should listen to the money.Middle-class taking money out of Chinese banks in anger at #ExtraditionBill … could this be the start of a new spontaneous campaign?https://t.co/g21xAKVArz — Yuen Chan (@xinwenxiaojie) June 12, 2019 For many, these events explain in part Bitcoin’s present trajectory towards the $9,000 USD price mark. HK Authorities Not Withdrawing the Extradition Bill Hong Kong authorities are now backing down. However, they are not withdrawing the bill. On June 14, 2019, Hong Kong Chief Executive Carrie Lam announced that she was suspending the extradition bill she was trying to push through the Hong Kong Legislative Council. But the mere suspension of the bill does not satisfy protesters. Therefore, they will go ahead with another massive demonstration on Sunday, June 16. Thus, Lam’s latest move will not remove uncertainty from the political and business environment for a long time because she has not set a date for the next step forward. Earlier this week Bitcoinist reported that Hong Kong is already seeing an uptick in Bitcoin trading volume on LocalBitcoins platform. If the political unrest continues, it will likely further encourage the rich and the middle-class to protect their assets by moving it elsewhere from the former British colony. Hong Kongers, therefore, may already be eyeing the world’s first apolitical and borderless store of wealth, i.e. Bitcoin, to prevent the government from tracking their private data and confiscating their wealth. In fact, China is no stranger to paying a premium for cryptocurrencies to not only trade and invest but also as a means to circumvent capital controls. In October 2018, a Chinese court issued a ruling saying there is no prohibition on owning and transferring bitcoin in China. Will some wealthy Hong Kongers choose Bitcoin to protect their wealth? Let us know in the comments below! Images via Twitter/@xinwenxiaojie, Shutterstock The post Hong Kong Protests Could Boost Bitcoin as Wealthy Move Assets Offshore appeared first on Bitcoinist.com.
Hong Kong tycoons start shifting their wealth outside of its borders because of proposed extradition law
Hong Kong's wealthiest residents are moving their fortunes out of Hong Kong because of the new extradition law that the Hong Kong government is currently discussing, Reuters writes. The local government is planning to allow extraditions to China if someone is a criminal suspect. The extradition law will cover both Hong Kong residents as well as foreign and Chinese nationals living or travelling in Hong Kong. It would also allow freezing and confiscating assets connected to financial crimes. However, the confiscation could be challenged by Hong Kong courts as it needs to meet a double criminality standard—the crime would need to be penalised in both Hong Kong and China. Tycoons are now eyeing Singapore and some have chosen to transfer their funds there. One wealthy individual has started moving his assets—more than $100 million—from a local Citibank account to a Singapore Citibank account out of fear of being “potentially politically exposed,” said an adviser who was involved in the transactions. He also admitted there were more people quietly shifting their funds, favouring Singapore. Hong Kong and Singapore have been vying for some time to be the go-to home for the super-rich looking to park their enormous wealth. Up until now, 853 individuals worth more than $100 million chose Hong Kong as the base for their income. The proposed extradition bill has been met with massive street demonstrations in Hong Kong.
How Alibaba’s Xianyu enables hybrid integration of Flutter to existing Native apps through incremental migration with Flutter BoostThis article is part of Alibaba’s Utilizing Flutter series.Apps of a certain scale usually have a set of mature and universal fundamental libraries, especially for apps in the Alibaba system, which generally rely on many fundamental libraries in the system. The cost and risk of using Flutter to re-develop an app from scratch are high. Therefore, incremental migration in Native apps is a robust way for Flutter technology to be applied in existing Native apps.The tech team from Xianyu (闲鱼), Alibaba’s second-hand trading platform, has developed a unique hybrid technology solution in this practice.Status Quo and ThoughtsThe hybrid solution currently used by Xianyu is to share the same engine. This solution is based on the fact that only one page at most can be seen at any time. Several ViewControllers can be seen in some specific scenarios, but these scenarios are not discussed here.We can simply understand this solution in this way: We regard the shared Flutter View as a canvas, and then use a Native container as the logic page. Every time we open a container, we use the communication mechanism to notify the Flutter View to render the current logic page, and then put the Flutter View into the current container.This solution cannot support multiple horizontal logic pages at the same time, because you must perform operations from the top of the stack during page switching, and cannot perform horizontal switching while maintaining the status. For example, for two pages A and B, B is currently at the top of the stack. To switch to A, you need to pop B out from the top of the stack. At this time, the status of B is lost. If you want to switch back to B, you can only re-open B and the status of the page cannot be maintained.And, during the pop process, the official Flutter Dialog may be mistakenly killed. In addition, stack-based operations rely on an attribute modification to the Flutter framework, which makes this solution invasive.FlutterBoost: A New Generation Hybrid Technology SolutionFlutter Boost project is already made open source in GitHub. Check it out through this link: https://github.com/alibaba/flutter_boostRefactoring PlanWhen Xianyu promotes Flutter, more complex page scenarios have gradually exposed the limitations and problems of the old solution. So we have launched a new hybrid technology solution codenamed FlutterBoost (a nod to the C++ Boost library). The main objectives of the new hybrid solution are as follows:Reusable universal hybrid solutionSupport for more complex hybrid modes, such as support for homepage TabNon-invasive solution: The solution of modifying Flutter is no longer relied uponSupports for universal page lifecycleUnified and clear design conceptsSimilar to the old solution, the new solution still adopts the shared engine mode. The main idea is that a Native container uses messages to drive a Flutter page container, thus achieving the synchronization between the Native container and the Flutter container. We hope that the content rendered by Flutter is driven by the Naitve container.Simply put, we want to make the Flutter container into a browser. We enter a page address, and then the container manages the page rendering. On the Native side, we only need to consider how to initialize the container, and then set the corresponding page flag of the container.Main ConceptsNative LayerContainer: Native container, platform Controller, Activity, and ViewControllerContainer Manager: manager of the containerAdaptor: Flutter is the adaptation layerMessaging: Channel-based message communicationDart LayerContainer: The container used by Flutter to hold widgets, specifically implemented as the derived class of Navigator.Container Manager: To manage Flutter containers and provide APIs, such as Show and Remove.Coordinator: The coordinator that receives Messaging messages and is responsible for calling the status management of the Container Manager.Messaging: Channel-based message communicationUnderstanding of PagesThe object and concept of the page expressed in Native and Flutter are inconsistent. In Native, a page is generally expressed as a ViewController and an Activity. However, in Flutter, a page is expressed as a widget. We want to unify the concept of pages, or weaken and abstract away the concept of pages corresponding to the widgets in Flutter. In other words, when a Native page container exists, FlutterBoost ensures that a widget is used as the container content. Therefore, the Native container should prevail when we understand and perform routing operations. The Flutter Widget depends on the status of the Native page container.Then, when talking about pages in the FlutterBoost, we refer to the Native container and its affiliated widgets. All page routing operations, as well as opening or closing pages, are actually direct operations on Native page containers. No matter where the routing request comes from, it will eventually be forwarded to Native to implement the routing operation. This is also the reason why the Platform protocol needs to be implemented when FlutterBoost is accessed.On the other hand, we cannot control the service code to push new widgets through the Navigator of the Flutter itself. If the service uses Navigator directly to operate widgets without using FlutterBoost, including non-full screen widgets, such as Dialog, we recommend that the service itself manages its status. This type of widget does not belong to the page defined by FlutterBoost.Understanding the page concept here is critical to understanding and using FlutterBoost.Main Differences from the Old SolutionWe mentioned earlier that the old solution maintains a single Navigator stack structure at the Dart layer for widget switching. The new solution introduces the Container concept on the Dart side. Instead of using stack structure to maintain existing pages, all current pages are maintained in the form of flat key-value mapping, and each page has a unique ID. This structure naturally supports the search and switching of pages, and is no longer subject to the top stack operation. Therefore, some previous problems caused by pop can be solved. Moreover, the page stack operation does not need to be performed by modifying the Flutter source code, eliminating the intrusiveness of the implementation.In fact, the Container we introduced is the Navigator, that is, a Native container corresponds to a Navigator. How does this work?Implementation of Multiple NavigatorsFlutter provides an interface for customizing Navigators at the underlying layer, and we have implemented an object for managing multiple Navigators. Currently, only one visible Flutter Navigator is available at most. The page contained in this Navigator is the page corresponding to the currently visible container.Native containers and Flutter containers (Navigators) correspond to each other one by one, and their lifecycles are also synchronized. When a Native container is created, a Flutter container is also created, and they are linked by the same ID. When the Native container is destroyed, the Flutter container is also destroyed. The status of the Flutter container is dependent on the Native container, which is what we call Native-driven. The Manager centrally manages and switches the containers currently displayed on the screen.Let’s use a simple example to describe the process of creating a new page:Create a Native container (iOS ViewController, Android Activity or Fragment).The Native container notifies the Flutter Coordinator through the message mechanism that a new container is created.The Flutter Container Manager is then notified to create the corresponding Flutter container, and load the corresponding widget page in it.When the Native container is displayed on the screen, the container sends a message to Flutter Coordinator notifying the ID of the page to be displayed.The Flutter Container Manager finds the Flutter Container of the corresponding ID, and sets it as a visible container on the foreground.This is the main logic for creating a new page. Operations, such as destroying and entering the background, are also driven by Native container events.Officially Proposed Hybrid SolutionHow It WorksThe Flutter technology chain is mainly composed of the Flutter Engine implemented by C++ and the Framework implemented by Dart (the compilation and construction tools is not discussed here). The Flutter Engine is responsible for thread management, Dart VM status management, and Dart code loading. The Framework implemented by Dart code is the main API that services are exposed to. Concepts, such as widgets, are the content of the Framework at the Dart level.At most, only one Dart VM can be initialized in a process. However, a process can have multiple Flutter Engines, and multiple Engine instances share the same Dart VM.Let’s take a look at the specific implementation. Every time a FlutterViewController is initialized on iOS, an engine will be initialized, which means a new thread (theoretically, the thread can be reused) will run the Dart code. Similar effects can be achieved for Activity like Android. If multiple Engine instances are started, note that the Dart VM is still shared, but the code loaded by different Engine instances runs in their independent Isolate.Official RecommendationsDeep Engine SharingIn terms of hybrid solutions, we have discussed with Google and come up with some possible solutions. The official recommendation for Flutter is that, in the long run, the ability to support multi-window rendering in the same engine should be supported. At least logically, FlutterViewController shares the resources of the same engine. In other words, we want all the rendering windows to share the same master Isolate.However, the official long-term recommendation are not currently well supported.Multi-Engine ModeThe main problem to solve in the hybrid solution is how to deal with the alternate Flutter and Native pages. Google engineers provide a Keep It Simple solution: For continuous Flutter pages (widgets), only the current FlutterViewController needs to be opened. For the alternate Flutter pages, a new engine is initialized.For example, let’s perform the following navigation operations:Flutter Page1 -> Flutter Page2 -> Native Page1 -> Flutter Page3We only need to create different Flutter instances in Flutter Page1 and Flutter Page3.The advantage of this solution is that it is easy to understand and logically sound, but potential problems also exist. If a Native page and a Flutter page are alternated all the time, the number of Flutter Engines increases linearly, and the Flutter Engine itself is a heavy object.Problems of the Multi-Engine ModeRedundant resources: In the multi-engine mode, the Isolates between each engine are independent of each other. Logically, this does not cause any harm, but the underlying layer of the engine actually maintains the image cache and other memory-consuming objects. Imagine that each engine maintains its own image cache, which can be very memory intensive.Plug-in registration: Plug-ins rely on Messenger to transmit messages, while Messenger is currently implemented by FlutterViewController (Activity). If you have multiple FlutterViewControllers, the registration and communication of plug-ins will become chaotic and difficult to maintain, and the source and target of message transmission will become uncontrollable.Page differences between Flutter Widget and Native: Flutter pages are widgets, and Native pages are VC. Logically, we want to eliminate the differences between the Flutter page and the Native page. Otherwise, unnecessary complexity appears when we perform page tracking and other unified operations.Increased complexity of communication between pages: If all Dart code runs in the same engine instance and they share an Isolate, a unified programming framework can be used for inter-widget communication. And, multi-engine instances also make this case more complex.Therefore, we have not adopted the multi-engine hybrid solution in comprehensive consideration.SummaryCurrently, FlutterBoost has been supporting all Flutter-based development services on the Xianyu client in the production environment, providing support for more complex hybrid scenarios, and stably providing services for hundreds of millions of users.From the very beginning of the project, we hoped that FlutterBoost could solve the general problem of Native App hybrid mode access to Flutter. So we have made it a reusable Flutter plug-in, hoping to attract more interested people to participate in the construction of the Flutter community. In this limited space, we shared the experience and code accumulated by Xianyu in the Flutter hybrid technology solution. People who are interested are welcome to actively communicate with us.Extension and SupplementPerformanceWhen switching between two Flutter pages, we only have one Flutter View, so we need to save screenshots of the previous page. If the Flutter page contains multiple screenshots, it will occupy a large amount of memory. Here, we adopt the file memory L2 cache policy, in which only 2–3 screenshots are saved at most, and the rest of the written files are loaded on demand. In this way, we can maintain a stable level in the memory while ensuring the user experience.In terms of page rendering performance, the advantages of Flutter AOT are obvious. During fast page switching, Flutter can switch corresponding pages sensitively, logically creating a sense of Flutter with multiple pages.Support for Release1.0At the beginning of the project, we developed based on the Flutter version currently used by Xianyu, and then conducted the Release 1.0 compatibility upgrade test. No problems have been found so far.AccessAny project integrated with Flutter can easily introduce FlutterBoost as a plug-in in an officially dependent way, and only a small amount of code access is required for the project to complete the access. For detailed access documentation, see the official project documentation on the GitHub homepage.The Flutter Boost project is already made open source in GitHub. Check it out through this link: https://github.com/alibaba/flutter_boost(Original article by Chen Jidong陈纪栋)Alibaba TechFirst hand and in-depth information about Alibaba’s latest technology → Facebook: “Alibaba Tech”. Twitter: “AlibabaTech”.https://medium.com/media/3c851dac986ab6dbb2d1aaa91205a8eb/hrefHow to Use Flutter for Hybrid Development: Alibaba’s Open Source Code Instance was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.