Архива дневничких записа из категорије :

Најбољи frontend алати у 2025. години

  • Закључак

    • Ако желите највећу флексибилност и популарност: React.js.

    • Ако желите једноставан и лаган framework: Vue.js.

    • Ако радите на enterprise пројектима: Angular.

    • Ако желите високе перформансе: Svelte.

    • Ако желите брзо креирање responsive дизајна: Bootstrap или Tailwind CSS.

    • Ако желите SEO-friendly апликације: Next.js или Gatsby.

    Избор зависи од ваших потреба, нивоа искуства и типа пројекта на којем радите. 😊

Категорија :

Аутор :    Драшко Шикањић    

28. 01. 2025.

Прочитај више

Најбољи backend алати у 2025. години

  • Закључак

    • Ако желите брз развој: Django, Ruby on Rails, Laravel.

    • Ако желите високе перформансе: Go, Node.js, FastAPI.

    • Ако радите на enterprise пројектима: Spring Boot, ASP.NET Core.

    • Ако већ знате JavaScript: Node.js, Express.js.

    • Ако већ знате Python: Django, Flask, FastAPI.

    Избор зависи од ваших потреба, језика који познајете и типа пројекта на којем радите. 😊

Категорија :

Аутор :    Драшко Шикањић    

21. 01. 2025.

Прочитај више

Најбољи алати за израду веб сајтова у 2025. години

  • Закључак

    • За почетнике: Wix, Squarespace, WordPress.com.

    • За средњенапредне кориснике: WordPress.org, Shopify, Webflow.

    • За напредне програмере: React.js, Vue.js, Node.js, Django.

    • За дизајн: Figma, Adobe XD, Sketch.

    Ако желите једноставан сајт без кодирања, Wix или Squarespace су одлични избори. Ако желите више контроле и флексибилности, WordPress.org је најбољи избор. За напредне програмере, React.js или Vue.js су идеални за модерне веб апликације.

Категорија :

Аутор :    Драшко Шикањић    

15. 01. 2025.

Прочитај више

Најбољи програмски језик за учење у 2025. години

  • Закључак:

    • Ако сте почетник: Python или JavaScript су одлични избори због лакоће учења и широке примјене.

    • Ако желите да радите у AI/ML или науци о подацима: Python је најбољи избор.

    • Ако желите да се бавите веб развојем: JavaScript (или TypeScript) је неопходан.

    • Ако желите да радите у embedded системима или системском програмирању: Rust или C/C++.

    • Ако желите да радите у cloud computing или backend развоју: Go или Python.

    Најважније је да изаберете језик који одговара вашим интересима и циљевима. Технологија се брзо развија, тако да је кључно бити флексибилан и спреман да учите нове ствари.

Категорија :

Аутор :    Драшко Шикањић    

10. 01. 2025.

Прочитај више

Најбољи алати за израду игрица у 2025. години

  • Закључак:

    • Unity: Најбољи за крос-платформски развој, индије и 3D игре.

    • Unreal Engine: Најбољи за AAA игре и висококвалитетну графику.

    • Godot: Одличан за мале пројекте и независне програмере (бесплатан и open source).

    • GameMaker Studio: Идеалан за 2D игре и почетнике.

    • Phaser: Најбољи за веб игре.

    • CryEngine: Најбољи за реалистичну графику и AAA игре.

    • Construct: Идеалан за почетнике који не знају да програмирају.

    • RPG Maker: Специјализован за RPG игре.

    Ако сте почетник, GameMaker Studio или Godot су одлични избори. Ако желите да правите 3D игре или крос-платформске игре, Unity је најбољи избор. За AAA игре и висококвалитетну графику, Unreal Engine је најмоћнији алат.

Категорија :

Аутор :    Драшко Шикањић    

02. 01. 2025.

Прочитај више

Да ли учити Delphi у 2025. години

  • Да ли је Delphi релевантан у 2025. години?

    Delphi ће вјероватно остати релевантан у одређеним нишама, посебно за одржавање legacy система и у enterprise окружењима. Међутим, за нове пројекте и модерне трендове (као што су AI, ML, веб развој или cloud computing), други језици као Python, JavaScript, Go или Rust су много популарнији и имају већу заједницу.


    Ако већ радите са Delphi-јем или радите на legacy пројектима, може бити корисно наставити са њим. Међутим, ако сте почетник или желите да се усмјерите ка модернијим технологијама, боље је изабрати неки од популарнијих језика као што су Python, JavaScript или Go. Delphi је и даље моћан алат, али његова употреба је ограничена на специфичне случајеве.

