A legtöbb telefonhívást emiatt kaptuk

Ritkán fordul elő, hogy észrevehetően sok hívást kapunk egy programváltoztatás miatt. Az 1.112-es verzióval most ez megesett. Ügyfeleink 7-8%-a telefonált (a verziószám hasonlít a 112-es segélyhívó számra, de ez csak véletlen) vagy írt e-mail üzenetet, hogy egy eddig nem látott korlátozás miatt nem tud bizonylatot kiállítani. A végén örültek a korlátozásnak.

Ügyfeleink az új verzióval elkezdtek bizonylatokat kiállítani, de a rendszer nem engedte elmenteni a bizonylatot. Ekkor jöttek a telefonok. A verziótörténet az alábbi bejegyzést tartalmazta:

Bizonylat dátumok fokozott ellenőrzése

A bizonylat dátumok fokozott ellenőrzése (rendszerbeállítások) nem engedi adott napnál régebbi vagy újabb bizonylat kiállítását. A tolerancia értékek a kelt, teljesítés és fizetési határidőre külön-külön adhatóak meg.

Több ügyfelünk kérésére/javaslatára bevezettük azt a rendszerbeállítást, mely szerint adott határokon belül lehet csak dátumot beállítani. Ennek célja, hogy ne lehessen például az 512-es évre (1502 évvel ezelőtti évben) bizonylatot kiállítani. Ez 7-8%-nyi ügyfélnek nem engedte elmenteni a bizonylatot, de ők ennek örültek, hiszen valamilyen rossz dátumot adtak meg.

A jövőben is javasoljuk, hogy minden felhasználó tekintse át a verziótörténet újdonságait és a narancs színnel kijelölt részeket külön értelmezzék, alkalmazzák cégükre.

Kiszivárogtatás: Gyártás-tervezés

Mindig is marketing túlkapásnak ítéltem azt, amikor valaki “véletlenül” elérhetővé tett egy még meg nem jelent terméket. Valljuk be, az ember ilyenkor nem tudja hova tenni, hogy valóban egy kémfotóról van szó vagy csak marketing fogás.

Nyilván nem olyan értékről van szó, mintha egy BMW vagy iPhone 6 kémfotó kerül illetéktelen kezekbe, de tegnap velünk is megesett. Egy stratégiai fejlesztésünk egyik stabil állapota véletlenül (a belső tesztek miatt engedélyezve) megjelent a hivatalosan kiadott verzióban. Nem is értesültünk volna róla, ha ezzel együtt nem tűnt volna el a teljes gyártás menü. Professional felhasználóink egy része a verzió megjelenése után pár perccel (!) jelezte, hogy nem tud gyártani, de nagyon tetszik neki a gyártás-tervezés felület.

gyartastervezes2

A hibát rövid időn belül orvosoltuk,
a gyártás menü a helyére került,

a gyártás-tervezés pedig már nem elérhető.

Aktív pihenés – Balatonkerülés 2014.

Pár vállalkozó szellemű kolléga az idén a szabadsága egy részét feláldozza egy kis aktív pihenésre. 2014. augusztus 28-31. között megkerüljük a Balatont, Akarattyáról indulva az óramutató járásával ellentétesen (északi part először).

Épp ma érkeztek meg a hímzett csapatpólók.

Ami hiányzik a .NET-ből

Mindig is irigykedtem, hogy sok fejlesztő publikál példa kódokat, amelyek másoknak is jók lehetnek. Most mi is összegyűjtöttünk egy párat, hátha…

 

Tömb összefűzés, rendezési opcióval

public static T[] Concatenate<T>(params T[][] arrays)
{
  return Concatenate<T>(null, arrays);
}
public static T[] Concatenate<T>(Comparison<T> comparison, params T[][] arrays)
{
  List<T> result = new List<T>();
  foreach (T[] array in arrays)
    result.AddRange(array);
  if (comparison != null)
    result.Sort(comparison);
  return result.ToArray();
}


Tömb "egyszeresítés"
public static T[] Distinct<T>(T[] array)
{
  return Distinct(array, null);
}
public static T[] Distinct<T>(T[] array, Comparison<T> comparison)
{
  List<T> result = new List<T>();
  foreach (T item in array)
    if (!result.Contains(item))
  result.Add(item);
  if (comparison != null)
    result.Sort(comparison);
  return result.ToArray();
}


