Categories
Java Software development Technology

Spring batch, Spring Scheduler, PCF

Reading Time: < 1 minute

Was experimenting running scheduled job on PCF. One natural choice is PCF scheduler, which comes with the Pivotal Web Services (PAAS). Googled around and found this example on DZone. The spring batch code is here. There was a small typo in the manifest.yaml,

path: build/libs/payment-processing-spring-batch-0.0.1-SNAPSHOT.jar
Note the snapshot.jar file name does not match what’s specified in the build.gradle file.

The correct file name is

spring-batch-job-0.0.1-SNAPSHOT.jar

The rest of the manifest.yml looks good, in fact I used the following options for my spring scheduler app manifest.

no-hostname: true
no-route: true
health-check-type: none

But PCF scheduler is not available in our environment. The Spring Scheduler is used instead. I followed this Get Started Guide from Spring. In my case I need to use Cron Expression, here is the code sample and here is the guide to cron expression.

Last but not least, in my case I need to send out email notification for the cron job conditionally. I used the java email code sample here.

======

Some PCF references

pivotal web serivce

cf login -a https://api.run.pivotal.io/

https://console.run.pivotal.io/tools

https://docs.pivotal.io/pcf-dev/index.html

cf login -a api.local.pcfdev.io --skip-ssl-validation

https://tanzu.vmware.com/tutorials/getting-started/local/deploy-the-sample-app

Categories
Software development Technology

How to generate a Lets encrypt SSL cert

Reading Time: < 1 minute

I followed the instruction here https://certbot.eff.org to get a free SSL cert for my website: (pretty cool, huh 🙂 (found it here)

To actually do it, I just go to the website: Scroll down a little, select the software and the system my website is running on, and it will generate all the command-lines for me, here is my link 🙂

There is one small glitch after the installation of ssl cert: that is in the wordpress, I need to set the home page from http to https.

Also, an older post Move WordPress from Share Hosting to DigitalOcean

Yet another post related to this. Btw, I noticed the ssl cert renews automatically.

Earlier: I summarized it on twitter.

Categories
Software development Technology

Couple agile tools

Reading Time: < 1 minute

Point Poker: free (accepts donation). A nice pointing tool, click start session, for collaborators: put in name, and join the session.

Fun Retro: there are free and non-free choices. The free ones are public. It’s a bit like Trello. For that matter, if someone likes to keep it private, I think Trello is a good alternative: just put in swimming lanes such as liked, learned, lacked, longed for and action items

scrumpoker-online

Categories
Career Software development Technology

Job search advice amid COVID-19 pandemic

Reading Time: 5 minutes

We are at unprecedented times, in terms of the pandemic, and the economy aftermath. The IT software dev job market is not impacted as much as some of the hard hit ones such as. travel and leisure, but nobody is also insulated when there is a typhoon. For example, locally here in St. Louis, Enterprise rent a car, the largest car rental company in the US and in the world, has laid off more than 2,000 people, IT division included. I recall about 10 years ago I wrote a post about job search, and I like to update it, amid the time change and this specific pandemic change.

Some obvious things

No onsite interviews, remote or video interview only these days. Zoom is the most popular choice, and for developers there are some white-boarding online software. Realtime white boarding is actually quite challenging, from my personal experience, on both ends. It also depends on the friendliness of the interviewer, some interviewers like to be “above the interviewee”, they give the problem, did not like to talk or give hints, and expect a quick answer right away. On the other hand, there are some other interviewers who are more open and friendly, and sometimes they will throw a dog bone to rescue. As interviewer I always try to be the former, as I personally have been in the receiving end of “bad interviewers”, and don’t like the experience. Once at an onsite interview (long time ago), a guy who maybe quite sharp, made this comment: it sounds like you did much better than the other guys came in earlier, they really don’t know what they were talking about. And at least you put up this and that, blah blah blah… is this a compliment? I guess my English is already good enough to appreciate the underlying tone there. On the other hand, I can always appreciate good / friendly interviewers, once (not in coding or white boarding) during an onsite interview, the interviewer saw my schedule and saw that I was stuck in the little room all day, he offered let’s talk a walk, and talk in the company cafeteria. It was year early / winter 2005 as I recall, in middle of New Jersey.

