З Днем захисника України!

zahysnyky_ukrainy
Що єднає українське суспільство?
“Українці не мають національної ідеї, не мають власної ідеології” – брехня.
Цю думку, роками, десятиліттями і не помилюся якщо скажу, що вже не одне століття,
московські засланці та їхні блюдолизи-запроданці поширюють в нашому суспільстві.
Московські запроданці та засланці намагаються розділити українців за якимись надуманими ознаками,
мовними, географічними, національними, релігійними.
Але події останніх років розставили все на свої місця
і висвітлили ту межу за якою закінчуються “понятія вати” і панує свідомість українця.
Варто відповісти на наступні три питання і ви зрозумієте де та межа.
1. За що воюють Українці?   Українці йдуть воювати за Волю.
   – московська вата йде воювати за царя,
   не обов’язково справжнього, не обов’язково сильного, нехай і брехливого аби заспокоїв і виправдав їхнє сумління.
2. Чого прагнуть Українці?   Українці прагнуть Свободи.
   – московська вата дозволяє гнобити себе з надією на те, що цар-гнобитель дозволить гнобити слабшого,
   не потрібно самому щось знати, уміти, робити щоб почуватися значним, якщо поряд є щось нікчемне.
3. Що відстоюють Українці?   Українці відстоюють Справедливість.
   – московська вата випрошує милості у царя,
   чекати милості легше ніж боротися за Справедливість.
Українці борються за власну Землю, власну Державу.
Слава Україні!

=-=-=-=-=
Powered by Blogilo

Advertisements

Спогад

DSC00148.JPG

=-=-=-=-=
Powered by Blogilo

Виконання сценарію Ant із програми Java

Процедура виконання скрипта Ant:
  • спрямувати протоколювання виконання завдань у стандартну консоль;
  • спрямувати протоколювання виконання завдань в масив;
  • заповнити змінні скрипта Ant;
  • виконати вказане завдання;
  • вивести протокол виконання завдання в компонент на формі;

Текст програми на GitHub

  private boolean executeAntTask(String target) {
    boolean success = false;
    // спрямувати протоколювання виконання завдань у стандартну консоль
    DefaultLogger conlog = new DefaultLogger();
    conlog.setErrorPrintStream(System.err);
    conlog.setOutputPrintStream(System.out);
    conlog.setMessageOutputLevel(Project.MSG_INFO);
    // спрямувати протоколювання виконання завдань в масив
    DefaultLogger strlog = new DefaultLogger();
    ByteArrayOutputStream errb = new ByteArrayOutputStream();
    PrintStream errp = new PrintStream(errb);
    strlog.setErrorPrintStream(errp);
    ByteArrayOutputStream outb = new ByteArrayOutputStream();
    PrintStream outp = new PrintStream(outb);
    strlog.setOutputPrintStream(outp);
    strlog.setMessageOutputLevel(Project.MSG_INFO);
    // підготувати скрипт Ant до виконання завдань
    Project project = new Project();
    File buildfile = new File(buildname);
    project.setUserProperty("ant.file", buildfile.getAbsolutePath());
    // додати протоколювання виконання завдань у стандартну консоль
    project.addBuildListener(conlog);
    // протоколювання виконання завдань в масив
    project.addBuildListener(strlog);
    //
    try {
      // заповнення змінних скрипта Ant
      for (Entry m : map.entrySet()) {
        project.setUserProperty(m.getKey().toString(), m.getValue().toString());
      }
      project.fireBuildStarted();
      project.init();
      ProjectHelper helper = ProjectHelper.getProjectHelper();
      project.addReference("ant.projectHelper", helper);
      helper.parse(project, buildfile);
      // виконання вказаного завдання
      project.executeTarget(target);
      project.fireBuildFinished(null);
      success = true;
    } catch (BuildException buildException) {
      project.fireBuildFinished(buildException);
    }
    // виведення протоколу виконання завдання в компонент на формі
    jtLog.append(new String(outb.toByteArray()));
    jtLog.append(new String(errb.toByteArray()));
    return success;
  }

