HDE BLOG

コードもサーバも、雲の上

34th Monthly Technical Session (MTS) Report

34th Monthly Technical Session (MTS) was held on May 19th, 2017. MTS is a knowledge sharing event, in which HDE members present some topics and have QA sessions, both in English.

f:id:bagus-rahman:20170609161151j:plain

The moderator of the 34th MTS was Jeffrey-san.

f:id:bagus-rahman:20170609154717j:plain

The first topic was “Glancing through the Scope” by David-san. He was quite involved in our company’s data warehouse project. At one point, he was interested in analyzing the data to get some insights. By creating graphs of various attributes of the data, he discovered interesting insights.

Furthermore, David-san also formulated some essential questions in the process, such as “How do we provide value to our customers?”, “How do we measure those values?”, and “How are our customers using our services?”. He also added that we should use our data effectively in building our product. Hopefully, doing so will allow us to better understand the value we provide to our customers.

f:id:bagus-rahman:20170609155713j:plain

The second topic was “Ever-Evolving Threat Landscape” by Jeff Multz-san from SecureWorks. He has 14 years of experience under his belt, and SecureWorks itself is positioned in the Leaders quadrant of Gartner’s 2017 Magic Quadrant for Managed Security Services, Worldwide.

Jeff Multz-san explained SecureWorks' capabilities in solving security issues. SecureWorks provide managed security services, threat intelligence, security & risk consulting, incident response, and cloud security. In other words, SecureWorks helps organizations predict, prevent, detect, and respond to security issues. This is made possible by SecureWorks' intelligence-driven information security solutions.

Jeff Multz-san also taught us about Japan’s threat landscape. He named several factors that will potentially cause security issues in Japan, such as payment card industry, MyNumber, and Tokyo 2020.

Jeff Multz-san also shared some of his experiences in solving security issues in various organizations in Japan. He told some really good advices in this part, such as “It’s easier to keep attackers out than getting them out later” and “Be diligent; watch your networks 24/7/365”.

f:id:bagus-rahman:20170609155757j:plain

The third topic was “Using NFS via AWS Storage Gateway” by Okubo-san. AWS Storage Gateway is a service which connects on-premise software appliance with cloud-based storage. AWS Storage Gateway enables on-premises applications to seamlessly, securely, and transparently use storage in AWS cloud.

Since November 2016, AWS Storage Gateway has provided a file interface to objects in Amazon S3 buckets. This feature, now more commonly known as File Gateway, enables storing and retrieval of Amazon S3 objects through standard file storage protocols, such as NFS. In addition, since February 2017, AWS Storage Gateway has supported running File Gateway virtual machine in Amazon EC2.

Okubo-san had been investigating File Gateway to determine whether he can use it in the project he’s working on. File Gateway performs quite well. On the other hand, deploying File Gateway on Amazon EC2 requires the instance size to be at least xlarge. Furthermore, AWS hasn’t offered a redundancy solution for File Gateway. Despite these caveats, using File Gateway will indeed reduce cost. In fact, the cost reduction of using File Gateway is proportional to the storage size. Because of this advantage, Okubo-san is considering of using File Gateway in the project he’s working on.

f:id:bagus-rahman:20170609155828j:plain

The fourth topic was a report of Microsoft Build 2017 by Ogawa-san and Iskandar-san. Ogawa-san explained the highlights of the keynotes. Among the first day keynote topics, he was interested in implementations of Cognitive Services (AI for workplace safety and intelligent meetings) and Azure Cloud Shell and mobile portal. He also took note of other first day announcements, such as Visual Studio for Mac, Azure Database Migration Service, MySQL & PostgreSQL as a service, and many others.

Among the second day keynote topics, he was interested in Windows 10 Fall Creators Update, new apps on the Windows Store, and motion controllers for mixed reality. He also took note of other second day announcements, such as Story Remix, Fluent Design System, and OneDrive Files On-Demand, and many others.

Afterwards, Iskandar-san continued by introducing us to Azure services. Cognitive Services is a collection of APIs, SDKs, and services with which developers can easily add intelligent features into their applications. Bot Framework is a platform for building, connecting, testing, and deploying bots. In combination, Cognitive Services (such as LUIS) and Bot Framework can be utilized to develop an intelligent bot.