Категорија :

Аутор :    Драшко Шикањић    

01. 12. 2024.

Прочитај више

Шта су агилне методологије (Scrum)

  • Scrum је једна од најпопуларнијих агилних методологија, посебно у развоју софтвера. То је оквир за управљање пројектима који се фокусира на итеративни и инкрементални приступ. Scrum подстиче тимове да раде у кратким циклусима који се називају спринтови (обично 2-4 недеље), током којих се развијају и испоручују дијелови производа.

    Кључне улоге у Scrum-у :

    1. Product Owner (власник производа):
      • Одговоран је за дефинисање и приоритизацију захтјева (у облику Product Backlog-а).
      • Представља интересе клијента и осигурава да тим ради на правим стварима.
    2. Scrum Master:
      • Функционише као сервисни лидер за тим.
      • Помаже тиму да слиједи Scrum процес и уклања препреке.
    3. Развојни тим:
      • Састоји се од професионалаца који раде на изради производа.
      • Тим је самоорганизован и крос-функционалан.

    Кључни артефакти у Scrum-у:

    1. Product Backlog:
      • Динамична листа свих захтјева за производ.
      • Приоритизована од стране Product Owner-а.
    2. Sprint Backlog:
      • Листа задатака које тим планира да заврши током текућег спринта.
    3. Increment:
      • Испоручени део производа на крају сваког спринта.

    Кључни догађаји у Scrum-у:

    1. Sprint Planning:
      • Планерски састанак на почетку спринта гдје тим одлучује шта ће радити у наредном спринту.
    2. Daily Scrum (Daily Standup):
      • Кратак дневни састанак (15 минута) гдје тим синхронизује рад и идентификује препреке.
    3. Sprint Review:
      • Састанак на крају спринта гдје тим показује шта је завршено клијенту или стејкхолдерима.
    4. Sprint Retrospective:
      • Састанак на крају спринта гдје тим разматра шта је добро прошло, а шта може бити побољшано у наредним спринтовима.

    Предности Scrum-а:

    • Флексибилност у прилагођавању промјена.
    • Брже испоруке вриједности клијенту.
    • Боља комуникација и сарадња у тиму.
    • Континуирано побољшање процеса.

    Изазови Scrum-а:

      • Захтјева висок ниво ангажмана и дисциплине од тима.
      • Може бити тешко имплементирати у великим организацијама са сложеним процесима.
      • Product Owner мора бити јасан и доследан у приоритизацији захтева.

    Укратко, Scrum је моћан алат за управљање пројектима који подстиче тимове да буду флексибилни, иновативни и фокусирани на испоруку вриједности клијенту.

     

Категорија :

Аутор :    Драшко Шикањић    

05. 11. 2024.

Прочитај више

Избор између Delphi и C# за развој Windows desktop апликација

  • Закључак:

    • C# је бољи избор за већину сценарија, посебно ако желите да користите модерне технологије, имате приступ великој заједници и желите бесплатне алате.

    • Delphi је добар избор ако радите на legacy пројектима, желите брз развој desktop апликација или ако већ имате искуства са Delphi-јем.

    Ако сте почетник или желите да се фокусирате на модерне трендове, C# је дефинитивно бољи избор. Ако радите на одржавању старијих апликација или желите брзо да направите desktop апликацију, Delphi може бити одличан избор.

Категорија :

Аутор :    Драшко Шикањић    

01. 11. 2024.

Прочитај више