Кольори “Nimbus” можна змінити

Давно шукав спосіб змінити кольори деяких Java Swing компонентів.

Ось приклад:

  private void winRefresh() {
    // кольори "Nimbus" можна змінити
    // "nimbusOrange" - це колір JProgressBar
    UIManager.put("nimbusOrange", Color.green.darker());
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
      if ("Nimbus".equals(info.getName())) {
        try {
          UIManager.setLookAndFeel(info.getClassName());
          break;
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
          Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, null, ex);
        }
      }
    }
  }

Більше інформації можна знайти тут.

=-=-=-=-=
Powered by Blogilo

Ескізи для фотогалереї і не тільки

Без зайвої мороки створити ескізи або колажі зображень можна скориставшись утилітою montage програми ImageMagick.

Програма створює ескізи зображень, для посилань на великі колекції зображень або фотографій. І хоча це основна функція утиліти, вона може зробити набагато більше. Деякі можливості програми montage описано тут, що можна зробити з монтажем, і як ви можете використовувати утиліту для обробки ваших зображень.

Приклад застосування: Фотогалерея.

Для виконання всієї роботи достатньо “магічного” рядка:

montage PICT0600.JPG PICT1319.JPG PICT1364.JPG PICT1417.JPG -tile 4x1 -geometry 200x200+1+1 tile_200x1.jpg

=-=-=-=-=
Powered by Blogilo

3G модем від Київстар

Бувають ситуації в житті, на перший погляд неприємні, які спонукають до пошуків чогось нового.

23 листопада 2011 року через аварію у мережі зник інтернет від компанії "Воля". Дзвінки на телефон технічної підтримки перетворилися на дзвінки на "телефон довіри". А перед тим, як люб’язний оператор, вислухає про ваші проблеми з інтернетом , "Воля" пропонує свою музично-розважальну лінію. І навіщо той Інтернет? Коли у "Волі" такий арсенал альтернативних послуг.

На час написання статті 10 грудня 2011 року, "Воля" вирішувати проблему не поспішає, тому доводиться щось вигадувати.

Отже, придбав 3G модем від Київстар. Модель MF190S ZTE.

На своєму комп’ютері з початку 2007 року використовую Debian, і тому думав, що доведеться встановлювати якісь додаткові пакунки, щось налаштовувати. Але, зважаючи на відсутність локального репозитарію, це непросте завдання. Тому був приємно здивований, коли модуль керування мережею KNetworkManager розпізнав модем, і вкладка Mobile Broadband для налаштування з’єднання стала доступна.

Висловлюю щиру подяку наполегливій праці розробників вільної операційної системи за їхню завбачливість.

Заповнив поля, натиснув кнопку "Гаразд" і без зайвого клопоту підключився до інтернету. Модем був активований на іншому комп’ютері за допомогою його штатної програми. Інструкція пише, що активувати модем (точніше не модем, а послугу) можна за допомогою телефону. Та все ж існує неприємний момент. Модем не завжди підключається до мережі. А точніше, система не завжди правильно його розпізнає. Пошуки помилок в логах нічого не дали, і це правильно. Пристрій розпізнається як USB CD-ROM. Тому після вдалого з’єднання з мережею звернувся до всезнаючого Інтернету і надибав необхідну статтю. Написано багато і все воно мабуть для когось корисне. Для вирішення конкретної проблеми, правильного розпізнання модему, необхідна одна команда:

$ echo -e "AT+ZCDRUN=E\r\n" > /dev/ttyUSB2  # увімкнути тільки модем, вимкнути кардрідер і автозавантаження USB CD-ROM

Після вимкнення кардрідеру і автозавантаження USB CD-ROM модем розпізнається системою і підключається до мережі без проблем.

