kódrészlet kategória bejegyzései

jquery event handler in loop

Minden nap tanul az ember valami újat, ma pl. a következőt:

Ha van egy függvényünk, ami többször kiváltódhat, pl. az ablak átméretezése miatt, akkor NE abban rendeljünk hozzá pl. egy gombhoz eseménykezelést, mert 8-10-10000000 alkalommal is hozzárendelődik és ennyiszer ki is fog váltódni az esemény hatására.

pl.

$(function() {

    $(window).resize(function() { resize(); });

});

function resize() {

    $('#mybutton').click(function() { ... });

}

Ez rossz. Helyette:

$(function() {

   $('#mybutton').click(function() { ... });
   $(window).resize(function() { resize(); });

});

function resize() {
...
}

Nem okoz problémát.

android animationlistener loop

a következőt ne csináljuk, mert végtelen ciklusba fogunk lépni
don’t do this if you don’t want az infinite loop

SomeViewSubclass view = new SomeViewSubclass(this);
view.animate().alpha(0f).setDuration(1000).setListener(new Animator.AnimatorListener() {

   /* 
   the other 3 method of the AnimatorListener interface 
   a másik 3 AnimatorListener interface függvény
   */

   @Override
   public void onAnimationEnd(Animator animator) {
      /*
          do something you want
      */
      view.animate().alpha(1f).setDuration(1000);
   }

});

Mindenképpen kell egy setListener(null) hívás a második animálás végére, különben mindig be fogunk esni az onAnimationEnd függvénybe
You have to call a setListener(null) on the end of the expression, if you don’t, your onAnimationEnd function will be called forever

SomeViewSubclass view = new SomeViewSubclass(this);
view.animate().alpha(0f).setDuration(1000).setListener(new Animator.AnimatorListener() {

   /* 
   the other 3 method of the AnimatorListener interface 
   a másik 3 AnimatorListener interface függvény 
   */

   @Override
   public void onAnimationEnd(Animator animator) {
      /*
          do something you want
      */
      view.animate().alpha(1f).setDuration(1000).setListener(null);
   }

});

Saját Google Drive (Spreadsheet) függvények

Egyre nagyobb a szerelmem a Google, illetve a tiszteletem a kreativitásuk felé.
A napokban dolgoztam egy Drive táblázaton, amelyben többek között a következő oszlopok szerepeltek:

…|Érték (ez egy szám)|…|Teljesítve(Igen/Nem)|…

Egy cellába szerettem volna összeadni az összes olyan sorban szereplő értéket, ahol a teljesítve oszlopban Igen szerepelt. Valahogy nem fűllött a fogam egy ilyesmi megoldáshoz:

