niedziela, 28 czerwca 2015

Introduction to Big Data with Apache Spark - Week 4 and Week 5 - i czy potrzebne są certyfikaty

Kurs jest oficjalnie zakończony. Ostatnie dwa tygodnie w końcu wzniosły się ponad mechaniczne przetasowywanie zbiorów RDD i było kilka problemów, które można już określić mianem "inteligentnych".

Zanim jednak do tego przejdziemy i zanim zobaczymy jakikolwiek kod - kwestia certyfikatów - a w zasadzie rozmów o certyfikatach...

Toksyczny monopol na ocenianie i dlaczego "lans" to twoja tarcza nadzei

Certyfikaty to czasem temat groteskowy - rozdawane są po jednodniowych "szkoleniach miękkich" gdzie uczestnicy rysowali koła na tablicy i udawali zwierzęta. Certyfikat dostaje każdy kto wysiedzi 8 godzin (a czasem nawet ci, którzy nigdy tam nie było). Ktoś kto szczyci się takim dokumentem ryzykuje wystawienie sam siebie na z deczka ośmiesznie.

Inna para kaloszy to czasem nie pozbawione podstaw wątpliwości czy za certyfikatem naprawdę stoi wiedza i jeśli stoi to czemu zasłaniasz się certyfiaktem? Do tego jeszcze wrócimy bo jak to w życiu inżyniera "to zależy" - więc najpierw druga strona medalu:

Ludzie rozmawiający na dany temat

Generalnie koncept klucz w tej sprawie to : "Ludzie, którzy potrafią rozmawiać na dany temat".

O co dokładnie chodzi? Najpierw przykład własny.Dawno dawno temu gdy filmy trzymało się na płytach CD a ze stron atakowały animowane gify (a strony oglądało się w kafejkach bo nikt nie miał wtedy jeszcze internetu) - byłem "hakerem" - wysłałem kilka anonimowych maili przez telnet oraz poinstalowałem netbusa pod windows 95 ludziom na pracowni aby wyświetlić im na pulpicie zdjęcia gołych lasek akurat gdy przechodził nauczyciel.

To stadium jest doskonale zdefiniowane i nazywa się --> https://pl.wikipedia.org/wiki/Script_kiddie. Pamiętam, że używaliśmy takich słów jak "exploit" czy "socjotechnika". Przychodziliśmy do wspomnianych kafejek i zgrywaliśmy skrypty, które coś tam robiły. Z tego co wiem kafejki miały obrazy windows i po każdej nocy wgrywały system na nowo bo to było szybsze niż usuwanie wszystkich wirusów.Rozmawialiśmy o tych skryptach, i tam były jakieś  żargony, których nie pamiętam i być może dla niektórych naprawdę brzmieliśmy jak hakerzy.

Generlanei byliśmy dupa a nie hakerzy ale umieliśmy rozmawiać o "hakowaniu".

Podobnie można umieć rozmawiać o innym dowolnym temacie - wybierzmy coś sobie http://www.pocket-lint.com/news/132235-tech-jargon-for-2015-an-a-to-z-of-the-new-buzzwords-to-learn-this-year .

Nie licząc epickiego źródła buzzwordów jakim stał się Agile to chyba ostatnio bardzo popularne może być słowo "Cloud".

Ludzie rozmawiający o "chmurze"

Pamiętam jeszcze na początku 2013 jadąc samochodem słuchałęm 5 minutowy wywiad jakiejś babki opisującej windows azure i przez całe 5 minut w zasadzie przewijały się słowa "chmura","efektywnosć","skalowanie" ," jeszcze raz efektywnosć" , "data center", "wyzwania" i na koniec "efektywność".

Ona naprawdę umiała "rozmawiać o chmurze".

I teraz ktoś kto ma dużo pieniędzy a nie ma wiedzy technicznej może słuchać takiej osoby i dojść do wniosku "brzmi jakby się znała". Wyśle drugą osobę operującą podobnym zestawem słów i oni się wzajemnie dogadują bez głębszego wnikania o co tak naprawdę chodzi. W końcu gdzieś musi pojawić się jakiś człowiek, który będzie wiedział o co w tym wszystkim chodzi. ALE....

Na arenę wchodzi nauka o nazwie Kognitywistyka, która niesie ze sobą dosyć smutne wieści - otóż ludzie nie oceniają innych zbyt obiektywnie, mamy tzw. zmysły i one nie działają tak jak myślimy - w skutek czego osoba, która uzna za rozmowę osób które "rozmawiają o X" za bełkot może sprawić tzw "negatywne wrażenie" jeśli nieopacznie da upust swojej frustracji lub nieodpowiedzialnie będzie chciała ukazać rzeczy takimi jakie są....