якщо знадобляться додаткові функції пристрою, то необхідно виконати в консолі іншу команду:

$ echo -e "AT+ZCDRUN=F\r\n" > /dev/ttyUSB2  # увімкнути все: модем, кардрідер, USB CD-ROM

=-=-=-=-=
Powered by Blogilo

Перевтілення StrSum: VBA Excel

StrSum версія VBA Excel

Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1
Public ADigits(1 To 3, 1 To 20)
Public ADigitst(1 To 3) As String
Public Over10
Function StrSum(NSum) As String
'
'  in: nsum - сума(число)
' out: Сума прописом
'
' StrSum для m$ excel
'

Dim AKop(1 To 4)
Static AGrn(1 To 5, 1 To 5) As Variant
Static SSum, NKop, SGrn, NTriad, NTriads, st, CSum, ssgn

AKop(1) = "коп.": AKop(2) = "": AKop(3) = "": AKop(4) = ""
AGrn(1, 1) = "грн.": AGrn(1, 2) = "": AGrn(1, 3) = "": AGrn(1, 4) = "": AGrn(1, 5) = True
AGrn(2, 1) = "тисяч": AGrn(2, 2) = "а": AGrn(2, 3) = "i": AGrn(2, 4) = "": AGrn(2, 5) = True
AGrn(3, 1) = "мiльйон": AGrn(3, 2) = "": AGrn(3, 3) = "и": AGrn(3, 4) = "iв": AGrn(3, 5) = False
AGrn(4, 1) = "мiльярд": AGrn(4, 2) = "": AGrn(4, 3) = "и": AGrn(4, 4) = "iв": AGrn(4, 5) = False
AGrn(5, 1) = "трильйон": AGrn(5, 2) = "": AGrn(5, 3) = "и": AGrn(5, 4) = "iв": AGrn(5, 5) = False
ADigits(1, 1) = "": ADigits(1, 2) = "один": ADigits(1, 3) = "два": ADigits(1, 4) = "три"
ADigits(1, 5) = "чотири": ADigits(1, 6) = "п'ять": ADigits(1, 7) = "шiсть": ADigits(1, 8) = "сiм"
ADigits(1, 9) = "вiсiм": ADigits(1, 10) = "дев'ять": ADigits(1, 11) = "десять": ADigits(1, 12) = "оди"
ADigits(1, 13) = "два": ADigits(1, 14) = "три": ADigits(1, 15) = "чотир": ADigits(1, 16) = "п'ят"
ADigits(1, 17) = "шiст": ADigits(1, 18) = "сiм": ADigits(1, 19) = "вiсiм": ADigits(1, 20) = "дев'ят"
ADigits(2, 1) = "двадцять": ADigits(2, 2) = "тридцять": ADigits(2, 3) = "сорок"
ADigits(2, 4) = "п'ятдесят": ADigits(2, 5) = "шiстдесят": ADigits(2, 6) = "сiмдесят"
ADigits(2, 7) = "вiсiмдесят": ADigits(2, 8) = "дев'яносто"
ADigits(3, 1) = "": ADigits(3, 2) = "сто": ADigits(3, 3) = "двiстi": ADigits(3, 4) = "триста"
ADigits(3, 5) = "чотириста": ADigits(3, 6) = "п'ятсот": ADigits(3, 7) = "шiстсот"
ADigits(3, 8) = "сiмсот": ADigits(3, 9) = "вiсiмсот": ADigits(3, 10) = "дев'ятсот"
ADigitst(1) = "": ADigitst(2) = "одна": ADigitst(3) = "двi"
Over10 = "надцять"
CSum = ""

    If NSum < 0 Then
      ssgn = "Мінус "
    Else
      ssgn = ""
    End If
    NSum = Abs(NSum)
    SSum = LTrim(Format(NSum, "#################0.00"))
    NKop = Val(Right(SSum, 2))                    ' видiляю копiйки
    SGrn = Left(SSum, InStr(SSum, ",") - 1)       ' видiляю гривнi