Websites

Below two the most popular websites now.

Indeed: note Indeed.com is No. 1 in terms of the number of jobs. I found my last job and current job via Indeed.com. This is mind boggling when you think about it. I am not sure whether it exists in 2010. It’a an aggregator website. A bit like Google for information search.

LinkedIn: linkedIn became more meaningful too, I got a job offer in my last round job search and the lead is from LinkedIn. Many companies now post jobs at LinkedIn. Besides the number of jobs, we all know LinkedIn is the top 1 place that recruiters congregate. And as I built profile at LinkedIn, I also received more unsolicited messages or requests from mostly recruiters or website SEO people. Most recently I decided to be more discreet on accepting recruiters request. Most recruiters are young enthusiastic people and I bet they send out things blindly. This brings to another point.

Also, stackoverflow has a job portal, and some of the jobs are looking good too.

Recruiters

I think recruiters are still useful, if we are more discreet and we ask what we want. I have some recruiters friends from both ends as well: job search, or candidate technical screen. And I keep in touch with them from time to time, as a part of relationship building. Sometimes this could be a simple “hi” when the recruiter is in the hallway or in the office. I do understand, on linkedIn, or via database, sometime some younger recruiters will cold call (the reason I pick up the reason was probably the call from number is an agency I know). And we need to keep things in perspective that’s a part of their job and paycheck too. Also keep in mind we live in a small world especially in the St. Louis IT job market, and sometimes the table can turn quickly. I recall seeing a former coworker at two separate places (and I remember he was not being nice to me 🙂 I don’t have grudges against him, but I just know I probably won’t use him as reference, and vice versa.

Code Test

Not white-boarding or pairing either remote or on spot, but something like hacker rank, or filtered.ai. Those are okay as they are usually not overly difficult, they are fair test in other words. There is some random ones, which is usually some problem a tech lead, an architect came up with. And some of those can be nasty. Once I spent 24 hours on a problem, and could not solve it. I solved it a day later. Also noted the behavior type questions on filtered.ai or company recruiting website. Those are easy ones to score points, so don’t waste the opportunities. Usually they let you re-do if the first recording does not look good. The coding test, if done properly, you can run the unit test on the editor and you know it’s failed or passed.

(Update 05-19-2020) There are a lot of online code playground or white boarding tools for code testing on the spot. Those are mostly collaboration tools, with some syntax highlighting. But it’s usually not as powerful as the hacker rank or filterer.ai as the latter ones usually have the build-tests, so basically you will know your code is good enough or not by passing those tests (tests are usually hidden though). Tools such as code labstack (Update: 03-01-2023 no longer available, here is alternatives programiz, and jdoodle) are still pretty useful. One thing I am not sure is how they manage the sessions. From interviewer (hiring side) point of view, it maybe helpful to give a heads up if a quick code test is expected so that the candidate is aware. I have seen candidate just bail out without even trying. I have been on the receiving end of this kind of test as well. Again the interviewers friendliness (more precisely helpfulness, do they just want to see the candidate fail, or they want to be as human as possible) varies. (sample java code question here). Also JavaScript code playground such as codepen.io (more links for codepen clock 1 mine and clock 2 Dan Abramov) and jsbin.com .

(10-31-2022) Found another website codio (may not be free), today I happened to use it for Python coding as I was helping a high school student on AP CS course (STEM focused high school in LA area, it seems they require AP CS as a course).

My javascript code samples.

Last but not least, problem solving questions. One example: Suppose we have 8 balls: one is heavier than the other 7, the other 7 are identical. Now we have one balance (or scale), and we can put balls on two sides to weigh and compare. Use as few attempts as possible, to find the heavy ball? A follow up question is, if we have 2 or 3 attempts, how many balls can we handle (again one heavy ball with many identical lighter balls). 

About me. Also you may read about my other post on related topic.

Also, please note this guide on job search. I haven’t read the whole thing but it appears good. Much longer than this blog. Last but not least, this post is a good read too (Helen Anderson @helenanders26).

The Science Behind Making Software Engineering Interviews Truly Predictive of Job Performance by Geoff Roberts.

Categories
Software development

GCP Cloud SQL hibernate issue

Reading Time: < 1 minute

It complains the table does not exist when in the data.sql we were trying to insert some data. Turns out the table did exist but the default table name was lower case, while we were using Upper case both in the data.sql and the java hibernate entity. The fix is to add one line in the application.properties file. Note this is a spring boot app. Also note the data.sql was used to load initial data in spring boot.

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

I found out about it as I first work around the issue by doing something like shown in this article. But I was thinking this was not right. I was able to find out once I connect to the cloud sql db via proxy. Also refer to this stackoverflow discussion. 

DROP TABLE IF EXISTS employee;

CREATE TABLE employee (
  empId VARCHAR(10) NOT NULL,
  empName VARCHAR(100) NOT NULL
);

Also Spring Data

Spring data REST reference: this is by default will be shown in the root of the website.

the key seems to be adding this in pom:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency>

Last but not least, to disable the end points or to show the available ends points for spring boot app, we can use actuator.

management.endpoints.web.exposure.include=mappings

We can show the end points at:

/actuator/mappings

Categories
Software development Technology

Java thread and interview questions

Reading Time: 2 minutes(Update 2026-04-11) Refer to this coding example at GitHub.

(Update 3 10-28-2020) Link to JoelOnSoftware

(Update 2  10-27-2020)

Java
1) What is the difference between and interface and an abstract class(pre Java 8)?
2) Name a design pattern you have used (or would like to use)?
3) How would you implement the Singleton Design Pattern?
4) Since Java 8, what is the preferred way to avoid an NPE?
5) What goes on the heap and what goes on the stack? What can you tell me about the Garbage Collector in java? Can you have memory leaks in java?