Iskandar-san also shared what he learned about IoT. Azure is providing IoT-related services such as IoT Edge, IoT Hub, Azure Stream Analytics. By attending Microsoft Build 2017, he was able to learn various use cases of these services. He also taught us about other important IoT concepts, such as IoT device lifecycle and IoT security.

f:id:bagus-rahman:20170609155909j:plain

The fifth topic was “Struggling with MongoDB” by Takahashi-san. MongoDB is used in the project he’s working on, for its performance, scalability, and flexibility. However, some performance issues were discovered, such as ones that are related to concurrency control.

All of this resulted in Takahashi-san searching for alternatives to MongoDB. He had investigated Google BigQuery, Amazon Elasticsearch Service, Amazon CloudSearch, and Amazon Athena, among others.

Interestingly, MongoDB had worthwhile improvements of its own. Acquiring WiredTiger allowed MongoDB to offer features such as document-level concurrency, data/index compression, and memory management. Therefore, Takahashi-san decided to stick with MongoDB and utilize those features.

f:id:bagus-rahman:20170609155943j:plain

The sixth topic was “JWT vs Goa” by Tanabe-san. This topic is a continuation of Shihan-san’s from the 32nd MTS, about utilizing Goa for APIs of HDE service that they are both working on. As Tanabe-san put it, Shihan-san’s topic left some homework. One of those homework was API authentication, especially using JSON Web Token (JWT).

JWT is an open standard of securely transmitting information between parties as a JSON object. Goa provides a security middleware for JWT. Unfortunately, it lacked some features that Tanabe-san needed, such as support for PS256 algorithm, support for service-to-service token without expiration, and support for role-based access control. Therefore, he decided to integrate his existing security middleware for JWT into Goa. He demonstrated the integration process and listed several issues that he would like to solve in the future.

f:id:bagus-rahman:20170609160009j:plain

As usual, we had a party afterwards :)

33rd Monthly Technical Session (MTS) Report

33rd Monthly Technical Session (MTS) was held on April 14th, 2017. MTS is a knowledge sharing event, in which HDE members present some topics and have QA sessions, both in English.

f:id:bagus-rahman:20170421122053j:plain

The moderator of the 33rd MTS was Michael-san.

f:id:bagus-rahman:20170421122435j:plain

The first topic was “AWS Service Update Summary 2017 Q1 (January - March)” by Mitsuharu Hamba-san from AWS. Recently, 5 new AWS services were introduced.

AWS Batch enables users to run batch computing jobs on AWS. AWS Batch provisions resources based on the requirement of batch jobs. Users don’t need to do provisioning tasks, such as managing servers or installing batch computing software, by themselves.

Amazon Cloud Directory is a directory store in AWS. Unlike traditional directory solutions, Amazon Cloud Directory allows users to create directories with hierarchies that span multiple dimensions. However, Amazon Cloud Directory is not a directory service for IT administrators who want to manage or migrate their directory infrastructure. Amazon Cloud Directory is a directory store first and foremost, and it is not designed to support some features their directory does, such as authentication and policy frameworks.

Amazon Chime is a communications service. Amazon Chime supports online meeting, video conference, call, chat, and content sharing, both inside and outside an organization. Amazon Chime is secure and works seamlessly across Android, iOS, Mac, and Windows devices.

AWS Organizations enables policy-based management for multiple AWS accounts. Furthermore, with AWS Organizations, users can control access to AWS services, automate AWS account creation and management, and consolidate billing across multiple AWS accounts.

Amazon Connect is a self-service, cloud-based contact center service. Amazon Connect is based on the same contact center technology used by Amazon. With Amazon Connect, users can set up a cloud-based contact center in minutes. Amazon Connect also makes it easy for users to design contact flows, manage agents, and track performance metrics.

Besides those new AWS services, Hamba-san also introduced various updates of the existing AWS services. He also invited us to participate in AWS Summit Tokyo 2017.

f:id:bagus-rahman:20170421122512j:plain

The second topic was “Try to Eliminate Toil with CodePipeline” by Doi-san. The book Site Reliability Engineering defines toil as the kind of work tied to running a production service that tends to be manual, repetitive, automatable, tactical, devoid of enduring value, and that scales linearly as a service grows.

Doi-san feels that there’s a toil in the deployment process of the project he’s working on. He needs to check every change in the infrastructure that he’s about to make. According to Doi-san, this process doesn’t have a well-defined procedure, is prone to human error, and wastes time.

