en
Feedback
Hayitbek Yusupov - IT Blog

Hayitbek Yusupov - IT Blog

Open in Telegram
Buy Ad
56
Subscribers
No data24 hours
-27 days
-330 days
Posts Archive
Odam o'z sevgan ishini qilishi kerak(mi?) Ingliz tiliga otam qo'limdan tortqilab olib chiqqanlari esimda, keyin esa ingliz tiliga qiziqish kuchayib ketib, yotib olib dars qilishga o'tdim Otam dasturchi bo'lasan deganlarida norozi bo'lganim, men futbolchi bo'laman, futbol menga zavq beradi deganim esimda. Dasturlashni sinab ko'rgach, bu sohaga bo'lgan mehrim va qiziqishim uyg'ondi, dasturlashga kelganda odatda dangasalik tutmaydi Stiv Jobs 2005-yili Garvardda o'quvchilarga sarlavhadagi gaplarni aytgandi. Lekin Stiv Jobsning hayotiga nazar soladigan bo'lsangiz, o'zi bu maslahatiga amal qilmagan, agar amal qilganida, Applega asos solmagan bo'lar edi. O'zingiz uchun "mukammal" bo'lgan ishni qidirmang. O'z ishini sevgan insonlar bilan o'tkazilgan tadqiqotda ma'lum bo'lishicha, ular o'z ishini sevishini sababi, ular bu ish bilan bir necha yildan beri shug'ullanishi va doimiy ravishda o'z ustida ishlashi. Menda ingliz tili va dasturlash bilan xuddi shunday holat bo'lgan. Qanchalik ikkisini o'rganaverganim sari qiziqishim oshib, hayot tarzimga aylanib qolgan. @khaitbekdev

#rant Oxirgi vaqtlar ko'pchilik insonlar turli xil #challenge lar qilishga odatlanib qolishdi. Hozir ham Telegramda bir guruhni ko'rib qoldim, u yerda insonlar yig'ilib, qachon challengeni davom ettirsa, davom ettirdim deb qo'yadi. Masalan, ertalab yugurishga chiqsa yugurishga chiqdim, kitob o'qisa kitob o'qidim deb yozadi. Men o'ylaymanki, buni oqibati yaxshi bo'lmaydi. Ertalab yugurishga chiqqanda yoningizda ijtimoiy tarmoqlarga kirish mumkin bo'lgan qurilma bormi, demak sizning fokusingiz yugurishda emas. Zalga chiqqaningizda telefoningiz yoningizda, qulog'ingizda quloqchin bormi, demak sizning fokusingiz tanangizda emas. Aniq bitta ishga fokus qilish kerak. Tasavvur qiling siz har kuni ertalab yugurishga chiqyapsiz va har gal yugurishga chiqqaningizda mana men yugurishga chiqyapman deyish uchun ijtimoiy tarmoqqa kiryapsiz. Ertalabdan o'zingizga qilishingiz mumkin bo'lgan eng katta yomonliklardan biri bu ertalabdan ijtimoiy tarmoqlarga kirish. Sababi siz ijtimoiy tarmoqqa kirganingizda miyangiz u yerdagi jarayonni protsess qilishi kerak bo'ladi va siz shu vaqtda yugurishni boshlaysiz. Miyangiz esa u kontektstdan bu kontekstga o'tish jarayonida qolib ketadi. Challengelarni foydasi bor, albatta, lekin balansni yo'qotsangiz bir necha baravar zararini to'laysiz

