Zxing duplicate entry problem

When I was trying to signing my apk which include embedded zxing barcode scanner , it was giving this error:

Error:Execution failed for task ‘:app:transformClassesWithJarMergingForRelease’.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/zxing/integration/android/IntentIntegrator.class

I have spent my last 5 hours to solve this. So finally I got why it happens. For some reasons or accidently I did put IntentIntegrator into libs.

intent integrator

And I did put “zxing-android-embedded” which include IntentIntegrator  into dependencies already. That is why it says duplication.

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile ('com.journeyapps:zxing-android-embedded:3.5.0')
...

Solution 1: delete IntentIntegrator   from libs folder.

Solution 1: remove “compile fileTree(include: [‘*.jar’], dir: ‘libs’)” line from dependencies

Örnek bir Cachemanager

Android’de öyle bir cachemaneger yazmak istiyorum ki:

  1. Varsa datayı Ram’den getirsin, yoksa dosyadan okuyup getirsin. Android’de bu dosya sharedpreferences isimli XML dosyasıdır. İlk olarak Ram’den getirsin ki dosyadan okuma işlemi ile bir zaman kaybı(overhead) olmasın. Tabi bunun için bu manager aracılığı ile Ram’de duran herşey dosyaya da yazılmalı.
  2. İkinci olarak bu data farklı class tiplerinde veya JSON tipinde olabilir. Bunun için dönüş tipleri ve alınan parametreler generic olmalı. Bu da Javada “T” ile sağlanır. Dosyaya yazılacak data string olabilir çünkü başka bir tip kabul etmiyor bunun için GSON parser kütüphanesini kullandım.

İşte kod:

import static com.yusuf.helpers.Helper.PREF_USERSESSION;

public class CacheManagerServiceData {

    private static CacheManagerServiceData mCacheManager;
    public  static ConcurrentHashMap<String, String> mGenericCache;

    public static synchronized CacheManagerServiceData getInstance() {
        if (mCacheManager == null)
            mCacheManager = new CacheManagerServiceData();
        return mCacheManager;
    }

    public CacheManagerServiceData() {
        if (mGenericCache == null) {
            mGenericCache = new ConcurrentHashMap<String, String>();
        }
        if (mSessionCache == null) {
            mSessionCache = new ConcurrentHashMap<String, Session>();
        }
    }

    public <T> void setGenericCache(Context _context, String name,T data)
    {
        String _dataString = new Gson().toJson(data);

        mGenericCache.put(name,_dataString);
        Helper.putPrefString(_context,name,_dataString);
    }

    public <T> T getGenericCache(Context _context, String name,Class<T> clazz)
    {
        T _session = new Gson().fromJson(mGenericCache.get(name),clazz);
        if(_session == null)
        {
            _session = new Gson().fromJson(Helper.getPrefString(_context,name),clazz);
        }
        return _session;
    }

    public static void dropAllCacheData() {
        if (mGenericCache != null)
        {
            mGenericCache.clear();
        }

        if (mSessionCache != null)
        {
            mSessionCache.clear();
        }
    }
}

Python Kurulumu

Eskiden Python 2.7 kullanırdım. Bu sefer Python 3.6 kullanacağım. Normalde Enviroment Variables path ayarları el ile yapılması gerkiyordu bu sefer Windows installer’da Add to path seçeneği var.

Bu arada bilgisayar 64 de olsa 32 bir kurun python şu adresten bakarak:

https://www.python.org/downloads/windows/

python 36 enviroment variables

Kurulum bitince muhtemelen python komutu ile yazdığınız scriptler komut satırından çalıştırabileceksiniz.

Şimdi Python pip yükleyelim.Pip python paketlerini yüklemeye yarıyor. Nodejs’deki npm gibi.

Önce https://pip.pypa.io/en/stable/installing/ adresine gidip https://bootstrap.pypa.io/get-pip.py python scriptini indirelim. Bilgisayarda “.py” uzantısı ile duran scripti komut satırından çalıştıralım.

get pip

Kurulumun herhangi bir aşamasında veya SIP , PyQt gibi kütüphaneleri yüklerken

No module named ‘sipconfig’ 

Alırsanız bütün paketleri ve python’ı 32 bit için kurun. Bilgisayarınız 64 bit bile olsa.

Seeing this on Windows x64 too. I saw that building sip is explicitly disabled for Win64 so it’s probably intended, and known not to work correctly.

Some Android Interview Questions