AWS CodePipeline is a continuous integration and continuous delivery service with which users can model, visualize, and automate the steps required to release software. Furthermore, AWS CodePipeline also allows users to establish a consistent release process, incorporate AWS services and third-party tools into a pipeline, and others.

Doi-san had been interested in utilizing AWS CodePipeline for quite some time, and finally it was released in Tokyo region. He demonstrated how users can utilize AWS CodePipeline and showed us how the service changed the deployment process of the project he’s working on.

f:id:bagus-rahman:20170421122559j:plain

The third topic was “Let’s Try Azure” by Kodama-san. In the 32nd MTS, Mami Konishi-san and Drew Robinsons-san from Microsoft introduced Microsoft Azure to us. Afterwards, Kodama-san went ahead and prepared a Microsoft Azure environment for our development team.

Kodama-san explained Microsoft Azure hierarchy. From top to bottom, the hierarchy consists of Directory, Subscription, Resource Group, and Resource. Directory (Azure Active Directory) is where users are registered. Subscription is a billing unit. Resource Group is a container that holds related resources for an Azure solution. Resource is a manageable item that is available through Azure, such as VM, database, etc. The associations between the hierarchy elements are all one-to-many. For example, a Directory can be associated to multiple Subscriptions, but a Subscription must be associated to exactly one Directory. Kodama-san then proposed some rules regarding our Microsoft Azure hierarchy.

Kodama-san introduced some Microsoft Azure services, such as Azure Container Service and Cognitive Services. He then made a sample solution of analyzing logs using various Microsoft Azure services. He also recommended forums where members of our development team can ask questions about Microsoft Azure.

He concluded the session by reminding everyone of Microsoft Build 2017. There may be announcements about Microsoft Azure in the event.

f:id:bagus-rahman:20170421122640j:plain

The fourth topic was “Serverless HTML Form Using Customers Mail Cloud” by Chia-Chun-san. He was our Global Internship Program (GIP) participant. Serverless HTML Form is the application he had been working on during his internship. He implemented with the intentions of learning how to develop an application with serverless architecture, showing the extent of Customers Mail Cloud’s capabilities, and identifying the ways Customers Mail Cloud can be integrated with other cloud computing services.

There are several requirements of Serverless HTML Form. First, the application should have a static webpage, with which users will be able to send emails. Second, after a user sends an email, the application should send confirmation emails to the user and their manager. Third, the application should be serverless.

Chia-Chun-san actually implemented two versions of Serverless HTML Form. The first version worked well, but it had problems about email status. Even if an email couldn’t be sent (e.g. because of typos in the email address), Serverless HTML Form would still regard the email as being successfully sent. In other words, users couldn’t receive the email, and they wouldn’t be able to know its status (e.g. is still being sent, failed to be sent, is sent to the wrong address, etc.).

The second version solved this issue by utilizing Customers Mail Cloud’s features. The second version’s architecture consists of Amazon S3, Amazon API Gateway, AWS Lambda, Amazon DynamoDB, and Customers Mail Cloud. Chia-Chun-san also explained the second version’s workflow and message flow. He also shared some important things he had discovered during the second version’s implementation. Finally, he demonstrated how to utilize the second version of Serverless HTML Form.

f:id:bagus-rahman:20170421122728j:plain

As usual, we had a party afterwards :)

f:id:bagus-rahman:20170421122804j:plain

Designing APIs with Goa

Like most of the web services in the current software development trends, the service that our team is currently building is also based on the idea of microservice architecture using the Go programming language. Right now we have around 10, in theory, independently deployable services and these services are often communicating with each other using RESTful APIs with over 100 of HTTP endpoints. Also, we have a feeling that these numbers will keep increasing over time.

続きを読む

32nd Monthly Technical Session (MTS) Report

32nd Monthly Technical Session (MTS) was held on March 17th. MTS is a knowledge sharing event, in which HDE members present some topics and have QA sessions, both in English.

The moderator of the 32nd MTS was Kevin-san.

f:id:bagus-rahman:20170329182722j:plain

The first topic was ‘Microsoft Azure Overview’ by Mami Konishi-san and Drew Robinsons-san from Microsoft.

Konishi-san explained the current momentum of Microsoft Azure. These days, 90% of Fortune 500 companies use Microsoft Cloud. Each month, there are 120,000 new Azure customer subscriptions. Furthermore, there are currently 34 available Azure regions, with 4 others coming soon.