Tömb összekavarás
public static T[] Shuffle<T>(T[] array)
 {
  Random rnd = new Random();
  int n = array.Length;
  while (n > 1)
  {
    int k = rnd.Next(n);
    n--;
    T temp = array[n];
    array[n] = array[k];
    array[k] = temp;
  }
  return array;
 }


Várakoztató kurzor kezelő

public class WaitCursor : IDisposable
{
  public WaitCursor()
  {
    ContextHandler.WaitCursorOn();
  }
  public void Dispose()
  {
    Dispose(true);
    GC.SuppressFinalize(this);
  }
  private bool disposed = false;
  protected virtual void Dispose(bool disposing)
  {
    if (!this.disposed)
    {
      if (disposing)
     {
     }
     ContextHandler.WaitCursorOff();
   }
   disposed = true;
 }
 ~WaitCursor()
 {
   Dispose(false);
 }
}


X64 kezelő
public static class X64Handler
{
  public static bool IsX64 { get { return IntPtr.Size == 8; } }
  public static string Display(bool suppress32) { return IsX64 ? "x64" : suppress32 ? null : "x86"; }
}
 

Felhasználói jelenet beküldése

Az ügyfelek kiszolgálása cégünk egyik fontos feladata. Ehhez azonban információra van szükségünk. Ezt az ügyfelek vagy meg tudják adni vagy nem. Naponta találkozunk az alábbi helyzettel:

– A program megkérdezte, hogy akarja-e menteni, ugye?

– Dehogy kérdezett!

– Ilyenkor a Symbol Ügyvitel feldob egy ablakot, nem látta?

– Nem dobott fel, ugye nem gondolja, hogy vak vagyok?

– Önnek szeretnék segíteni…

A félreértések elkerülése végett a jövőben a felhasználói jelenet beküldését fogjuk javasolni. Ennek segítségével a programban végzett tevékenységek “lefényképezésre” kerülnek és egy tömörített videoban cégünk rendelkezésére állnak. Ezt a felhasználónak kell indítania és leállítania. Ebben minden egér és billentyűzet tevékenység naplózásra kerül, valós időben látjuk, hogy mi történt.

jelenet

– Elnézést, bocsánat… mégis feldobott egy ablakot…

– Nincs semmi baj, örülök, hogy segíthettem. A viszont hallásra!

Desktop bűvös bája

Nagyon trendi laptop/notebook kombinációval fejleszteni, de cégünk már rég kinőtte azt a méretet, amikor a fejlesztő mozog, ügyfelekhez jár, bemutat, előadást tart. Fejlesztői gépeink szokásos cseréje most kicsit nagyobb változást hoz(ott).

Bármennyire is erős egy notebook, bármennyire fel van tuningolva SSD meghajtókkal, amitől csendes lesz és gyors… az asztali számítógépek teljesítményét nem éri el. Ár/érték arányban biztosan nem. Asztali, desktop számítógépek mellett raktuk le a voksunkat. HP Pro, Intel Core I5/I7 processzorral szerelve, benne végtelen mennyiségű (500GB sok mindenre elég) tárhely. Mindez kiegészítve persze a céges fájlszerverrel optimális fejlesztésre. De van még egy jobb ötletünk…

ssd

A cég vezetése kitalálta, hogy legyen dedikált fejlesztői szerver. Kollégák távoli asztallal (RDP) be tudnak lépni a számítógépeikre, sőt ha azok ki vannak kapcsolva, akkor WakeOnLan-nal fel tudják előtte ébreszteni azokat. De milyen jó lenne egy dedikált szerver! És valóban… Jövőbeni törekvésünk az, hogy egy olyan nagy teljesítményű, könnyen bővíthető (skálázható, például virtuális gépekre  épülő, felhős) számítógépet állítsunk be, amelyen minden fejlesztői tevékenység elvégezhető. Legyen szó webes vagy WinForms fejlesztésről.

Minden fejlesztő ide lépne be, állandóan futna. Minden, a fejlesztéshez szükséges komponens megtalálható lenne rajta. Nem kellene gépenként verziókövetés, biztonsági mentés, stb.