Најчешће коришћени графички API

  • Закључак

    • GDI+ и OpenGL су различити графички интерфејси за програмирање (API) који се користе у различитим контекстима. GDI+ је дио Microsoft Windows графичке библиотеке и користи се претежно за 2D графику, док је OpenGL API ниског нивоа који се користи за 2D и 3D графику, омогућавајући директнији приступ GPU-у. На основу снимака, OpenGL може бити сложенији, док GDI+ може пружити брже резултате за одређене 2D операције када се комбинује са GDI.
    • Delphi може да користи OpenGL, али то није уграђено у сам језик. Ако желите да користите OpenGL у Delphi-ју, мораћете да користите библиотеке или ручне позиве OpenGL функција. Међутим, за модернији и једноставнији приступ 3D графици, боље је користити FireMonkey или прећи на специјализоване алате као што су Unity или Unreal Engine.
    • Unity може користити OpenGL као један од backend-а за рендеровање, али то није главни API који Unity користи.
      Unity аутоматски бира најбољи API за циљану платформу.
    • C# сам по себи не користи OpenGL, али можете га користити у C#-у преко библиотека као што су OpenTK или Silk.NET.
      Ако желите да радите директно са OpenGL-ом, боље је користити C# са OpenTK или Silk.NET. Ако желите да се фокусирате на развој игара без бриге о ниском нивоу графике, Unity је бољи избор.

Категорија :

Аутор :    Драшко Шикањић    

01. 10. 2024.

Прочитај више

Класе у Delphi-ју

Аутор :    Драшко Шикањић    

20. 09. 2024.

Прочитај више

Патерни (шаблони) у Delphi-ју

  • Патерни

    Патерни у Delphi-ју представљају поновљива решења за уобичајене проблеме у софтверском дизајну. Сваки патерн има своје име, опис проблема, рјешење и могуће посљедице. Ово омогућава програмерима да брзо идентификују и имплементирају рјешења која су већ тестирана и коришћена у пракси.
    Који су најчешће коришћени патерни у Delphi-ју?

    У Delphi програмирању, неки од најчешће коришћених патерна су :

    1. Singleton Pattern: Овај патерн осигурава да класа има само једну инстанцу и пружа глобалну тачку приступа тој инстанци.
      У Delphi-ју се често користи за управљање ресурсима попут конекција са базом података.
    2. Factory Pattern: Омогућава креирање објеката без потребе за прецизирањем класе објекта који ће бити креиран. Овај патерн је посебно користан када радите са сложеним објектима.
    3. Observer Pattern: Коришћен за обавештавање више објеката о промјенама у другом објекту. У Delphi-ју се може користити за имплементацију догађаја (events) и руковаоца догађајима.
    4. Decorator Pattern: Овај патерн омогућава додавање нових функционалности постојећим објектима без измјене њиховог кода. Корисно је када желите да динамички додате функционалности кроз “облачење” објеката.
    5. Strategy Pattern: Омогућава дефинисање породице алгоритама, стављајући их у посебно стање и омогућујући јединствено коришћење. Овај патерн се често користи за динамичко мијењање понашања објеката.
    6. Command Pattern: Овај патерн омогућава енкапсулацију захтјева као објекта, омогућавајући тако њихово подсјећање, редослијед извршавања или враћање на претходно стање.
    7. Template Method Pattern: Пружа основни скелет алгоритма у методи, док омогућава подкласама да редефинишу одређене кораке без промјене структуре алгоритма.
    8. MVC (Model-View-Controller): Овај образац раздваја апликацију на три компоненте: модел (подаци, data), приказ (UI , view) и контролер (логика, handler), олакшавајући одржавање и тестирање софтвера.

    Ови патерни помажу у структури и организацији кода, чинећи га лакшим за разумијевање и одржавање.

Аутор :    Драшко Шикањић    

11. 09. 2024.

Прочитај више