f:id:bagus-rahman:20170413151408j:plain

Robinsons-san demonstrated how to utilize Microsoft Azure to create an Ubuntu server. This task can be accomplished in several ways, the first of which is to utilize Azure portal. For people who prefer to work with terminals, Microsoft offers Bash on Windows and Azure CLI 2.0. Using these tools in combination with Azure Resource Manager gets the job done, but Robinsons-san introduced yet another approach. Besides running commands in the CLI, Azure Resource Manager also provides Azure Quickstart Templates, with which deploying Azure resources becomes simpler. There are quite a lot of templates already available on the GitHub repository.

He also explained other Azure services, such as DocumentDB, Azure Container Service, and Service Fabric. DocumentDB is Azure’s NoSQL service. By turning on protocol support for MongoDB, DocumentDB databases can even be used as the data store for apps written for MongoDB. Azure Container Service enables deployment and management of container-based applications on Microsoft Azure. Service Fabric is Azure’s microservices platform. Robinsons-san mentioned some of its features, namely its support of both stateless and stateful microservices, its tools for Visual Studio, and local cluster.

f:id:bagus-rahman:20170413151427j:plain

The second topic was ‘Introduction to Swagger for Amazon API Gateway’ by Furukawa-san. Swagger is a framework for designing, building, and documenting RESTful APIs. Swagger consists of the specification (currently known as OpenAPI Specification) and the tools that support it.

Amazon API Gateway allows us to export APIs as Swagger. We can then update the exported API definitions using tools such as Swagger Editor. Finally, we can import the updated API definitions back to API Gateway. By default, imports merge updates to the existing API definitions. However, imports can also be configured to overwrite existing API definitions. In utilizing Swagger for API Gateway, Furukawa-san was concerned about how Swagger supports environment-specific configurations (e.g. AWS account IDs and Lambda function ARNs) and certain aspects of API Gateway (e.g. API keys, usage plans, and custom domains).

f:id:bagus-rahman:20170329182823j:plain

The third topic was ‘How to Make a Secure Web Application’ by Okubo-san. He had wanted to talk about this because of the change in HDE’s business environment and ISMS utilisation. He also mentioned past incidents that happened to other companies, such as YouTube (2010), Sony (2011), and Twitter (2014).

Okubo-san were particularly concerned about several aspects that affected security, which are programming rules, framework, vulnerability-checking tools, and third-party verification. He recommended us to make programming rules based on a certain standard, such as this document by Information Technology Promotion Agency. Because human error happens often, he suggested us to not implement validators individually. Instead, those validators should be included in a framework that everybody uses. Identification of some vulnerabilities can be automated by using tools such as OWASP Zed Attack Proxy Project. Finally, we should also consider doing third-party verification, because it may help us discover vulnerabilities that we didn’t realise before.

f:id:bagus-rahman:20170329183312j:plain

The fourth topic was ‘Designing APIs in Go’ by Shihan-san. The HDE service he’s working on consists of 10 microservices with no less than 130 HTTP endpoints. Furthermore, in maintaining the APIs, the team needs to modify handler functions, update the client codes, update the API docs, the list goes on. This led him to Goa, a Framework for building microservices and REST APIs in Go. Goa generates a lot of things automatically; such as boilerplate, glue code, documentation (JSON schema / Swagger), CLI, JavaScript Library, Go Client, and others.

To him, the benefits of utilizing Goa are we can focus on writing codes that matter, Goa generates the boring stuff as idiomatic Go codes, it also helps us completing documentation, and Goa has a friendly community surrounding it. On the other hand, he was still not sure about how to utilize Goa in several aspects of his work, namely things related to JSON Web Tokens (JWT) and role-based access control (RBAC).

f:id:bagus-rahman:20170329183351j:plain

The fifth topic was ‘Data Science & Python’ by Aji-san. He is one of our Global Internship Program (GIP) participants. In very simple terms, data science is about extracting knowledge from data. This extraction process usually involves data collection, preparation (e.g. cleaning and transformation), and manipulation. Afterwards, we can obtain hypotheses from the data, namely by examining what affects the attributes and the relationship between attributes.

In regards to Python, there are a quite a lot of data science libraries available. Aji-san explained some of them, such as NumPy, pandas, and Seaborn. With NumPy, we can utilize N-dimensional arrays, among other things. Pandas is a data structure and analysis tool. Seaborn allows us to create better-looking plots. He felt that, compared to R, Python is easier to read, can be combined with other platforms/domains, and has more and better visualization choices. On the other hand, regarding data science, it is easier to find answers about R, since it’s more mature than Python in that aspect.