' Debug.Print NSum
' debug.Print "коп.       —", NKop
' debug.Print "грн.       —", SGrn
' debug.Print "довжина    —", Len(SGrn)

' визначаю кiлькiсть трiад
    NTriads = Int(Len(SGrn) / 3) + IIf(Len(SGrn) Mod 3 <> 0, 1, 0)
' debug.Print "тріад      —", NTriads

    If Val(SGrn) > 0 Then           ' є гривні?
      SGrn = Space(NTriads * 3 - Len(SGrn)) + SGrn ' добавити пробіли неповній т.
      If NTriads <= UBound(AGrn) Then
' Debug.Print UBound(AGrn)
        For NTriad = NTriads To 1 Step -1
' видiляю трiаду
          st = Mid(SGrn, IIf(NTriads = NTriad, 1, (NTriads - NTriad) * 3 + 1), 3)
' debug.Print "тріада №,st,ind() —"; NTriad; st; ind(Val(Mid(st, 2))); _
            strtriad(st, AGrn(NTriad, 5)), AGrn(NTriad, ind(Val(Mid(st, 2))))
          CSum = CSum + IIf(st = "000", "", _
                    strtriad(st, AGrn(NTriad, 5)) + " " + _
                    AGrn(NTriad, 1) + AGrn(NTriad, ind(Val(Mid(st, 2)))) + " ")
        Next NTriad
' дописати назву грошової одиниці коли остання тріада '000'
         CSum = CSum + IIf(st = "000", AGrn(NTriad + 1, 1) + _
                                                        AGrn(NTriad + 1, ind(Val(st))) + " ", "")
' дописати копійки
' //      if nsum<1000
         CSum = ssgn + CSum + Format(NKop, "##00") + " " + AKop(1) + AKop(ind(NKop))
' //      endif
      Else
         StrSum = "дуже багато гривень"
      End If
       StrSum = CSum
' Debug.Print StrSum
     End If
 End Function
 Static Function strtriad(st, ltriad)
'  in: @st - адрес тріади
'   ltriad - .f. тріада чоловічого роду, .t. тріада жіночого роду
' out: тріада словами
'
  Static digit, t, c
  c = ""
     t = Val(st)
 ' Debug.Print "stt st,t,c  —"; st, t, c
     If t > 99 Then
       digit = Int(t / 100)
       c = ADigits(3, digit + 1) + " "
       t = t Mod 100            ' t%
     End If
 ' Debug.Print "stt t,c  —"; t, c
     If t > 19 Then
       digit = Int(t / 10)
       c = c + ADigits(2, digit - 1) + " "
       t = t Mod 10             ' t%
     End If
 ' Debug.Print "stt t,c  —"; t, c
     If (ltriad And t < 3) Then      ' трiада ж. роду
       c = c + ADigitst(t + 1)
     Else
       c = c + ADigits(1, t + 1) + IIf(t > 10, Over10, "")
     End If
 ' Debug.Print "==", t, c
     strtriad = c
 End Function
Static Function ind(n)
'   in: n - число                 // i - цiле число<20
'  out: iндекс закiнчення
'
Static i
    i = IIf(n < 20, n, n Mod 10)
    ind = IIf(i = 1, 2, IIf((i >= 2) And (i <= 4), 3, 4))       ' 2#
End Function

=-=-=-=-=
Powered by Blogilo

Перевтілення StrSum: Clipper

StrSum версія Clipper

Clipper вже історія. Але код можливо, ще десь і працює.

Файл: ADIGITS.PRG