Diff with Broadcst Receiver and Services

Service: If you want to do something in background , this will be running always in background even if the application closed. You can create this in separate process and also you can give your service to other app if you want. Downloading any content or Music is good example

Broadcast Reciever: Usually system will send some info which can be recieved by your app if you would wish to ,by registering. And you can do something what you want when that thing happens by using onReceive method. Example is the system will send BroadcastReceiver when new sms arrives or Booting done

How does RecyclerView differ from listview

RecyclerView was created as a ListView improvement, so yes, you can create an attached list with ListView control, but using RecyclerView is easier as it:

  1. Reuses cells while scrolling up/down – this is possible with implementing View Holder in the listView adapter, but it was an optional thing, while in the RecycleView it’s the default way of writing adapter.Decouples list from its container – so you can put list items easily at run time in the different containers (linearLayout, gridLayout) with setting LayoutManager.

What is the use of /assets and/res/raw/ folders ?

What are the fragments? Describe there lifecycle methods

What is a PendingIntent?

Diff between AsyncTask and Thread class ?

Diff between Framelayout and Tablelayout ?

How is data stored in sharedpreferences ? What is the diffrence between commit() and apply() ? Which is recommended one ?

What is StateListDrawable ?

Diff between Oncreate(), onstart,onresume, ondestroy,onstop , onpause. When are they called during the lifecycle of an Activity ?

Diff between setflags and addflags on an intent object ?

Mention 2 ways to clear the back stack of Activity when Activity is called using intent

Diff between Linearlayout and relativelayout and Absolutelayout

Diff between Activty and AppcompatActivity?

Activity , AppcompantActivty, FragmentActivity and ActionBaractivity? How are they related ?

What is Android Support Library and why is it recommended ?

Name the seven imprtant lifecycle methods of an activity?

Barcode Scanner Embedding to Android

Bize bir barcode scanner lazım oldu. Ve bunu başka bir uygulamaya zıplamadan yapmak istiyoruz. Sağolsun bir ingiliz vatandaş güzel bir library hazırlamış.

https://github.com/zxing/zxing

Hatta kendi kütüphanesini kullanarak yazdığı uygulama da markette. Deneyip performansa bakılabilir.

https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=tr

Bu kütüphane şöyle çalışıyor: bu vatandaşın uygulaması yüklü ise telefonunuzda kütüphane aracılığı ile ona zıplayıp barcode scan edip sonuçları alıyorsunuz. Tabi biz bunu istemiyoruz.

Bunun üzerine başka bir vatandaş aynı istekler ile şöyle bir kütüphane yazmış.

https://github.com/journeyapps/zxing-android-embedded

Bu sayede scanner’ı kendi uygulamanıza gömüyorsunuz. Kurulum için ayrıntılar aşağıda:

1.   Build.gradle’daki en alt satırı ekledim.

  1. dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.3.1'
        compile 'com.android.support.constraint:constraint-layout:1.0.2'
        testCompile 'junit:junit:4.12'
        compile 'com.journeyapps:zxing-android-embedded:3.5.0'
    }

    2.IntentIntegrator ve IntentResult.java classlarını githubdan kendi projeme kopyaladım.

  2. 3. Buton ekledim layout dosyasına
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Scan Barcode"
        android:onClick="scanBarcode"/>
  3. 4.  activity’ye aşağıdaki kodları ekledim.
    public void scanBarcode(View view) {
        new IntentIntegrator(this).initiateScan();
    }
    
    // Get the results:
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

Android DFP usage

TR: DFP yani DoubleClick for Publishers Android’de nasıl kullanılır ; bundan değineceğim biraz. DFP ile anlaştığınız bir firmanın reklamlarını yayınlayabilirsiniz ya da kendi posterlerini yayınlayabilirsiniz. Bunun için DFP nin web arayüzü ile banner tanımlamalısınız önce.  Android tarafında java ve xml layout olarak 2 ayağı var.  Benim Activity den bir snippet aşağıdadır.

EN: DFP means DoubleClick for Publishers so today I am gonna explain a bit about it. You can use DFP for publishing your partners’ advertisements or your internal posters etc. To do that, you need to create your own banners by using DFP web user interfaces. In Android client side you need to do sth in Java, layout xml and string.xml.

My activity code snippet is below