Muvaffaqqiyatli insonlarning 7 ko'nikmasi Har birimizni hayotimizda turli xil majburiyatlarimiz bor. Masalan men dasturchiman, oilada eng katta o'g'il va akaman va hokazo. Inson majburiyatlari ko'paygani sari balansni yo'qotib borishi juda ham oson. Bu kitob bizga majburiyatlarimizga amal qilishni tartibga solishni o'rgatadi. Hayotimiz davomida juda ko'p narsalarni bir vaqtni o'zida o'rganmoqchi bo'lamiz yoki bir nechta qilmoqchi bo'lgan ishlarimizni barchasini bir vaqtda qilmoqchi bo'lamiz, ammo, barchasiga bir vaqtda ulgurish imkonsiz. Bu kitob bizga qanday qilib vaqtimizni bizga eng muhim bo'lgan ishlargagina sarflashni o'rgatadi. Hayotimiz davomida juda ham ko'p arzimas maqsadlarni o'z oldimizga qo'yamiz. Uy, mashina, pul kelib turadigan joy va hokazolar. Uy ham olamiz, mashina ham olamiz, ammo undan keyin nima qilamiz? Tasavvur qiling, 15 yosh bola IELTS dan 9 ball olaman deb ingliz tili o'rganyapti. U o'sha 9 ballni ham oldi deylik, keyin nima qiladi? Bu yerda muammo shundaki, biz oldimizga qo'ygan maqsadlarimiz juda ham kichkina maqsadlar. Biz bu maqsadlarga erishgach, nima qilishni o'ylab boshimiz qotib qoladi. Shu sababli, maqsadlarimizni umrini uzoqroq qilishimiz kerak, shunda ular bizga ko'proq yordam beradi. Bu kitob shu narsani o'rgatadi Hayotimiz davomida juda ham ko'p insonlar bilan tanishamiz, muloqotga kirishamiz. Afsuski, ko'pchilikda, shaxsan menda ham bor bo'lgan kamchilik bu eshita olmaslik. Bir inson bir yomon ish qilayotgan bo'lsa, darrov yomon hayolga boramiz. Yokida bir inson bilan gap talashib qolsak, kelisha olmay qilsak, osongina o'sha insonni ayblab, o'zimizni oqlaymiz. Balkim, o'zimizda ham gap bordur? Bu kitob eshitishni o'rgatadi Kitob muallifi Stiven Kovi - AQSHlik professor. 1996-yilda Times jurnali tomonidan AQSHning insonlarga eng ko'p foydasi tegadigan 25 ta insonlaridan biri sifatida tan olingan. O'limidan avval AQSHdagi Jon Huntsman maktabida faoliyat yuritayotgan bo'lgan. Kitob 400 betdan iborat. Bir hafta yoki bir oyda o'qib qo'yiladigan kitoblar sarasiga kirmaydi #kitoblar

2025-yilda qaysi kitoblarni o'qishimiz kerak? Keling gapni boshqa tomonga buraman. 1-1.5 yil oldin deyarli kitob o'qimas edim, ammo, shu 1,5 yil ichida shunday kitoblarni o'qidimki, bu kitoblardan olgan foydalarim meni kitobga bo'lgan muhabbatimni o'ta kuchaytirib yubordi. Bugun hamma o'qigan kitoblarim haqida aytmoqchi emasman, sekin-astalik bilan har bir kitobni bittalab ochib bermoqchiman. Demak, kettik, birinchi kitob - The power of habit Keling sizlarga ba'zi savollar beraman: - Odamlar nega suv turganda o'zini organizmi uchun zarar bo'lgan ichimliklarni sotib oladi? - Atirlar, havoni hidini yaxshilaydigan instrumentlar/apparatlarning sotilish tarixiga qiziqqanmisiz? Bu kashfiyotlar qanday o'ylab topilgan va qanday qilib insonlarni miyasiga olib kirilgan? - Adashmasam Bryus Lini mashhur gapi bor edi:
Men 1000ta zarbani biladigan odamdan ko'ra bitta zarbani 1000 marta mashq qilgan odamdan qo'rqaman.
Bu gap qanchalik haqiqatga yaqin? - Xotirasini yo'qotgan odamni tasavvur qiling. Nega ular qorni ochganida muzlatgichni borib ochishni esdan chiqarib qo'ymaydi? - Tish pastasi qanday qilib hozirgi kundagi holatiga olib kelingan va nega har gal tish pastasida tishingizni yuvganingizdan keyin og'zingizdan shirin hid kelib turadi? Ushbu savollarning barchasiga ushbu kitobda javob olishingiz mumkin. Kitob atigi 200 betdan iborat. Muallifi Charlz Dyuhigg, New York Times jurnalida jurnalist bo'lib ishlaydi. Bu kitobning ustun tomoni shundaki, kitob yozish muallifning asosiy daromad manbai emas. Bu degani, muallif kitobga mehr bera olganligi haqida ishonch beradi #kitoblar

Bestseller kitoblar Mana yilni oxiri ham yaqinlashmoqda, yaqinda kitob sotuvchilar yilning eng yaxshi sotilgan kitoblari degan to'plamlar chiqarishadi, narxi falon pul bo'ladi, balki chiqarib ham bo'lishgandur, maslahatim sotib olmang, sababi, u kitoblarni ichida turli xil toifa, turli xil darajadagi kitoblar bor. Masalan 50 ta eng ko'p sotilgan kitobdan 10tasi adabiyot, 10tasi yana boshqa va qolgani yana boshqa mavzuda bo'ladi. Kitob o'qish uchun 3 ta shaxsiy prinsipimdan eng birinchisi bu to'g'ri kitobni olib o'qishdir. Ko'p kitob o'qish yoki odamlar zo'r deb bilgan kitoblarni sotib olish sizni o'stirmaydi, kitob o'qishga alohida yondashgan ma'qul. 1-sinf bolasiga 10-sinf kitobi berilmaydi va teskarisi ham. Axir, shunday noyob kitoblar bor, uylarda chang bosib yotadiku)

Strategy pattern

// shared/helpers/useExport