...
 PUBLIC over10
 over10='надцять'
 DECLARE akop[4]
         akop[1]='копiй'
         akop[2]='ка'
         akop[3]='ки'
         akop[4]='ок'
 DECLARE akrb1[5]
         akrb1[1]='грив'
         akrb1[2]='ня'
         akrb1[3]='нi'
         akrb1[4]='ень'
         akrb1[5]=.t.
 DECLARE akrb2[5]
         akrb2[1]='тисяч'
         akrb2[2]='а'
         akrb2[3]='i'
         akrb2[4]=''
         akrb2[5]=.t.
 DECLARE akrb3[5]
         akrb3[1]='мiльйон'
         akrb3[2]=''
         akrb3[3]='и'
         akrb3[4]='iв'
         akrb3[5]=.f.
 DECLARE akrb4[5]
         akrb4[1]='мiльярд'
         akrb4[2]=''
         akrb4[3]='и'
         akrb4[4]='iв'
         akrb4[5]=.f.
 DECLARE akrb5[5]
         akrb5[1]='трильйон'
         akrb5[2]=''
         akrb5[3]='и'
         akrb5[4]='iв'
         akrb5[5]=.f.
 DECLARE adigits1[20]
         adigits1[01]=''
         adigits1[02]='один'
         adigits1[03]='два'
         adigits1[04]='три'
         adigits1[05]='чотири'
         adigits1[06]="п'ять"
         adigits1[07]='шiсть'
         adigits1[08]='сiм'
         adigits1[09]='вiсiм'
         adigits1[10]="дев'ять"
         adigits1[11]='десять'
         adigits1[12]='оди'
         adigits1[13]='два'
         adigits1[14]='три'
         adigits1[15]='чотир'
         adigits1[16]="п'ят"
         adigits1[17]='шiст'
         adigits1[18]='сiм'
         adigits1[19]='вiсiм'
         adigits1[20]="дев'ят"
 DECLARE adigits2[8]
         adigits2[1]='двадцять'
         adigits2[2]='тридцять'
         adigits2[3]='сорок'
         adigits2[4]="п'ятдесят"
         adigits2[5]='шiстдесят'
         adigits2[6]='сiмдесят'
         adigits2[7]='вiсiмдесят'
         adigits2[8]="дев'яносто"
 DECLARE adigits3[10]
         adigits3[01]=''
         adigits3[02]='сто'
         adigits3[03]='двiстi'
         adigits3[04]='триста'
         adigits3[05]='чотириста'
         adigits3[06]="п'ятсот"
         adigits3[07]='шiстсот'
         adigits3[08]='сiмсот'
         adigits3[09]='вiсiмсот'
         adigits3[10]="дев'ятсот"
 DECLARE adigitst[3]
         adigitst[1]=''
         adigitst[2]='одна'
         adigitst[3]='двi'
...

Файл: SUMFRAZA.PRG

* Сума прописом s87
*   Compile: clipper sumkrb.prc /n
*      Link: rtlink fi sumkrb li clipper
*

*
* in: nsum - сума
* out: сума прописом
*

 FUNCTION strsum
 PARAMETERS nsum
 PRIVATE ssum,nkop,skrb,ntriads,ntriad,st,csum
   ssum=ltrim(str(nsum,17,2))
   nkop=val(right(ssum,2))         && видiляю копiйки
   skrb=left(ssum,at('.',ssum)-1)  && видiляю гривнi

   ntriads=int(len(skrb)/3)+;
              if(len(skrb)%3<>0,1,0)      && визначаю кiлькiсть трiад
   ntriad=0
   st=0
   csum=''

    if val(skrb)>0      && nsum>0                   && ї гривнi? (skrb)
      skrb=space(ntriads*3-len(skrb))+skrb     && добавити пробiли неповнiй т.
        for ntriad=ntriads to 1 step -1
           nt=str(ntriad,1)
           st=substr(skrb,(ntriads-ntriad)*3+;
                           if(ntriads-ntriad>0,1,0),3)  && видiляю трiаду
           csum=csum+if(st=='000','',;
                     strtriad(@st,akrb&nt[5])+' '+;
                      akrb&nt[1]+akrb&nt[ind(val(substr(st,2)))]+' ')
        next ntriad