AdSize customAdSize = new AdSize(619, 218);
PublisherAdView rightBottomAdView = (PublisherAdView) findViewById(R.id.rightBottomAdView); PublisherAdRequest adRequest = new PublisherAdRequest.Builder().addTestDevice("AE02661203110A06E7337759DFF15D20").build(); 
rightBottomAdView.setAdSizes(customAdSize); rightBottomAdView.loadAd(adRequest);

 

Android layout can be like this

<RelativeLayout
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="@color/fillColorHomeButton"
   android:layout_weight="1"
   android:orientation="horizontal" >

   <com.google.android.gms.ads.doubleclick.PublisherAdView
      android:id="@+id/rightBottomAdView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_alignParentBottom="true"
      ads:adSize="BANNER"
      ads:adUnitId="@string/banner_ad_unit_id">
   </com.google.android.gms.ads.doubleclick.PublisherAdView>

</RelativeLayout>

AS you can see  ads:adUnitId=”@string/banner_ad_unit_id” should be defined int string.xml like below

<string name="banner_ad_unit_id">/6499/example/banner</string>

This id belongs to Google actually. So if you want to use their sample banner logcat would  warn us when you run the project.

“Use AdRequest.Builder.addTestDevice(“EBA3F68D25E9C90F6CA8B0905F24FABC”) to get test ads on this device.”

That is why we already added below already

PublisherAdRequest.Builder().addTestDevice("AE02661203110A06E7337759DFF15D20").build();

Android uninstall adb

adb devices -l

list the devices with description

like this one “13110943202074         device product:h3digiturk model:h3digiturk device:v2stbBrand”

pm uninstall -k com.unlu.mobil

Smalltalk Programlama Dili ve popüler olmayan teknolojileri bilmememiz

Önce şunu okumanızı tavsiye ederim: https://talk.istanbulcoders.org/t/stakoverflow-gelistirici-anketi/1756

Haha ben Smalltalk’ı aramızda yaptığımız teknik geyikler sanıyordum ta ki şu yazıyı görene kadar: https://medium.com/smalltalk-talk/smalltalk-and-the-future-of-the-software-industry-3f69cac13e5a

TL;DR:
Çocuklara programlamayı öğretmek için geliştirilmiş OOP dili.


Smalltallk %67 oranında dünyada sevilmiş olmasını ve bizim pek bilmememizi(kendimden yola çıktım) “language barrier” e bağlıyorum. Tamam kimimizin ingilizcesi çok iyi: Türkçe okur gibi okuyup anlıyor kimisi biraz daha uğraşıp anlıyor… ama müthiş konforlu hissetmiyoruz.

Aynen Smalltalk gibi popüler olmayan teknolijilerde kaynaklar ingilizce olduğu için bizde pek yayılmıyor. Bu yüzden main stream ve arkadaşımdan öğrenebileceğim teknolojiler ile uğraşıyoruz hep. Bu yüzden herkes .NET çi diyip ırkçılık yapayım :smile:

Biraz daha Smalltalk istiyorum diyenler:
Xerox PARC’tan bir grup 40 yıl kadar önce tasarlanan pure OOP dili imiş Smalltalk. Bu araç programlama dili, hem IDE hem de tüm runtime altyapsını içeriyormuş. Bu yapı edit-test-debug aşamalarını bayağı kısaltmış.
Smalltalk’ın bir amacı da çocuklara programlamayı öğretmek imiş. Temelde kartpostala benzer bir mesajlaşma yapısına dayanıyormuş.
Onlarca yıl sonra Smalltalk mirası ile birkaç tane yeni dil geliştirilmiş. Web için geliştirilen Amber Amberde yazılan kodları javascript’e dönüştürüyor cross browser ve cross mobile platform çalıştığını iddia ediyor. Ve EmberJs ile bir alakası yok galiba.
JVM üzerinde çalışan smalltalk(Jython gibi yandan çarklı işler) ise Redline:
_”Redline Smalltalk is still a Smalltalk in that you can do everything at runtime, including adding methods to classes, generating and compiling code”

Android command line interface start Activity

My Android needs response from web services to setup menus and activities. And there are test and production services and theirs settings in menus. Here we go , if the app cant get response from web services I can’t go settings menu and change it to production or test by using user interface.

I found below commands to go settings activity.

adb devices

List of devices attached
41002fd644d7916f device

C:\WINDOWS\system32>adb shell
shell@tre3g:/ $ am start -n com.unlu.mobil/.PreferencesActivity

Encountered below error which require settings in Manifest to be solved.

(more…)