Posts by Chang Park

Deprecated APIs



  • As Android Versions keep being updated, many APIs and their methods are being revised.
  • Even though those API’s methods get deprecated, developers can still use the methods. (but they will see compiler’s warning)
  • However, developers are discouraged to keep using these methods because it is dangerous or there is better alternatives.





Multi Core vs. Hyper-threading


Multi Core

  • Provides multiple cores in CPU.
  • Dual-core can run two different processes at a time. (quad-core = 4 cores = 4 processes at a time)



  • Make one physical processing unit to two logical processing units.
  • Little bit of cheat to make it looks like two different processing unit.
  • Keep switching between two tasks, but actually one at a time.
  • Even though divided logically, CPU with hyper-threading performs better than CPU without hyper-threading.



  • i5: 4 cores without hyper-threading => 4 processing units
  • i7: 4 cores with hyper-threading => 8 processing units(logically)




Diagrams are from UB CSE421 lecture slides (Professor: Karthik Dantu)



FDMA (Frequency Division Multiple Access)

  • Vary frequencies for each user.
  • If number of users increases, it becomes complicated.

TDMA (Time Division Multiple Access)

  • Using same frequency, divide into many time slots.
  • Allocating different time slot for each user.
  • They can speak only when their turns.

CDMA (Code Division Multiple Access)

  • Each pair communicates in different languages.
  • The mobile and base station are able to distinguish between signals transmitted simultaneously over the same frequency allocation.

Bandwidth and Frequency


Bandwidth (bps – bits per second)

  • Amount of data that can be transmitted in per unit time.
  • Difference between highest frequency and lowest frequency (bandwidth = high – low)

Frequency (Hertz)

  • Number of complete cycles per second.
    • ex) 60Hz = 60 cycles per second


  • Low Frequency Wave
    • There are many frequencies already being used by other appliances such as microwave ovens(causes interferences).
    • Small bandwidth: There is no much space not being used around it.
    • Too crowded these days.
    • Covers farther distance
    • Low speed
    • ex) Wifi (2.4GHz or 5 GHz)
  • High Frequency Wave
    • Large bandwidth: There is a lot of space not being used around it.
    • Covers short distance
    • High speed
    • ex) Millimeter Wave (60GHz)


Latency vs. Jitter

Screen Shot 2017-09-26 at 11.18.26 PM


  • Amount of time it takes for a packet to travel from point A to point B(or round-trip).
    • ex) Data Latency: time between a query and the result displaying on the screen.


  • Variance in latency over time
  • If every packet takes exactly the same amout of time to travle from A to B, there is no jitter.

4 ways to handle button click


1. New OnClickListener in  setOnClickListener’s parameter

public class MainActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {

        Button b = (Button) findViewById(;
        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Log.d("BG","1st way handling button click");


2. Inner class OnClickListener

public class MainActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {

        Button b = (Button) findViewById(;


    private View.OnClickListener buttonListener = new View.OnClickListener() {
        public void onClick(View v) {
            Log.d("BG","2nd way handling button click");

3. Implements OnClickListener interface & override onClick()

public class MainActivity extends Activity implements View.OnClickListener {

    protected void onCreate(Bundle savedInstanceState) {

        Button b = (Button) findViewById(;

    public void onClick(View view) {
                Log.d("BG","3rd way handling button click");

4. Assign method at onClick attribute in layout file.

Activity class

public class MainActivity extends Activity implements View.OnClickListener {

    protected void onCreate(Bundle savedInstanceState) {
    public void buttonClick(View view) {
        Log.d("BG","4th way handling button click");

layout file

    android:onClick="buttonClick" />


Useful Git tips


Apply .gitignore on already pushed repository

$ git rm -r --cached .
$ git add .
$ git commit -m '.gitignore applied'


Disconnect local repository from remote

$ git remote rm origin


Reset to specific commit

$ git reset --hard &lt;commit&gt;


Remove all untracked files and directories

$ git clean -f -d


Install submodules in .gitmodules

$ git submodule update --init --recursive



vi Find & Replace





  • [%]
    • All lines in the file.
  • [1,30]
    • line 1 to 30
  • [5,$]
    • line 5 to last line


  • This can be plain text and also regular expression. Combining regular expression and this command, replacing words in vi, will be powerful.
  • \<pattern\>
    • This will get the exact match, not all contained word.
This is his bag

: %s/his/her/g
=> Ther is her bag

Above command changes This also because it contains “his”.

This is his bag

: %s/\<his\>/her/g
=> This is her bag



  • [C]
    • Confirm each substitution
  • [g]
    • Replace all occurrence in the line
    • If you don’t put, default is just replacing first occurrence.
  • [i]
    • Ignore case for the pattern


  • Do substitution in N lines from the current position of the cursor
 :s/hi/hello/g 4 

This means change all hi to hello in 4 lines from current line.


malloc( ) and free( )


malloc() and free()

  • allocates the requested memory and returns a pointer to it. (Dynamic memory allocation)
  • should #include<stdlib.h>
  • void *malloc(# of bytes): the function returns address of the memory.
  • void free(current_storage_pointer): de-allocate it to prevent memory leakage.




int main(){
   int *p;
   p =(int *) malloc(sizeof(int));
      puts("Failed to allocate memory!");
      *p = 20;

Example (Array)

int main(){
   int size;
   printf("Enter the size of the array: ");
   scanf("%d", &size);
   int *a;
   a = (int *)malloc(size * sizeof(int));
   printf("\nEnter the values of the array: ");
   int i;
   for(i = 0; i < size; i++){
      scanf("%d", &a[i]);
   printf("\nThe values in the array are: \n");
   for(i = 0; i < size; i++){
      printf("%d\t", a[i]);




  • most popular custom ROM for Android devices
  • Android Mobile Operating system-based Open Source Firmware for smartphones and tablet devices.

Why you should install CyanogenMod

  1. CyanogenMod provides you with an up-to-date version of Android. It’s also a pure, stock Android experience. If it supports your device, it will provide you with a pure, up-to-date Android experience. It’s a way to revitalize old Android devices that manufacturers are no longer updating.
  2. Privacy Guard lets you control which permissions installed apps can use, and which permissions new apps will get by default. This gives you an iOS-style permission experience on Android, so you can decide whether that app should be allowed to access your location, contacts, and other private data while still using the app.
  3. The Superuser screen integrates root permissions into Android’s Settings screen. This interface functions as a traditional way to allow and disallow superuser requests from apps, but it also allows you to enable root or disable it for your entire device.screen-shot-2016-10-02-at-6-45-38-pm
  4. The Themes panel allows you to install and choose theme packs, styles, icons, fonts, sound packs, and even boot animations to customize your device.screen-shot-2016-10-02-at-6-45-20-pm
  5. The Interface settings screen is packed with options. You can tweak the status bar, quick settings panel, notification drawer, and navigation bar. For example, you could reorder the buttons on the navigation bar at the bottom of your screen, or rearrange the order of the tiles in the quick settings panel.
  6. The DSP Manager app provides system-wide equalizer controls you can use to adjust the sound coming from your device, enabling bass boost, activating an equalizer, and selecting presets that match the music you listen to.
  7. Use the Buttons screen to control what your device’s buttons do. For example, you could long-press the volume buttons to switch music tracks. This is a great solution for skipping between songs without pulling your phone out of your pocket if you don’t have a headphone cable with an integrated remote.
  8. CyanogenMod includes profiles, which you can find under Settings > Profiles or by long-pressing the power button and tapping the Profile option. Profiles are groups of settings.



  • Read Only Memory. It usually describes a piece of hardware, a memory chip that you normally can’t write to. Device manufacturers will typically use ROM to store the OS to help ensure the devices maintains a known state and is thus more reliable and easier to support.
  • pre-packaged OS with certain features added or removed, compared to the stock OS