f:id:bagus-rahman:20170329183805j:plain

The sixth topic was ‘Introduction to systemd’ by Chiachun-san. He is the other one of our GIP participants. init is the first process started during booting of a computer system (PID = 1). Most of Linux distributions used SysV-style init (SysVinit). However, it is too old and has many drawbacks, one of them is that it starts tasks serially.

This is where systemd comes in. It is a system and service manager for Linux operating systems, and a full replacement of SysVinit. Chiachun-san highlighted some of its features, such as service dependencies definition, its own logging system, and service identification by utilizing cgroups. It was released in 2010, and today most of Linux distributions have switched to systemd as the default init system.

He also explained some systemd commands, systemctl and journalctl systemctl is used to control the systemd system and service manager. journalctl is used to query the systemd journal (its own logging system). He also showed some usage examples of systemctl and journalctl to do certain tasks.

f:id:bagus-rahman:20170329184004j:plain

The seventh topic was ‘PHP 7.1 is Fast (?)’ by Uzulla-san from builderscon. He specializes in PHP, has won best speaker award from many tech conferences, and is an author as well. He is also an organizer of tech conferences, one of which is builderscon.

PHP 7.1 was released on last December, and Uzulla-san was intrigued by the impression that it is fast. He then took it upon himself to benchmark the new version of PHP. In doing so, he utilized tools such as ab, httperf, and wrk. He said he wasn’t successful in achieving higher performances than existing benchmarks, but he’s pretty satisfied with his results.

f:id:bagus-rahman:20170329184030j:plain

As usual, we had a party afterwards :)

31st Monthly Technical Session (MTS) Report

31st Monthly Technical Session (MTS) was held on February 24th. MTS is a knowledge sharing event, in which HDE members present some topics and have QA sessions, both in English.

f:id:bagus-rahman:20170310164506j:plain

The moderator of the 31st MTS was Jeffrey-san.

f:id:bagus-rahman:20170310165747j:plain

The first topic was ‘Introduction of EBS’ New Feature' by Nagira-san. Attaching additional EBS volumes had always been hard for him, because he had had to stop the EC2 instance that the EBS volume was attached to. Fortunately, AWS provided an update which allows him to to increase volume size, adjust performance, or change the volume type while the volume is in use. In other words, now he doesn’t have to stop any EC2 instance when attaching additional EBS volumes. This makes his work easier and reduces downtime. Nagira-san also explained in detail the new way to attach additional EBS values.

f:id:bagus-rahman:20170310165821j:plain

The second topic was an explanation of an HDE service’s mobile UI, by Kevin-san. He began by reintroducing the service itself. Then, he talked about the technology stack, particularly about why he had chosen Riot as the Javascript framework. The reason was because it’s very small, component-based, has simple APIs, and its community is small but friendly. He proceeded by teaching us about the components of the mobile UI and what’s actually happening under the hood. He wrapped the session up by explaining his work’s performance, past challenges, and future works.

f:id:bagus-rahman:20170310165835j:plain

The third topic was ‘Backing Up DynamoDB Tables’ by Bagus. He began by talking about the recent events that made him look into the issue further. One strategy we can use to backup DynamoDB tables is to utilise AWS Data Pipeline. Data Pipeline is a service which allows us to automate the movement and transformation of data. Creating pipelines to backup DynamoDB tables is simple, because we can use templates. Via AWS console, we can easily create a pipeline that exports DynamoDB table to S3 and another pipeline that imports DynamoDB backup data from S3.

f:id:bagus-rahman:20170310165841j:plain

The fourth topic was ‘Things I Learned from IT Admins in Taiwan’ by Nakakomi-san. For almost half of last year, he was working in Taiwan. During that time, he noticed some differences between Japan and Taiwan in several aspects, such as employment culture, decision making, and concern of IT admins. He related these differences to HDE’s goal of becoming a world-class IT company. To achieve that goal, we need to think globally. Each country has their own culture, which affects the way the people think, which affects the solution that they need. By knowing more about other countries, we can adjust our solutions to suit their needs.

f:id:bagus-rahman:20170310165848j:plain