Замјена за Sleep функцију у Delphi-ју

  • У Delphi-ју, коришћење Sleep  функције може узроковати замрзавање корисничког интерфејса. Ако желите да паузирате извршавање без блокирања GUI, можете користити следеће алтернативе:

      • TTimer – користите komponentu TTimer koja може периодично извршавати код без блокирања главне нити. Конфигуришите вријеме интервала у милисекундама, а када се тимер активира, извршиће се догађај  OnTimer .
    var 
    
      Timer: TTimer; 
    
    procedure TForm1.Timer1Timer(Sender: TObject); 
    
    begin 
    
      // Kod koji želite da izvršite 
    
      Timer.Enabled := False;  // Isključite timer nakon izvršenja 
    
    end; 
    
    procedure TForm1.StartTimer; 
    
    begin 
    
      Timer := TTimer.Create(Self); 
    
      Timer.Interval := 1000; // 1 sekunda 
    
      Timer.OnTimer := Timer1Timer; 
    
      Timer.Enabled := True;  // Aktivirajte timer 
    
    end;
      • Thread – ако имате задатак који траје дуже, можете га покренути у новој нити (TThread). Ово ће омогућити да се програм настави да реагује док се задатак извршава у позадини.
    type 
    
      TMyThread = class(TThread) 
    
      protected 
    
        procedure Execute; override; 
    
      end; 
    
    procedure TMyThread.Execute; 
    
    begin 
    
      // Dugo izvršavanje 
    
      Sleep(10000); // Simulacija dugotrajnog procesa 
    
      Synchronize(procedure begin 
    
        // Ažurirajte UI ovde 
    
      end); 
    
    end;
      • Asynchronous Programming – коришћење async/await pristupa (од верзије Delphi 10 Seattle) омогућава асинкроно програмирање, што може бити корисно за неблокирање UI.

    procedure TForm1.DoSomethingAsync;  begin    TTask.Run(procedure    begin      Sleep(1000); // Simulacija posla u pozadini      TThread.Synchronize(nil, procedure      begin        // Ažurirajte UI ovde      end);    end);  end;

    • Све ове методе омогућавају извршавање задатка без замрзавања апликације и одржавање респонсивности корисничког интерфејса.

    procedure Delay(msecs: Longint); // pauza u mili sekundama (zamjena za BP funkciju) var   FirstTickCount: Longint; begin   FirstTickCount := GetTickCount; // Win API funkcija (vraca vrijeme u ms od paljenja racunara)   repeat     Application.ProcessMessages;     // dozvoljava pristup drugim kontrolama i procesima dok traje pauza   until ((GetTickCount - FirstTickCount) >= Longint(msecs)); end;

Аутор :    Драшко Шикањић    

05. 09. 2024.

Прочитај више

Нити (threads) у Delphi-ју

  • Нити (threads)

    Шта су нити? и зашто их користимо?

    Ранијих дана програмирања сви програми су били једноструки и једноструки задаци у којима ће се ваш програм изводити искључиво на машини или уопште неће радити. Са све софистициранијим апликацијама и све већим захтјевима за персоналним рачунарима, сада су доступни оперативни системи са више процеса и више нити. Multithreading на рачунарском програмирању је углавном био потребан за боље перформансе и употребљивост.

    Дакле, прво да пређемо на процес. Процес је програм који ради на систему и користи системске ресурсе као што су CPU, меморија итд. И сваки процес има главну нит. У Процесу се многе радње могу изводити једна по једна у брзом редослиједу.
    Thread се генерално користи за обављање неколико скупова радњи одједном у ситуацијама као што неке радње могу изазвати значајно кашњење, али током тог периода програм би требало да буде у стању да изврши и друге радње.
    На примјер, у Windows Explorer-у копирамо велику количину података из једне фасцикле у другу фасциклу и открили смо да ће то потрајати, али током копирања можемо да радимо и друге послове. Дакле, у овом случају се процес копирања одвија у новој нити која не утиче на главну нит.

    Нити се углавном користе у случају проблема везаних за перформансе. Ево неколико примjера гдjе бисмо могли да користимо нити.

    Дуготрајна обрада: Када Windows апликација израчунава, не може више да обрађује поруке. Као резултат тога, екран се не може ажурирати.

    Обрада у позадини: Неки задаци можда нису временски критични, али морају да се извршавају непрекидно.

    Обављање I/O посла: I/O на диск или у мрежу може имати непредвидива кашњења. Нити вам омогућавају да осигурате да I/O операција не одлаже неповезане делове ваше апликације.

    Како ово функционише? Шта ради синхронизација?

    Код који се позива када се позове синхронизација може да изврши било шта што би главна VCL нит могла да уради. Поред тога, он такође може да модификује податке повезане са сопственим објектом нити, безбедан у сазнању да је извршење сопствене нити у одређеној тачки (позив за синхронизацију). Оно што се заправо дешава је прилично елегантно и најбоље илуструје још један дијаграм паука.

    Када се позове синхронизација, главна нит прорачуна је суспендована. У овом тренутку, главна VCL нит може бити суспендована у стању мировања, може бити привремено суспендована на I/O или другим операцијама, или може да се извршава. Ако није суспендован у потпуно неактивном стању (главна петља порука апликације), онда нит главног прорачуна чека. Када главна нит постане неактивна, функција без параметара прослеђена синхронизацији се извршава у контексту главне VCL нити. У нашем случају, функција без параметара се зове UpdateResults и игра се са белешком. Ово осигурава да неће доћи до сукоба са главном VCL нити, а у суштини, обрада овог кода је слична обради било ког Delphi кода који се јавља као одговор на слање поруке апликацији. Не долази до сукоба са нити која је позвала синхронизацију јер је суспендована на познатој безбједној тачки (негдје у коду за TThread.Sinchronise).

    Једном када се ова „обрада путем проксија“ заврши, главна VCL нит је слободна да ради свој нормалан рад, а нит која је позвала синхронизацију се наставља и враћа се из позива функције.

    Стога се чини да је позив за синхронизацију још једна порука главној VCL нити и позив функције главној нити прорачуна. Нити су на познатим локацијама и не извршавају се истовремено. Нема услова за трку. Проблем ријешен.

     

Аутор :    Драшко Шикањић    

03. 09. 2024.

Прочитај више

Како одредити временски интервал у Delphi-ју

  • QueryPerformanceCounter (QPC) је функција у Windows API-ју која се користи за мјерење врло прецизних временских интервала.
    У комбинацији са QueryPerformanceFrequency, омогућава корисницима да добију високу прецизност у мјерењу времена, што је корисно за профилисање перформанси апликација. QPC се често користи за временско означавање догађаја и мјерење малих временских интервала унутар истог система или виртуелне машине.
    QueryPerformanceFrequency омогућава корисницима да добију високу прецизност у мјерењу времена, што је корисно за профилисање перформанси апликација. QPC се често користи за временско означавање догађаја и мјерење малих временских интервала унутар истог система или виртуелне машине.
    Препоручује се да провјерите тачност резултата, јер мјерења добијена путем QPC могу да се разликују од времена на зиду, као што је вријеме мјерено штоперицом.
       
        uses
        Windows, SysUtils;
    
        var
        Frequency, StartCounter, EndCounter: Int64;
        ElapsedTime: Double;
        
        begin
            // Dobijanje frekvencije visoko preciznog tajmera
            if QueryPerformanceFrequency(Frequency) then 
            begin
                // Mjerenje vremena
                QueryPerformanceCounter(StartCounter);
                // Ovdje dodajte kod koji želite mjeriti, na primer:
                Sleep(1000);  // Simulira proces koji traje 1 sekundu 
                QueryPerformanceCounter(EndCounter);
                // Izračunavanje proteklog vremena u sekundama
                ElapsedTime := (EndCounter - StartCounter) / Frequency;
                // Prikaz rezultata
                Writeln(Format('Proteklu vreme: %.6f sekundi', [ElapsedTime])); 
            end 
            else 
            begin 
                Writeln(‘Sistem ne podržava funkciju
                QueryPerformanceFrequency.’); 
            end; 
            Readln;   // Čekanje na unos
        end.
    

    Objašnjenje Koda

    1. Uključivanje modula: Modul Windows se koristi za pristup funkcijama Windows API-ja.
    2. FrekvencijaQueryPerformanceFrequency(Frequency) postavlja varijablu Frequency sa frekvencijom tajmera u Hertzima. Ako funkcija vrati True, sistem podržava ovu funkcionalnost.
    3. Merenje vremenaQueryPerformanceCounter se koristi da zabeleži vreme pre i posle izvršavanja nekog bloka koda. Rezultati su u jedinicama koje zavise od frekvencije.
    4. Izračunavanje proteklog vremena: Razlika između EndCounter i StartCounter podeljena sa Frequency daje vreme u sekundama.
    5. Prikazivanje rezultata: Koristimo Writeln da prikažemo proteklo vreme.

    Овај код ће приказати колико је времена протекло у секунди за одређене операције које сте одабрали. Можете га прилагодити према вашим потребама за мјерење перформанси.

    QueryPerformanceCounter – преузима тренутну вриједност бројача перформанси, што је временска ознака високе резолуције (<1us) која се може користити за мерења временског интервала. QueryPerformanceFrequency – Преузима фреквенцију бројача перформанси. Учесталост бројача перформанси је фиксна при покретању система и конзистентна је на свим процесорима. Зато је потребно да захтјевате фреквенцију само након иницијализације апликације, а резултат се може кеширати. Да бисмо користили ове функције за бројање временског интервала потребног за извршење било које операције у Delphi-ју, потребно је да уредимо изворни код, на примјер, на следећи начин:

    var iCounterPerSec: TLargeInteger;
    T1, T2: TLargeInteger; //counter value BEFORE and AFTER the operation
    begin
    QueryPerformanceFrequency(iCounterPerSec);//determine the frequency of the counter
    QueryPerformanceCounter(T1); //mark the start of the operation
    
    DoSomething; //execute the operation
    
    QueryPerformanceCounter(T2);//mark the end of the operation
    ShowMessage(FormatFloat(‘0.0000’, (T2 – T1)/iCounterPerSec) + ‘ сек.’);//show the required number of seconds to complete the operation
    
    end;

    Можете да радите са добијеним вриједностима Т1 и Т2 како желите, на примјер, можете засебно приказати минуте / секунде / милисекунде итд. Ово зависи од ваших потреба и жеља. У овом чланку сам показао најједноставнији примјер коришћења бројача високе резолуције у Delphi-ју. Модул System.Diagnosticsје уведен у Delphi прилично давно. Модул обезбjеђује само један запис – TStopwatch. То је у суштини згодан „омот“ за коришћење тајмера високе резолуције у вашим апликацијама на више платформи. TStopwatchкористи функционалност која зависи од оперативног система за приступ тајмерима високе резолуције ако су доступни. Ако тајмери ​​високе резолуције нису доступни у ОС, користе се уобичајени тајмери. Иако TStopwatchје запис, и даље морате да позовете методу Create или StartNev да бисте је правилно користили. Опис TStopwatchје следећи:

        TStopwatch = record 
            strict private 
                class var FFrequency: Int64; 
                class var FIsHighResolution: Boolean; 
                class var TickFrequency: Double; 
                strict private FElapsed: Int64; 
                FRunning: Boolean; 
                FStartTimeStamp: Int64; 
                function GetElapsed: TTimeSpan; 
                function GetElapsedDateTimeTicks: Int64; 
                function GetElapsedMilliseconds: Int64; 
                function GetElapsedTicks: Int64; 
                class procedure InitStopwatchType; static; 
                public class function Create: 
                TStopwatch; static; 
                class function GetTimeStamp: Int64; static; 
                procedure Reset; 
                procedure Start; 
                class function StartNew: TStopwatch; static; 
                procedure Stop; 
                property Elapsed: TTimeSpan read GetElapsed; 
                property ElapsedMilliseconds: Int64 read GetElapsedMilliseconds; 
                property ElapsedTicks: Int64 read GetElapsedTicks; 
                class property Frequency: Int64 read FFrequency; 
                class property IsHighResolution: Boolean read FIsHighResolution; 
                property IsRunning: Boolean read FRunning; 
        end;
    
    • Својство IsHighResolution одређује да ли је тајмер заснован на бројачу перформанси високе резолуције.
    • Метода Start() почиње да мери протекло време.
    • Метода Stop() престаје да мери протекло време.
    • Својство ElapsedMilliseconds добија укупно протекло време у милисекундама.
    • Својство Elapsed добија протекло време у облику TTimeSpan.
     
    uses System.Diagnostics;
    
    …
    
    var SW: TStopwatch;
    
    begin
    SW:=TStopwatch.StartNew;
    SW.Start;
    
    DoSomething;
    
    SW.Stop;
    
    ShowMessage(SW.Elapsed.TotalMinutes.ToString);
    
    end;

     

    Да бисте измјерили тачно вријеме извршења операције у Delphi-ју, прије свега, морате да одлучите која прецизност вам одговара:

     

    • Ако је друга тачност довољна, можете користити уобичајену, добро познату Now () функцију. Да, тачност је најнижа, али, с друге стране, овај метод је апсолутно једноставан.
    • Ако желите да достигнете милисекундну тачност, користите GetTickCount() која је једноставна и поуздана, али само ако не планирате да мјерите временски интервал који ће бити дужи од 49,7 дана.
    • Ако треба да користите најтачније методе за мјерење времена извршења – у Виндовс апликацији, онда препоручујем да користите комбинацију функција QueryPerformanceCounter()и QueryPerformanceFrequency() .
    • Коначно, најпогоднији метод је употреба TStopwatchу System.Diagnosticsмодулу. Ово је најпогодније за апликације на више платформи јер ради на било чему укључујући Windows, Linux, Android и macOS.



    Преузето са :


Аутор :    Драшко Шикањић    

01. 09. 2024.

Прочитај више

Пречице на тастатури за Visual Studio Code

Категорија :

Аутор :    Драшко Шикањић    

07. 07. 2024.

Прочитај више

WordPress плагинови за веб шопове

  • Најбољи Вордпресов плагин за доставу :

    WC Hide Shipping Methods


    Сакрива другу опцију, а оставља само ону коју треба.

    Ако клијент има и физичке локације, тад овако нешто највише одговара.
    До неке цијене иду опције A) фиксна цијена, B) лично преузимање.
    Преко дефинисаног износа се приказују опције A) бесплатна достава, B) лично преузимање


    // Uklanjanje fixed rate dostave kada je besplatna dostupna

    function hide_shipping_when_free_is_available( $rates, $package ) {

    $new_rates = array();

    foreach ( $rates as $rate_id => $rate ) {

    // Izmena samo ako je besplatna dostupna

    if ( 'free_shipping' === $rate->method_id ) {

    $new_rates[ $rate_id ] = $rate;

    break;

    }

    }

    if ( ! empty( $new_rates ) ) {

    // Prikazi i licno preuzimanje ako je omoguceno

    foreach ( $rates as $rate_id => $rate ) {

    if ('local_pickup' === $rate->method_id ) {

    $new_rates[ $rate_id ] = $rate;

    break;

    }

    }

    return $new_rates;

    }

    return $rates;

    }

    add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );

Категорија :

Аутор :    Драшко Шикањић    

02. 07. 2024.

Прочитај више

Automatsko osvježavanje Pivot tabele u excel-u

  • Да бисте направили макро за аутоматско освјежавање свих пивот табела у Excel-у, пратите следеће кораке:
    
    

    1. Отворите Visual Basic for Applications (VBA) едитор

      • Отворите Excel.
      • Притисните Alt + F11 да отворите VBA едитор.

    2. Уметните нови модул

      • У VBA едитору, десни клик на било који од објеката у "Project Explorer" прозору (обично са лијеве стране).
      • Изаберите Insert > Module. Ово ће прокламовати нови модул.

    3. Додајте код за освјежавање пивот табела

    У прозору модула који се отвори, унесите следећи код:
    Sub RefreshAllPivotTables()
    Dim ws As Worksheet
    Dim pt As PivotTable
    ' Prolazak kroz sve radne listove
    For Each ws In ThisWorkbook.Worksheets
    ' Prolazak kroz sve Pivot tabele na svakom radnom listu
    For Each pt In ws.PivotTables
    pt.RefreshTable
    Next pt
    Next ws
    MsgBox "Sve Pivot tabele su osvežene!", vbInformation
    

    4. Затворите VBA едитор

    Притисните Ctrl + S да сачувате свој рад и затворите VBA едитор.

    5. Покрените макро

      • Вратите се у Excel.
      • Притисните Alt + F8 да отворите прозор за покретање макроа.
      • Изаберите RefreshAllPivotTables и кликните на Run.

    6. (Опционално) Додијелите макро дугмету

    Ако желите да омогућите једноставно покретање, можете додати дугме на радни лист и доделити му макро:

      • Пређите на Developer tab (ако га немате, можете га додати путем опција).
      • Изаберите Insert и изаберте тип дугмета из Form Controls.
      • Нацртајте дугме на радном листу, и од вас ће бити затражено да додјелите макро.
      • Изаберите RefreshAllPivotTable и кликните ОК.

    Сада ћете моћи да освјежите све пивот табеле једним кликом на дугме !

Категорија :

Аутор :    Драшко Шикањић    

21. 06. 2024.

Прочитај више