API development
1) Difference between SOAP and REST
2) Difference between REST and RESTful
3) What are the best practices that are to be followed while designing RESTful web services?
4) Some of the methods (verbs) in REST: 1) GET, POST, PUT, DELETE; 2) Is Post idempotent?
5) Describe some of the API management tools you used, for example, Swagger, Apigee etc?

Microservices Cloud environment (Azure, AWS or GCP)
1) What are some features of a Microservices architecture?
2) What is 12 factor application? List some of the factors and explain them.
3) What cloud providers did you use? What are their strength and weakness? Or some pain points?
4) What are some of the frameworks and tools you used for micro-services development?
5) How do you monitor the apps? Do you have any recommendations or best practice for logging and tracing?

Some devops and automation experience as well (i.e. Docker, Kubernetes)
1) Where did you deploy the micro-services you or your team developed? Or what is your deployment environment? Is it IAAS (infrastructure as a service), or PAAS (platform as a service)?
2) How do you deploy apps to the dev, test and production environment? Did you use any CI / CD tools?
3) What are the main steps in a pipeline build / deployment?
4) Have you done any automated testing / validation?
5) For cloud infrastructure build out, do you use the console (UI), command line or some kind of source code (yaml etc) as well as tools such as Terraform?

(Update 09-01-2020) Java 8

(baeldung) Introduction to Java 8 Streams

Lambda Expressions and Functional Interfaces: Tips and Best Practices

New Features in Java 8

GitHub (eugenp) :

Core Java 8

Core Java 8 (part 2)

Also:

Java 8 Features with Examples

Prominent Java 8 Features With Code Examples

(Update 05-19-2020) There are a lot of online code playground or white boarding tools for code testing on the spot.