export interface ExportDataStrategy<Data = unknown> {
  getDataToBeExported(data: Data[]): Array<Record<string, string | number>>;
  handleExportData(params: {
    dataToBeExported: Array<Record<string, string | number>>;
    columnsToBeExported: string[];
  }): Promise<void>;
}

export class ExportDataContext<Data = unknown> {
  private _data: Data[];
  private strategy: ExportDataStrategy<Data>;

  constructor(data: Data[], strategy: ExportDataStrategy<Data>) {
    this._data = data;
    this.strategy = strategy;
  }

  public setStrategy(strategy: ExportDataStrategy<Data>) {
    this.strategy = strategy;
  }

  public async export() {
    const dataToBeExported = this.strategy.getDataToBeExported(this._data);
    const columnsToBeExported = Object.keys(dataToBeExported[0]);

    await this.strategy.handleExportData({
      dataToBeExported,
      columnsToBeExported,
    });
  }
}
// usage

import { SomeEntity } from "entities/SomeEntity";
import { ExportDataContext, ExportDataStrategy } from "shared/helpers/exportData";

interface UseExportSomeEntityProps {
  data: SomeEntity[];
}

export class ExportSomeDataToExcelStrategy implements ExportDataStrategy<Transaction> {
  getDataToBeExported(data: SomeEntity[]): Array<Record<string, string | number>> {
    return transactions.map((transaction) => ({
      "Some key": data.someValue,
    }));
  }

  async handleExportData(params: {
    dataToBeExported: Array<Record<string, string | number>>;
    columnsToBeExported: string[];
  }): Promise<void> {
    (await import("react-export-table-to-excel")).downloadExcel({
      fileName: "react-export-table-to-excel -> downloadExcel method",
      sheet: "react-export-table-to-excel",
      tablePayload: {
        header: params.columnsToBeExported,
        body: params.dataToBeExported ?? [],
      },
    });
  }
}

export function useExportSomeData(props: UseExportSomeDataProps) {
  const exportTransactionsToExcelStrategy = new ExportSomeDataToExcelStrategy();
  const context = new ExportDataContext(props.data ?? [], exportSomeDataToExcelStrategy);

  async function handleExportSomeData() {
    await context.export();
  }

  return {
    handleExportSomeData,
  };
}

Pulingizni nazorat qilish va taqsimlash uchun juda ham zo'r ilova ekan. Tavsuyu https://play.google.com/store/apps/details?id=com.fin.plan&hl=en_US

https://www.youtube.com/watch?v=tQ6fB7WClgw Ba'zida o'ylab qolaman, javascript shuncha joyda run bo'layotgan ekan, shu hamma javascript run bo'ladigan joylar xavf ostida bo'lsa kerak)

#clean_architecture #tauri Taurida yozilayotgan desktop appni clean architecture kitobidan o'rganganlarim bo'yicha refactoring qildim. Taurida siz javascript orqali rust ni chaqirishingiz mumkin, bu quyidagi ko'rinishda bo'ladi:
import { invoke as invokeTauri } from "@tauri-apps/api/core";

invokeTauri(command, args);
Men 10ga yaqin joyda xuddi shu ko'rinishdagi kodni qayta-qayta yozayotgan edim. Agar ertaga Tauri yangilansa va API lar o'zgarsa, shu 10ga yaqin joyni o'zgartirish kerak bo'ladi. Shu sababdan, bitta kichkina servischa yozdim:
import { invoke as invokeTauri } from "@tauri-apps/api/core";

const TAURI_COMMANDS = [
  "authenticate",
  "notify",
  "get_latest_notifications",
  "get_latest_notifications_count",
  "get_all_notifications",
  "redirect",
  "update_tray_icon",
  "read_notification",
  "get_user_staff_id",
  "change_window_size",
  "center_window",
] as const;

type TauriCommand = (typeof TAURI_COMMANDS)[number];

interface ITauriService {
  invoke: (command: TauriCommand, args: object) => unknown;
}

export default class TauriService implements ITauriService {
  async invoke(command: TauriCommand, args: object) {
    return await invokeTauri(command, {
      ...args,
    });
  }
}
Va qolgan hamma joyda shu servisni ishlatdim:
const { invoke } = new TauriService();
invoke(command, args)
Agar kelajakda Taurining API lari o'zgargan taqdirda, faqatgina shu servisni implementatsiyasi o'zgaradi. Bu implementation o'ta sayoz. Bizda faqat command larni type-safe ekanligiga garantiya bor, ammo args shunchaki object. Bu joyiga endi typescript wizardry kerak bo'lsa kerak

https://tkdodo.eu/blog/react-query-and-type-script#type-narrowing Tanstack Query ishlatganimizda shuncha paytdan beri object destructuring qilib ichidagi ma'lumotlarni olar edik. Manimcha destructuring qilmagan ma'qulroq ekan