* дописати назву грошовоi одиницi коли остання трiада '000'
        csum=csum+if(st=='000'.and.skrb<>'0',akrb&nt[1]+akrb&nt[ind(val(st))]+' ','')
* дописати копiйки
        csum=csum+if(nkop<10,'0','')+ltrim(str(nkop,2))+' '+;
                     akop[1]+akop[ind(nkop)]
    elseif nkop>0       && ї тўльки копўйки
        st='0'+right(ssum,2)
        csum=strtriad(@st,.t.)+' '+akop[1]+akop[ind(nkop)]
*        csum=csum+if(nkop<10,'0','')+ltrim(str(nkop,2))+' '+;
*                     akop[1]+akop[ind(nkop)]
    endif
    csum=rupper(substr(csum,1,1))+substr(csum,2)
 RETURN csum

*
* in: @st - адрес трiади
*     ltriad - .f. трiада чоловiчого роду, .t. трiада жiночого роду
* out: трiада словами
*
 FUNCTION strtriad
 PARAMETERS st,ltriad
 PRIVATE digit,t,c
    t=val(st)
    c=''
    if t>99
      digit=int(t/100)
      c=adigits3[digit+1]+' '
      t=t%100
    endif
    if t>19
      digit=int(t/10)
      c=c+adigits2[digit-1]+' '
      t=t%10
    endif
    if (ltriad.and.t<3)         && трiада ж. роду
      c=c+adigitst[t+1]
    else
      c=c+adigits1[t+1]+iif(t>10,over10,'')
    endif
 RETURN c

*
* in: n - число                 && i - цiле число<20
* out: iндекс закiнчення
*
 FUNCTION ind
 PARAMETERS n
    i=if(n<20,n,n%10)
 RETURN if(i==1,2,if(i>=2.and.i<=4,3,4))

=-=-=-=-=
Powered by Blogilo

SQL-клієнт для H2Database

SQL-клієнт для H2Database

Перебрав не менше десятка SQL-клієнтів для роботи із сервером H2Database та всі вони мене чимось не влаштовували. Штатна SQL-консоль з web-інтерфейсом теж не найкращий варіант.

Використовую ExecuteQuery.

– Написаний на java.

– Просто додати JDBC-драйвер.

=-=-=-=-=
Powered by Blogilo

Окремі файли .bash_history для різних сеансів konsole.

bash має безліч корисних параметрів і налаштувань. Однак, якщо ви відкриваєте одночасно кілька вкладок konsole, то всі команди записуються в один файл .bash_history. Іноді це дуже незручно. Тому, напевно, і виникала думка про впорядкування історії команд. Ідея не нова і виникає у всесвітній мережі в тій або іншій формі. Проблема в тому, що необхідно визначитися, як їх впорядкувати, за якою ознакою. Серед інших варіантів є пропозиція визначати файл історії за номером відкритого сеансу konsole. Але як визначити при наступному запуску, якому вікну або вкладці який сеанс належить?

Тож, перебравши кілька варіантів, я вибрав наступний, який використовує змінну PROFILEHOME.

Вираз ${PROFILEHOME##*/} виділяє останній елемент рядка змінної PROFILEHOME. Рядок не повинен закінчуватися "/".

Фрагмент коду, який необхідно додати у файл, .bashrc.

###
# встановити назву файлу .bash_history відповідну змінній PROFILEHOME,
# яка має значення, встановлене в налаштуваннях профілю konsole "Початковий каталог"
# 
export PF=${PROFILEHOME##*/}
if [ ".$PF." == ".." ]; then
  export PF=.bash_history
else
  export PF=.bash_history.$PF
fi

# назва файлу історії
export HISTFILE=$HOME/$PF

# кількість рядків у файлі історії
export HISTSIZE=1024
# формат записів у файлі історії
export HISTTIMEFORMAT='%F %T '
###

=-=-=-=-=
Powered by Blogilo