A jest taki certyfikat, papier na stół, nerwów mniej bo z założenia ten papier udowadnia umiejętność "rozmawiania o" a osoby, które "rozmawiają o" zazwyczaj nie posiadają odpowiedniej wiedzy by określić istotę wiedzy stojąca za certyfikatem.

Ludzie którzy robią

Czyli certyfikat pomaga tak? No niekoniecznie bo teraz zaczyna się ciekawa gra. Co gdy po drugiej stronie jest jednak osoba, która rozumie. Ponieważ ona "ogólnie rozumie" wiec rozumie też, że certyfikat oznacza kombinację "pewnej teorii+skońćzonej liczby podejsć do egzaminu".

Teoria jest bardzo potrzebna i moim zdaniem jest niezbędnym uzupełnieniem praktyki ale sama teoria bez praktyki nie wystawi nas na obcowanie z takim kodem jak poniżej - (uwaga długie)

 def savePartition(
        url: String,
        table: String,
        iterator: Iterator[Row],
        rddSchema: StructType,
        nullTypes: Array[Int],
        properties: Properties): Iterator[Byte] = {
      val conn = DriverManager.getConnection(url, properties)
      var committed = false
      try {
        conn.setAutoCommit(false) // Everything in the same db transaction.
        val stmt = insertStatement(conn, table, rddSchema)
        try {
          while (iterator.hasNext) {
            val row = iterator.next()
            val numFields = rddSchema.fields.length
            var i = 0
            while (i < numFields) {
              if (row.isNullAt(i)) {
                stmt.setNull(i + 1, nullTypes(i))
              } else {
                rddSchema.fields(i).dataType match {
                  case IntegerType => stmt.setInt(i + 1, row.getInt(i))
                  case LongType => stmt.setLong(i + 1, row.getLong(i))
                  case DoubleType => stmt.setDouble(i + 1, row.getDouble(i))
                  case FloatType => stmt.setFloat(i + 1, row.getFloat(i))
                  case ShortType => stmt.setInt(i + 1, row.getShort(i))
                  case ByteType => stmt.setInt(i + 1, row.getByte(i))
                  case BooleanType => stmt.setBoolean(i + 1, row.getBoolean(i))
                  case StringType => stmt.setString(i + 1, row.getString(i))
                  case BinaryType => stmt.setBytes(i + 1, row.getAs[Array[Byte]](i))
                  case TimestampType => stmt.setTimestamp(i + 1, row.getAs[java.sql.Timestamp](i))
                  case DateType => stmt.setDate(i + 1, row.getAs[java.sql.Date](i))
                  case DecimalType.Unlimited => stmt.setBigDecimal(i + 1,
                      row.getAs[java.math.BigDecimal](i))
                  case _ => throw new IllegalArgumentException(
                      s"Can't translate non-null value for field $i")
                }
              }
              i = i + 1
            }
            stmt.executeUpdate()
          }
        } finally {
          stmt.close()
        }
        conn.commit()
        committed = true
      } finally {
        if (!committed) {
          // The stage must fail.  We got here through an exception path, so
          // let the exception through unless rollback() or close() want to
          // tell the user about another problem.
          conn.rollback()
          conn.close()
        } else {
          // The stage must succeed.  We cannot propagate any exception close() might throw.
          try {
            conn.close()
          } catch {
            case e: Exception => logWarning("Transaction succeeded, but closing failed", e)
          }
        }
      }
      Array[Byte]().iterator
    }
Jest to kawałek kodu sparka zapisujący dane do bazy. Trzeba było sprawdzić co się tam dzieje bo w pracy nie działało to jak powinno.

I teraz jak ktoś bardzo chwali się certyfikatem a osoba po drugiej stronie jest kumata to może pomyśleć "czy ty naprawdę nie reprezentujesz sobą nic lepszego, że chwalisz się certyfikatami?" To tak jak wpadać do klubu i chwalić się przy barze, że w październiku ktoś wchodzi w drugi próg podatkowy.

Oczywiście można tak to zaaranżować, ze np. niby wyciągając z kieszeni zdjęcia z wycieczki do głodujacych dzieci w afryce wypadną przypadkowo z tej samej kieszeni kluczyki do mercedesa ale generalnie lepszym podejściem wydaje się : "don't try to cheat the system son!" - w sensie uwolnij się z myślenia magicznej pigułki które gloryfikuje osiąganie celów najmniejszym wysiłkiem (tak wiem że użyłem korposłowa słowa "cel").

O co chodzi? Np. można robić kurs online i naprawdę łatwo oszukać by go zaliczyć szukając odpowiedzi tu i tam ale gdyby tak jednak się przyłożyć i wartością była zdobyta wiedza a certyfikat pojawia się na chwilę w tle gdy z tego a nie innego powodu ktoś akurat potrzebuje jakiegoś udokumentowania wiedzy, która jest bądź co bądź "efemeryczna" (czyli niefizyczna)?

Dygresja