Ez az álom a terveink szerint hamar valóra fog válni.

Jól működik a vevőkeresés… Miről is beszélsz?

Egy pillanatra az jutott eszembe, hogy a gépek átveszik az irányítást. Öntudatukra ébrednek. A Symbol Ügyvitel ma elkezdett automatikusan gondolkodni, jól viselkedni.

Értékesítési vezetőnk jelezte, hogy milyen jó dolog a főképernyőn lévő jegyzetekben a vevőkre keresni. Mi is örültünk, de hirtelen nem tudtuk, hogy miről beszél. Kis gondolkodás után is kérdőn álltunk a pozitív visszajelzés előtt. Mi lehet ez? Vezető fejlesztőnk az automatizmusok mestere, de neki sem ugrott be, hogy miért került oda egy olyan funkció (véletlenül vagy szándékosan)

15 perc kellett hozzá: Minden többsoros beviteli mező menüje (jobb klikk) tartalmaz egy vevő kereső funkciót, hogy a szabadszövegekben is tudjunk keresni. Ez a főképernyőn lévő jegyzetekre is igaz, ott is megjelent és működik. Szuper!

Amellett döntöttünk, hogy továbbra is hagyjuk a rendszert “öntanulni”, úgy látszik, kellemes és hasznos dolgok születnek belőle.

Azért kár, hogy a régi jó dolgokból nem maradt semmi

A szoftveriparban nagyon gyorsan történnek a dolgok! Ezeket a lufikat a bulvárhírek is fújják, de alapvetően a sebesség elképesztő. Ha valaki tavaly nem volt szabadságon és idén vesz ki egyben 4 hetet, akár le is maradhat egy új programozási nyelv vagy felület bevezetéséről. És handicap-pel indul.

 

Minden napra egy platform

Napról napra jönnek az újabb hírek a különböző platformokról. Andorid, iOs, iPhone 3,4,5,6…, majd ugyanez iPad-ből is. És a felfogás szerint ezeken az eszközökön mind meg kell jelenni. Mert nem a szoftver gyártója, hanem a vevő dönt, hogy milyen eszközt vesz. És arra követeli is az alkalmazását.

App-okból áll a világ is?

Apropó, APP-ok

Az APP-ok világát éljük. Kicsit, könnyű, olcsó, gyorsan elkészíthető, ingyen van (általában). Az egyszerű embernek pedig a világképe átalakulhat és azt gondolhatja, hogy majd sok-sok app-ból épít egy irodát magának. Másik app-okból pedig bejárónőt, a harmadik napon pedig egy komplett családot.

Elhisszük, mert el akarjuk hinni, hogy app-okból fel tudunk építeni egy céges infrastruktúrát. Kell egy határidő-app, egy naptár-widget, egy rss-app a hírek miatt, google-app a weboldalam karbantartásához, egy mail-app, hogy legyenek bejövő leveleim, majd egy office-app, hogy a doksikat meg tudjam nyitni. Ebből csak ambiciózus kisfiúk színes játszótere lesz, de nem cég.

App-ok közötti kattintgatásból nem lett még olyan cég,
ami előállít valamit, fontos gazdasági szereplője lesz a társadalomnak
és egyáltalán viszi majd valamire.

Arra jó, hogy az esti TV nézés helyett (családok 60-70%-a tölti ezzel az idejét!) tapogassuk az Android vagy az iPhone kijelzőjét. Semmi több. Szvsz.

 

És ezeknek mind van egy külön-külön platformja

Mindent szabványosítunk. Kivéve a platformokat. Nem is vagyok ellene annak, hogy mindenki a saját ötleteit piacra dobja. Majd a nagyközönség kideríti, hogy melyik a “nyerő”. Sőt, nincs is nyerő, csak kedvenc van. Mindenkinek más. És ez a szokás szüli a hurrá-programozókat!

 

Kuplung szerint ebben van a bót…