(Original ) Hibernate map one to many (Vlad Mihalcea)

A collection of the posts I saw recently.

Java World
Introduction to Java threads (need to check the link?)

Java 101: Understanding Java threads, Part 1: Introducing threads and runnables

Others
Java Callable Future Example

Java – Multithreading

Java Thread Tutorial: Creating Threads and Multithreading in Java

Vaadin chat example
It needs multi session (thread) support when we need to use tabs to chat back and forth. The app description is here.

The annotation to support this: @VaadinSessionScope

Java interview questions
Placeholder: I still need to clean up the list below (to incorporate my recent interview experience).

aop
dependency injection
refactor
agile
test driven
code review (what to look)
static vs. final
interface
spring
hibernate

java generics

tree set vs hash set

tree map vs linked hash map
https://dzone.com/articles/hashmap-vs-treemap-vs

.equals() vs ==
https://www.journaldev.com/18302/java-string-equals

Elasticsearch 

Digitalocean installation

Get started

Categories
Software development

Javascript jasmine node.js and Alexa

Reading Time: 2 minutes

(Update 11-23-2023) It’s funny, I found out when I changed the mac input mode from English to Chinese (Pin’yin), and it messed up all the special symbols in the javscript code, double quotes, semi colon, bracket etc. It’s probably due to the difference between Ascii and Unicode.

(Update 10-14-2023) I messed up the folder name AWS lambda – the fix is to correct the folder name. I typed something like “oralce” instead of “oracle” for the folder name. Took me a while to find out. The error message says it could not find the index.mjs file which is usually the entry point for node.js app (including lambda function on AWS).

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'index'\nRequire stack:\n- /var/runtime/index.mjs",
  "stack": [
    "Runtime.ImportModuleError: Error: Cannot find module 'index'",
    "Require stack:",
    "- /var/runtime/index.mjs",
    "    at _loadUserApp (file:///var/runtime/index.mjs:997:17)",
    "    at async Object.load (file:///var/runtime/index.mjs:1032:21)",
    "    at async start (file:///var/runtime/index.mjs:1195:23)",
    "    at async file:///var/runtime/index.mjs:1201:1"
  ]
}