A z drugiej strony się zastanawiam czy nie zostać konsultantem zarządzania - wpadnę wyliczę, ze mówienie do siebie per team, stawanie w kole zamiast w rąbie i kolorowanie tasków an czerwono zwiększy "efektywność" o 23% i pojadę sobie za zarobione pieniądze w góry stołowe.

Ludzie zniszczeni przez system

Do głowy przychodzi mi jeszcze jedna kategoria - Ludzie zniszczeni przez system. Oni rozumieją czym są certyfikaty ...i próbowali to kiedyś wytłumaczyć ...i dostali 220 prosto w jaja...i się przewrócili na minę... i teraz mają po prostu napisane "zatrudnić 3 risorsy z certyfikatem w wkrecaniu żarówek" ...i chcą to zrobić ...i chcą już iść do domu... i walić wódę... i płakać. Nie ma co z góry osądzać ludzi.

Patrzysz nie w tę stronę

Może zamiast patrzeć na zewnątrz i szukać odpowiedzi na pytanie "kim być dla innych" zadaj sobie pytanie "kim być dla siebie"? Lubisz robić certyfikaty to je rób, nie lubisz to nie rób - to nie atakuje niczyjej strefy osobistej czy jak to się nazywa to pierdol co kto o tobie myśli w tym temacie. Masa osób dogorywa na fejsbuku dokarmiając się lajkami i udając życie w grach komputerowych także jak zdobywanie odznak motywuje cię do nauki - rób to!!!

Także tu jest mój certyfikat:
Tyle że to nie certyfikat a wyniki ćwiczeń bo certyfikat wydrukują za tydzień jak się kurs skończy - a jak nie wydrukują to go sobie sam anrysuję - BO TAK MI SIĘ CHCE!


Dygresja

czy uczyć się dla ocen czy dla wiedzy, oczywiście, ze ku*wa dla wiedzy ale wasz mózg jest tak skonstruowany, że jak będziecie się uczyli dla wiedzy a przy okazji chwalili ocenami to teoretycznie mechanizm nagrody w waszym mózgu wybierze dalszą nauke zamiast strzałów dopaminy za lajki na fejsie po wklejeniu jakiegoś obrazka z demotywatorów

Ten ma aż cztery certyfikaty :

A teraz coś z sensem - week 4

Było to :https://pl.wikipedia.org/wiki/TFIDF . Generalnie czas zainwestowany swego czasu w mahout --> http://pawelwlodarski.blogspot.com/2013/01/mahout-machine-learning-nie-tylko-dla.html bardzo się przydał by to zrozumieć. Jednak opłacało się uczyć czegoś innego aniżeli tylko kolejnych narzędzi do rysowania HTML.

  • TF - znajdź słowa powtarzające się najczęściej w całym zbiorze (tzw korpusie) dokumentów
  • IDF - znajdź słowa, które pojawiają się często w danym dokumencie ale rzadko w innych - będą to słowa specjalistyczne
  • TFIDF - połącz jedno z drugim
Później ciekawe podejście - reprezentacja tekstu jako wektora. Np mamy N tweetów i możemy sobie porównać jak bardzo np. tweet jest podobny do danego dokumentu. I jeszcze jeden mądry link jak to zrobić : https://en.wikipedia.org/wiki/Cosine_similarity

Przekaz do młodzieży generlanie opłaca się uczyć matematyki - szkoda, ze za moich czasów prowadzący nie do końca rozumieli, że to oni są dla nas a nie my dla nich.

week 5

Tutaj było już machine learning profeska - tworzy się model i go trenowało. Nie wszystko zrozumiałem za pierwszym razem ale zaczyna się teraz nowy kurs https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x także nauka trwa.

Generalnie zasada jest prostsza niż się wydaje : "Stefan lajkował Polską Partię Przyjaciół Piwa i podobnie zrobić Zdzisław. Stefan zalajkował hodowle jedwabników poprzez podobieństwo jest duża szansa, że i Zdzisław tak zrobi." - ciekawe czasy nastały gdzie każdy chce być unikalny i ta unikalność tworzy łatwe do przewidzenia masowe zbiory zachowań.

Scala a python

Python

>>> krotka=("raz",2)
>>> (zm1,zm2)=krotka
>>> zm1
'raz'
>>> zm2
2
>>> 

Scala

scala> val krotka=("raz",2)
krotka: (String, Int) = (raz,2)

scala> val (zm1,zm2)=krotka
zm1: String = raz
zm2: Int = 2

Im więcej języków poznaję tym bardziej mam wrażenie, że dużo łatwiej nauczyć się scali znając cokolwiek innego niż Javę

2 komentarze:

  1. Dzięki Paweł za ciekawe przedstawienie tematu. Sam planowałem podejść do tego szkolenia, ale wyszło jak wyszło i...nie wyszło. Dobrze jednak przekonać się, że może nie musiało :)

    OdpowiedzUsuń