=SUM(IF(C2 == “Igen”,C4,0),IF(D2 == “Igen”, D4,0), …

ezért elkezdtem keresgélni a Google-n, hogy hogyan lehetne ezt az egészet egy ciklussal elintézni.

Az első elképzelésem helytelen volt, de rávezetett a megoldásra: a Google lehetővé teszi hogy JavaScript-ben saját függvényeket írjunk, amely a Drive dokumentumunk adataiból dolgozik.

Lássuk hogyan (én angolul használom a Drive-t, ezért a menük leírása is az angol nevükkel történik): először is válasszuk ki a Tools menüből a Script editor… menüpontot. Itt lehetőségünk nyílik egy projekttemplate választására, én a Spreadsheet-et választottam, mert erre volt szükségem. A Google generál nekünk egy ‘Hello World’ szintű scriptet, ami jó kiinduló alap a sajátunkhoz. Ezt némileg módosítva készítettem el én a sajátomat, mely a következőképpen néz ki:


function calculateFinishedCredits() {

  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

  var total = 0;
  
  for (var i = 0; i <= numRows - 1; i++) {
    if(values[i][4] == "Igen") total += values[i][2];
  }

  return total;

};

function onEdit() {

   refreshCell();

}

function refreshCell() {

  SpreadsheetApp.getActiveSheet().getRange('G9').setValue(calculateFinishedCredits());

}

Ja ja ja, egyszerű mint a faék, de a célnak most tökéletesen megfelelt és első rácsodálkozásként a Google Univerzum eme újabb lehetőségére tökéletes volt 😛 Azóta már írtam egy másik scriptet is és azt hiszem a kelléktár állandó részévé fog válni 🙂

Ami még hátravan: menjünk vissza a dokumentumunkba, válasszuk ki a Tools/Script manager lehetőséget és koppintsunk egyet a run-ra!

nandroid backupok kicsomagolása és felfedezése linux operációs rendszer alatt

Figyelem! A cikkben leírtak végrehajtásának egy részéhez alapfokú SQL ismeretekre van szükség!

Számtalanszor elmondtam már Én is, és nálam sokkal nagyobb szakértők is, hogy nagyon fontos nandroid mentést csinálni, mielőtt lecserélnénk a meglévő, már működő ROM-unkat. A nandroid mentés minden egyes partíció tartalmát lementi 1-1 .img kiterjesztésű fileba. Ezek a képfájlok mkyaffs2image formátumúak, így nem lehet őket egyszerűen megnyitni valamilyen képkezelő alkalmazással (pl. Daemon Toolssal) és kinyerni a tartalmukat.

Nekem jelenleg 12 nandroid mentés van felmásolva számítógépemre, köztük van az eredeti gyári ROM, néhány FLB-s mentés, sok Cyanogenes és egy pár olyan is, ami már használhatatlan (nem bootol be vele a készülék). Az ok, amiért ennek az egész eljárásnak utánanéztem, nagyon egyszerű: megváltozott egy ismerősöm telefonszáma, melyet az utolsó, még működőképes nandroid mentés nem tartalmazott, ami tartalmazta volna, az pedig használhatatlan volt (mint említettem, nem bootolt vele a készülék). Gondoltam utánanézek, mit is ment le a nandroid mentés, illetve milyen formában tárolja az adatokat.

Az első eszköz, amire szükségünk lesz az unyaffs, látogassuk meg a következő oldalt és töltsük le az unyaffs.h és unyaffs.c C forrásfájlokat. Amennyiben nem programoztunk még C nyelven, valószínűleg nincs fenn a gépünkön a gcc fordító, így tegyük most fel azt! Adjuk ki a következő parancsot egy konzolba (ha szükséges, használjuk a su vagy sudo parancsok valamelyikét):

apt-get install gcc

Ha ezt megtettük és végrehajtódott, másoljuk az unyaffs forrásfájljait, a nandroid mentés .img filejait ugyanarra a helyre. Adjuk ki a következő parancsot:

gcc -o unyaffs unyaffs.c

Ezzel lefordítottuk és futtatható állományt készítettünk az unyaffs-ból, amelyet mostmár használatba vehetünk. Csomagoljuk most ki a data.img-t, amely a felhasználói adatokat tartalmazza, a következő parancs kiadásával:

./unyaffs data.img

Az .img file tartalma kicsomagolódik az aktuális könyvtárba. Sok-sok mappát kapunk, txt,xml,dex,db fájlokat. Az első kettővel nem lehet problémátok, sima szövegszerkesztő programmal megnyitható és olvasható. A dex fájlokról itt többet is megtudhattok. Ami minket még érdekelhet, azok a db fájlok, melyek sqlite adatbázisok. Töltsünk le egy programot, amellyel megnyithatjuk ezeket, legyen ez most a Sqliteman. Töltsük le, telepítsük, majd nyissuk meg a programot.

Figyelem! Az elérési útvonalak egyénenként eltérhetnek! Nyissuk meg az Sqliteman-ban a következő elérési útvonalon található adatbázist:

/data/data/com.android.providers.contacts/databases/contacts2.db

Majd írjuk be a következő SQL lekérdezést:

select name,number from view_v1_phones;

És Voilá!, a kontaktjaink névvel és telefonszámmal. Remélem sikerült új ismerettel szolgálnom a Számotokra, turkáljatok merészen, hiszen ezek az adatok már nincsenek a készüléken, illetve az img file is ki van tömörítve, így azon változtatást nem végzünk.

Címke ,