I encountered some other error too, and some of which includes traceback to my own code, which gives hints on what went wrong. Another tricky one is whether to include { in the import statement (When should I use curly braces for ES6 import?).

Another error from Oracle DB is it didn’t like the SQL with single quote, and at the same time the sql itself has a condition of =’1’. Put the slash before the single quote to escape the single quote before 1, in cloud 9, and cloud 9 automatically add double quote around the sql, and it seems solve the issue.

{
  "errorType": "Runtime.UserCodeSyntaxError",
  "errorMessage": "SyntaxError: Unexpected number",
  "stack": [
    "Runtime.UserCodeSyntaxError: SyntaxError: Unexpected number",
    "    at _loadUserApp (file:///var/runtime/index.mjs:1058:17)",
    "    at async Object.load (file:///var/runtime/index.mjs:1093:21)",
    "    at async start (file:///var/runtime/index.mjs:1256:23)",
    "    at async file:///var/runtime/index.mjs:1262:1"
  ]
}

(Update 12-22-2022)

The Modern JavaScript Tutorial

w3school

(Original 02-27-2019 below)

Alexa

Alexa Account Linking: 5 Steps to Seamlessly Link Your Alexa Skill to User Systems That Require Authentication (Sebastien Stormacq, done)

User Account Linking in Alexa with ASP.NET Web API (Heather Downing, Okta)

Linking Your Alexa Skill Securely with Okta (Jefferson Haw, Okta)

Account Linking : Amazon Alexa and ForgeRock OpenAM using OAuth2 Authorization grant (karthik, Medium)

How to set up Account Linking for Alexa with Auth0 and Jovo (Kaan Kilic, Jovo)

Build an Alexa Skill in Node.js with Jovo (Jan Konig, Jovo, done) : If a user responds with a name, the MyNameIsIntent is triggered. The code is shown below in index.js

Webhook.listen(port, () => {
console.info(`Local server listening on port ${port}.`);
});

Webhook.post(‘/webhook’, async (req, res) => {
await app.handle(new ExpressJS(req, res));
});

also, how to test the code in AWS Lamda…Click “Test” right next to the “Save” button and select “Alexa Start Session” as the event template…

Interaction-Based Authentication for Alexa Skills with Auth0 (Joao Angelo, Auth0)

Developing Alexa Skills Locally with Node.js: Account Linking Using OAuth (Juan Pablo Claude)

The Alexa Skills Kit SDK for Node.js helps you get a skill up and running quickly, letting you focus on skill logic instead of boilerplate code.

JavaScript
Node.js based testing (npm test)

jasmine official website

commonly used commands:
npm install –save-dev jasmine
npm init
npm test

Sample project can be seen here: (please contact me if the repository is private)

Also from Okta dev blogs:
Learn JavaScript in 2019 (David Neal)

Add Authentication to Your Vanilla JavaScript App in 20 Minutes (work in progress):

With ES6, async/await brings you added control over asynchronous programming by leveraging promises but in a synchronous way. You can use async/await to make your code cleaner while maintaining non-blocking operations. github

Note this post has some examples that uses angular as well.

Categories
Software development

Spring, Spring Boot, React and OAuth

Reading Time: 4 minutesBaeldung : A Comparison Between Spring and Spring Boot

Tutorials from Okta
Working in progress

Identity, Claims, Tokens – An OpenID Connect Primer, Part 1 of 3 (Micah Silverman, below 2 and 3, are also by Micah)

OIDC in Action – An OpenID Connect Primer, Part 2 of 3

What’s in a Token? – An OpenID Connect Primer, Part 3 of 3

Secure Service-to-Service Spring Microservices with HTTPS and OAuth 2.0 (Matt Raible) : some errors due to java certs

Completed

Build a Basic App with Spring Boot and JPA using PostgreSQL (Andrew Hughes): this example uses Springboot, postgres and Okta single page web app, groups / users and authorization server (default). It goes through a basic springboot app using postgres, before adding the auth (token) from okta. It’s a very good example of how we secure an end point as well as authenticating via user group (admin vs normal / everyday user). The OIDC debugger tool created by former Okta engineer Nate Barbettini is very slick too.

Secure a Spring Boot REST API with JSON Web Token Plus references to Angular integration (Nouhoun Y. Diarra) : a small typo: the health check URL should be http://localhost:8080/actuator/healthTutorial:

Develop Apps with Secure WebSockets in Java (Jimena Garbarino): 

Secure Reactive Microservices with Spring Cloud Gateway (Matt Raible) link to my github

A Quick Guide to Spring Boot Login Options (Andrew Hughes)

Easy Single Sign-On with Spring Boot and OAuth 2.0 (Micah Silverman): note the need for JDK 11 (I used Amazon JDK 11), and please remove the double quotes around claim name and re-type (copy paste does not work well from blog post to okta dev console)

Build Spring Microservices and Dockerize Them for Production by Raphael do Vale. As I was finishing up the regular part (the exercise before docker), the service discovery reminded me of Hashicorp Consul tutorial I followed along a while ago. Note this tutorial used Netflix Eureka which is a bit more cool than pure command lines from Consul / Vagrant 🙂 Note this for Docker (quote the tutorial): You must store the file school-ui.properties in the same folder specified on the volume mapping (in the example above, the relative folder ./config-data). This is also my first complete tutorial on Docker container running java web apps (on my local MacBook and Windows 10). In the past I followed tutorial that runs Chef as well as Tomcat / Jenkins on docker (GCP).

Build a Secure Notes Application with Kotlin, TypeScript, and Okta by Matt Raible. Note the last part also talked about how to push code to Pivotal Cloud Foundry and deploy the apps there. This is interesting as I have done the PCF 15 minutes tutorial in the past (and recently).

Bootiful Development with Spring Boot and React (Matt Raible at Okta): I followed this tutorial until the point that I get the basic beer list (in other words, I made both the basics of Spring Boot and React work). This is my very first venture into React, and I had to install “yarn” as well using brew install. In the process I had to upgrade the Xcode via command line.

Also: Use React and Spring Boot to Build a Simple CRUD App (Matt Raible at Okta): I made small mistake when initiating the project with Spring website: I copied / pasted the dependency frameworks, which seems does not have any effect when the pom.xml was created. So I added the dependencies manually.

			org.springframework.boot
			spring-boot-starter-web
		
		
			org.projectlombok
			lombok
			provided
		
		
			com.h2database
			h2
			runtime
		

Also in my Eclipse, I need to install Lombok manually by following instruction here. Note Matt did mentioned the IDE cannot recognize some of the Lombok things if there is no plugin. In the past I used to install Plugin via the menu inside Eclipse. I noticed “Whitelabel error” when I was hitting the end points: http://localhost:8080/api/groups/ (this is working as expected actually, before I add any JUG meeting to the list, as I don’t have access to the default list).

Last but not least: I need to make a small adjustment in GroupEdit.js sample code

'X-XSRF-TOKEN': this.state.csrfToken, (it was just csrfToken and Yarn did not like it)
Categories
iPhone app Software development Technology

Docker – second take

Reading Time: 3 minutes(Update 08-26-2020) Technically 3rd take. I was following along with the Google Cloud Storage ClamAV tutorial, and had an issue of not being able to connect to port 3310 on GCP. (Update 08-29-2020) It was solved. Some tips:

====

1) There were some typos: such as the directory related to the git project, as well as environment variable for the bucket (in couple places);