Sok hurrá-programozó képezte ki magát. Sok O’Reilly könyv született a témában, 21 nap alatt sikerült mindenkinek Android és iOs programozóvá képeznie magát. Mert “Kuplung szerint ebben van a bót” (Papírkutyák, 2008). És itt gondolkoztam el azon, hogy mivé lesz a programozás, ha a PHP-s utat folytatjuk és minden program lefordul, amiben a pontosvesszőket (sorok végét lezáró karakter) jó helyre tettük. Talán mindannyian ismerjük a PHP-nek hívott webes játszóteret, amelyben csak nemrég (pár éve) jelent meg egyáltalán az objektum-orientáltság. De ez akkor is csak egy script-nyelv.

 

De mégis találtam valami újat

Már kezdtem világvége hangulatba kerülni, amikor rátaláltam. HTML5 (WebKit) böngészőkre optimalizált, webes (nem app-os!), érintőképernyős működést előtérbe helyező JS keretrendszer. A JavaScript nem is lényeg, mert nem látom. Helyette MVC (Model+View+Controller) elveken működő valódi keretrendszer. Komponensekből építkezhetek, tároló, megjelenítők vannak és csak azok vannak. Na és némi JS kód. Ami persze script jellegű, azaz mindig lefut csak nem azt csinálja, amit szeretnék. De mégis lehet(ett) rá építeni. Elkészült a Symbol Touch framework.

 

Érints meg!

A Symbol Touch framework egy nagyon vékony réteg, amely a SyX-ek által megvalósított webszerverben fut. Nem kell hozzá Apache vagy IIS. Elég a Symbol Touch SyX. És máris megjelenik az érintőképernyőn (Android tablet, iPhone, iPad) az ügyvitelnek egy része. Az a rész, amely kattintható, tapogatható. Bizonylatot nem tudok érintéssel kiállítani, de cégvezetőként meg tudom nézni, hogy…

? ? ?

…és ez legyen titok. A hivatalos bejelentésig még várni kell ezzel. Csak a neve van meg: Symbol Touch

Hangok a Symbol Ügyvitelben

A kezdetek kezdetén elhatároztuk, hogy nem lesznek hangok a Symbol Ügyvitelben, de most eljött ez a pillanat is. Elmesélek egy történetet, ami megvilágítja, hogy miért félek a hangoktól.

Pályafutásom kezdetén, a CCS Hungary Kft-nél szoftverrendszert fejlesztettünk, amely a légitársaságokat és a Malév-ot szolgálta ki. Egyik funkciója volt a csomagok gépre rakása. Ha a gép indulása előtt negyed órával volt még függőben lévő csomag, akkor különleges figyelmeztetést kellett megjeleníteni.

Jött a korszakalkotó ötlet, hogy ne csak vizuális, hanem “audiális” is legyen a figyelmeztetés. A villogó piros mellett 5mp-enként hangot is adott. Kis sípolós kattanás. A szoftver rendben volt, vittük telepíteni.

A telepítésnél ott voltam, ezért én kaptam az első “pofont”. Az automatikus frissítő rendszer kb. 30 gépre lerántotta az alkalmazást és a felhasználó tényleges feladatától függetlenül minden gépen jelzett a csipogó. 5mp-enként szólalt meg ugyan, de 30 számítógép esetén ez 6csipogás/mp-es ütemezést jelentett. Egy nagy terem, ami csipog. A csipogás mellett már sikítottak is a kollégák. Nagy zűrzavart okoztunk 🙂

Szóval ezért nem szeretjük a hangokat. De az üzleti felhasználás most megkövetelte. A felugró emlékeztető (Partnerkapcsolat modul) és az átküldött jegyzet (Sticky-note) hangot ad, amikor megjelenik. Reméljük, nem lesz belőle hangorkán.

EU adószám ellenőrzési hiba

Ennyire lehet megbízni az EU adószám nyilvántartó rendszerben.

Tegnapi nap folyamán érkeztek a bejelentések, hogy az EU közösségi adószámok ellenőrzése nem mindig jó. Megvizsgálva azt láttuk, hogy az URL megváltozott. De mint kiderült, nem csak az URL, hanem az adatok formátuma is megváltozott. De erről sajnos nem kaptunk értesítést.

Ez azért zavaró, mert egy szolgáltatást veszünk igénybe, amelyet továbbadunk ügyfeleink felé. És ők joggal panaszkodnak.

Tapasztalat, hogy a SaaS-ként emlegetett szolgáltatásokban azért annyire nem érdemes megbízni!