The fifth topic was ‘Introduction to Video Encoding’ by Michael-san. He began by explaining the terminologies related to video encoding, such as containers, codec, compression, and encoder. He continued by teaching us about compression and re-encoding effect. There’s always a tradeoff between file size and quality. According to Michael-san, the codec used and encoding parameters affects the result a lot. He also answered some frequently-asked questions regarding video encoding. He wrapped the session up by introducing a software he prefers to encode videos, FFmpeg.

f:id:bagus-rahman:20170310170003j:plain

The sixth topic was an in-depth explanation of an HDE service by Xudong-san. He began by explaining the feature he was working on and its requirements. There had been a previous implementation of the feature, but Xudong-san was requested to redesign it. The original design utilised EC2, while the redesign was to utilise AWS Lambda. The reason was, unlike EC2 instances, Lambda functions needs no maintenance. Furthermore, Lambda functions can also be cheaper than EC2 instances.

However, utilising Lambda functions also had its own problems. This was mainly because he was utilising Lambda functions for I/O-bound actions. He created a new design to solve this issue. This new design utilised two types of Lambda functions, consumer and controller. Controller functions invokes consumer functions, and consumer functions can also invoke other consumer functions. He also highlighted the limitations of AWS that he needed to consider during his implementation.

f:id:bagus-rahman:20170310170009j:plain

The seventh topic was ‘Airport Baggage Handling System’ by Kelvin-san. He is our current Global Internship Program (GIP) participant. Before his internship at HDE, he had had another internship, during which he worked for projects related to baggage tracking system at HKIA. Baggage handling system manages activities such as checking in baggage to unit load devices, transferring baggages to other flights, and baggage claiming. A good baggage handling system is reliable, handles numerous baggages at the same time, minimises transfer time, and is completely automatic.

Apparently, baggage mishandling is one of the most common issues in airports today. Among the usual causes of baggage mishandling are human error and damaged tags. Furthermore, almost half of lost luggage is due to transfer-related incidents. Kelvin-san explained one of the solutions to baggage mishandling, which is automatic RFID baggage tracking system. According to Kelvin-san, RFID has higher successful reading rate compared to barcode. Towards the end of the session, he explained various components of airport baggage handling system by describing their pictures.

f:id:bagus-rahman:20170310170015j:plain

The day of the 31st MTS was also the last day of Kelvin-san’s internship. We had a small event for him and gave him some souvenirs. In turn, he shared his impressions of his time working with us. Thank you very much for your contribution, Kelvin-san!

f:id:bagus-rahman:20170313214426j:plain

As usual, we had a party afterwards :)

f:id:bagus-rahman:20170313213926j:plain

30th Monthly Technical Session (MTS) Report

30th Monthly Technical Session (MTS) was held on January 27th. MTS is a knowledge sharing event, in which HDE members present some topics and have QA sessions, both in English.

f:id:bagus-rahman:20170214154813j:plain

The moderator of the 30th MTS was Jonas.

f:id:bagus-rahman:20170214155034j:plain

The first topic was ‘Introducing Yahoo! Pulsar: a Distributed Pub-Sub Messaging System’ by Okubo-san. Pub-Sub stands for publish-subscribe, a messaging pattern in software architecture. In this pattern, publishers don’t send messages directly to subscribers. According to Okubo-san, communication in pub-sub happens by utilising topics. Publishers send messages of certain topics, and subscribers receives messages of certain topics.

Pulsar is a distributed pub-sub messaging platform which is developed by Yahoo!. They have been using Pulsar since 2015, and recently the platform was made open source. Pulsar offers scalability, low latency, strong ordering and consistency guarantees, cloud service oriented design, and geo replication. Okubo-san continued by explaining Pulsar’s architecture and comparing it to other messaging platforms.

f:id:bagus-rahman:20170214155230j:plain

The second topic was a re-explanation of an internal service, by Matsuura-san. This time, the focus was how he solved a particular problem. In this service, there are AWS Lambda functions which access EC2 instances. Initially, Fabric was utilised by the Lambda functions to execute shell commands in the EC2 instances. However, using Fabric caused some problems, such as KeyboardInterrupt or Operation not permitted.

To solve this, he used Paramiko instead of Fabric. Using Paramiko is a bit more complicated than using Fabric though, as he needed to compile it on Amazon Linux, then include it in a Lambda function’s deployment package.

f:id:bagus-rahman:20170214155438j:plain