2) Need to run the below command before deploy: Assign bucket permissions before “gcloud app deploy” (as in section Create the malware-scanner service: step 5)

3) https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner/issues/1 (move the local variable out of the large bracket {})

4) https://github.com/GoogleCloudPlatform/docker-clamav-malware-scanner/pull/4 (the solution is to increase the memory footprint in the app.yaml file)

====

Last but not least, one does not have to delete the project, the quick way to save the money is just to turn off the app via app engine => settings => disable application.

I also looked around and found another ClamAV tutorial using Java. The second one worked for me locally. I was also able to put an image to the docker hub (using the code from the spring boot docker tutorial). I was able to push the docker image to pcf too. The one thing remaining is I had a 502 gateway issue when I test the end point (local was working fine; postman tip here). Actually later I was be able to make the GCP example (the node js example) work locally too. Now the next step is to make them work in a PCF or a GCP cloud environment (not just local).

(Update 02-04-2019) What Is Container Orchestration? (by Isaac Eldridge at New Relic).

I also followed along the Exploring Docker [1] – Getting Started by Traversy Media. I did make the node.js and MongoDB work on my local MacBook, but I could not make them working on my DigitalOcean droplet due to mismatch of Docker versions of “Docker Compose”, the root cause was the Ubuntu on my Droplet was a a bit old (14.0.4). I need to upgrade it to make the versions compatible.

Some more links for the Traversy Media docker-node-mongo example. Youtube video here. Github repo here.

Two more (TBD, or for references): Dockerize a Node.js app connected to MongoDb

Containerizing a Node.js Application for Development With Docker Compose

(Update 02-13-2018) So I found out today I have AWS bill of

$2.62 (mostly due to EC2 instances) today. This is due to the fact that I did fire up the VM as well as the docker swarm instances (total 9? maybe due to I ran the deploy script multiple times?) Anyway I fired up the instance last night, this evening I looked at the “instances” and looked at the bill, I know what happened. I still did not make the connection from outside to ec2 working though. For the time being, I “terminated” the docker swarm, and stopped AWS VM.

(Update 02-12-2018) I am also following the tutorial at Docker’s official website. I am at step 6 here. And right now, I am stuck in connecting to the AWS vm (was following this Docker guide): step 6 “docker node ls”. I did follow the steps to create docker credentials for AWS.

error during connect: Get https://192.168.99.102:32768/v1.35/nodes: http: server gave HTTP response to HTTPS client

Note this IP address looks like the local default machine: one thing I am not quite sure is how the local connects AWS

(Original 01-31-2018) I installed docker on my mac a while ago and did a simple tutorial. But I never had much chance to play with it until recently. After the training, esp. after I saw use docker container to host Tomcat, and then use Jenkins to startup Tomcat (build and deployment), this whole thing got me interested in docker again. Note I have been learning about docker contain and they seem to be the future deployment model for scalable mobile apps backend: e.g., I know the Robinhood app (the free stock trading app) is container based in the back.

Some resources I used to get started:
1) Youtube docker tutorials (11-18-2018: such as this one Demystify Docker; also noticed this one Docker for GCP. I will see if I can do the training exercise again I mentioned above).
2) Install docker or docker.io on Ubuntu (I have a digitalocean droplet / VM, and its OS is Utuntu);
3) Overcome the error message:
FATA[0000] Get http:///var/run/docker.sock/v1.17/version: dial unix /var/run/docker.sock

The answer is this:

The problem is that your user has not been added to the docker group.

Try:

sudo usermod -a -G docker
If you don’t want to log in/out from your current shell, run:

newgrp docker

Last but not least, install Jenkins on Ubuntu 14.04.

Other error messages (note I am on a Mac)
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (when I tried to run some docker command)

It seems the solution is
eval “$(docker-machine env default)”

References:

How To Remove Docker Images, Containers, and Volumes

Docker Usage

Part 1 — Virus Detection Service using ClamAV and Java

Part2 — Dockerized File Virus Detection Service using ClamAV and Spring Boot

Categories
iPhone app Software development Technology

How to root T-mobile Samsung Galaxy S3 SGH-T999

Reading Time: 2 minutesDid my first root of Android phone. I had two Android phones before, but I never rooted it. This time I had a need for root to add the Chinese language to a Samsung Galaxy S3. The specific model is T-mobile SGH-T999 (shown in the Download or Recovery mode, but the model number on the settings says AT&T model number, which caused some issue for me later down the road).

The main reason for doing this is to add Chinese language support. It looks like by reading the article we can only get it work by rooting. I also looked at another article on the language support that suggested both MoreLocale2 and Language Enabler. Tried MoreLocale2 first but it seems needing root. So I started looked at the root tutorial. Because of the “wrong” model number, initially I thought this is an at&t device (model number at&t samsung galaxy s3 i9300, and here is an tutorial for that). Note the two tutorials are similar (t-mobile root tutorial here), the main difference is the at&t one is more verbose, and it has a link to the mod5 file for the at&t model. The odin program did not work for me initially because I was using the latter mod5 file (mismatch between hardware and mod5).

After that mistake the device was stuck in the Download mode (link to get into the Download mode), and could not reboot. I googled I have to download a Samsung software to get it restored. There were other hiccup too, one being the device cannot connect to my Windows 7 laptop (a bit old HP elite book), even after I install the driver. Had to reboot to make sure they connect. Back to topic, I was able to root after I switched to the mod5 file for t-mobile device. And it worked like a charm. After that I installed the rootCheck and SuperSu app from the Play store.

After the root, reboot I installed the Language Enabler app by Wanam from Google Play store (again refer to the language article above).

Final impression: the Samsung s3 is a relatively old device by today’s standard, but it works as a basic smartphone and adding the Chinese language to it, in my specific case, could potentially save an iPhone purchase (SE starts at about $400 in the states). It just takes some work to get it work, from enabling the developer mode/USB debugging on the device, to the odin software root.

Happy rooting 🙂