The third topic was an in-depth explanation of an HDE service, by Ogawa-san. He began by explaining one of the backend components of the service. Then, he continued by teaching us how he solved a problem regarding filename encoding of ZIP file format. According to Ogawa-san, we can do this in two ways. The first one is to utilise language encoding flag (general purpose bit 11). The second one is to utilise Info-ZIP’s unicode path extra field.

f:id:bagus-rahman:20170214155531j:plain

The fourth topic was an explanation of an HDE service’s new feature, by Iskandar-san. He began by briefly reintroducing the service itself. Then, he immediately proceeded to teach us everything about the new feature, such as its concept, its architecture, its development process, and other technical details. He also talked about the changes the new feature will bring, such as additions to the user interface and new use cases. He had even made a video which explains how the new feature will actually work once it is released.

f:id:bagus-rahman:20170214155640j:plain

The fifth topic was about Bitcoin and blockchain), by Kelvin-san. He is our current Global Internship Program (GIP) participant. He began by explaining what Bitcoin is, particularly by comparing it to the existing financial system. Then, he taught us blockchain, a database that serves as Bitcoin’s ledger. Blockchain is a distributed database maintaining a continuously-growing list of ordered records (blocks). Once a block is added to the chain, it cannot be modified anymore. Furthermore, since blockchain is distributed, every node in the network has the same blockchain. According to Kelvin-san, these specifications make blockchain secure.

f:id:bagus-rahman:20170214155755j:plain

As usual, we had a party afterwards :)

29th Monthly Technical Session (MTS) Report

29th Monthly Technical Session (MTS) was held on December 16th. MTS is a knowledge sharing event, in which HDE members present some topics and have QA sessions, both in English.

f:id:bagus-rahman:20161219201836j:plain

The moderator of the 29th MTS was Shihan.

The first topic was 'Global Internship Program (GIP) Annual Report 2016' by Yuri-san. She explained all that she had done in the past year, showed how much we had grown compared to the year before, and shared the lessons she learned along the way. She also talked about the future, specifically about the strategies she would like to try in the next year.

f:id:bagus-rahman:20161219203015j:plain

The second topic was 'Play with Favicon' by Shinohara-san. Favicons are websites' icons. We can see it all over our browsers, usually in tabs, bookmarks, address bar, history, etc. Shinohara-san explained how he implemented the Favicon of one of our services. He also showed some examples of dynamic favicons, one of which was a fully-functional Tetris game!

f:id:bagus-rahman:20170110181852j:plain

The third topic was a report of re:Invent 2016 by Arakawa-san and Okubo-san. As you may have already known, re:Invent is Amazon Web Services' global customer and partner conference, which is held annually. Arakawa-san explained in detail the session that impressed him the most, Tuesday Night Live with James Hamilton. He also talked about re:Invent Central, in which technologies developed by companies that sponsored re:Invent are exhibited.

f:id:bagus-rahman:20170110185410j:plain

On the other hand, Okubo-san shared about networking, experiences, and learning he had during the event. He told us how he got to exchange lots of business cards. He also showed some pictures of meals, venues, and learning sessions. The session that impressed him the most was How Netflix Achieves Email Delivery at Global Scale with Amazon SES.

f:id:bagus-rahman:20170111121408j:plain

The fourth topic was presented by David-san. He was one of our Global Internship Program (GIP) participants. He shared lots of lessons he had learned from his working experience so far. He specifically focused on the project management approaches he had tried before, such as stand up meetings, GitHub issues, and others. For each of those approaches, he explained both its advantages and disadvantages, and what he thought about it.

f:id:bagus-rahman:20170111124233j:plain

The fifth topic was 'An Introduction to WebRTC' by Alice-san. She was the other one of our GIP participants. WebRTC is the union of standards, protocols, and APIs which enables real-time communication between browsers. Advantages of WebRTC comes from its security, speed, voice and video engines, and the fact that it is open source and patent-free. She also explained WebRTC protocol stack and browser support.

f:id:bagus-rahman:20170111125221j:plain

The day of 29th MTS was also the last day of David-san's and Alice-san's internships. So, we had a small event for them, in which they got some souvenirs and shared their impression of the seven-week internship. Thank you very much for your good work, David-san and Alice-san! We're happy to have you with us.

f:id:bagus-rahman:20170111150518j:plain

As usual, we had a party afterwards.

f:id:bagus-rahman:20170111150114j:plain