LINUX.ORG.RU

Сообщения ilyaGor

 

samsung odyssey g5 отключается и требует нажимать кнопку включения

Форум — Linux-hardware

Подскажите, пожалуйста, обладатели моника samsung odyssey g5 32 дюйма, как это убрать и можно ли вообще? Гаснет через несколько часов вне зависимости от того, пользуешься или нет компом. Если вечером, выключая комп, он ещё работал, то утром уже отключен и включая сам комп, обязательно нужно включить на кнопку и моник. А может потухнуть и прямо во время использования.

 

ilyaGor
()

Сделать hard python скрипт

Форум — Job

Для задач по работе требуется скрипт. Проекты с которыми работаю имеют специфику - корневой файл единый, меняется полностью после каждого изменения т.е. в него никак не влезть командной строкой. Поэтому все действия, которые требуются с проектами тыкаются мышью. Например, скопировать список названий из 100 объектов с одного окна стороннего приложения и вставить в другое - окно программы. Это приходится делать по одному названию. Т.е. выбрал, нажал f2, открыл другое окно - вставил. Скрипт ниже делает это сам, но его нужно улучшить. Как именно?

  1. требуется интерфейс с кнопками запуска
  2. Улучшить эту версию скрипта так, чтобы можно было брать больше объектов, чем размер экрана, а то каждый раз пока приходится заново его запускать, когда дошёл до конца экрана.
  3. требуется отдельный скрипт в рамках этой программы, который читает с экселя определённый столбец и строки, затем вставляет значения в программу.
  4. требуется отдельный скрипт, который перетаскивает мышкой из точки А в точку Б заданное количество раз и на каждой итерации грамотно смещается вниз, чтобы перетащить следующий объект списка.

Все скрины видео и более детальную информацию дам, кто захочет сделать. Цену обсудим.

import keyboard
import threading
import time
import pyautogui
import sys
stop=False

def exit_on_esc():
    """
    Непрерывно проверяет нажатые клавиши
    В случае нажатия ESC переменная выхода меняется на True и происходит выход
    :return:
    """

    while True:
        key=keyboard.read_key()
        if key in ['esc']:
            global stop
            stop=True
            sys.exit()
def get_average_coordinates(message, duration=5, count=5):
    """4651513
    :param message: Сообщение которое будет выдаватьтся пользователю перед считыванием координат
    :param duration: Определяет время (в секундах) в течении которых будет считываться коо-ты
    :param count: Определять точность среднего, на какое колличество частей будет биться среднее
    :return: Средние координаты курсора
    """
    print("Приготовьтесь навести курсор на объект.")
    if stop == True:
        sys.exit()
    # time.sleep(3)
    for i in range(5):
        print(5-i)
        time.sleep(1)
        # Задержка перед считыванием координат
    print(message)
    # for i in range(duration):
    #     print(duration-i)
    #     time.sleep(1)
    x_coodrs=[]
    y_coords=[]

    for i in range(duration):
        if stop == True:
            sys.exit()
        x,y=pyautogui.position()
        x_coodrs.append(x)
        y_coords.append(y)
        time.sleep(duration/count)
    time.sleep(duration)
    avg_x =sum(x_coodrs)/len(x_coodrs)
    avg_y = sum(y_coords)/len(y_coords)
    return (avg_x, avg_y)
    print(avg_x, avg_y)

def get_repetitions():
    while True:
        try:
            if stop==True:
                sys.exit()
            repetitions = int(input("Введите количество повторений и нажмите Enter: "))
            return repetitions
        except ValueError:
            print("Ошибка! Введите корректное число.")

def main():
    # Запросить координаты первого и второго объекта от пользователя

    coord1 = get_average_coordinates("Поместите курсор на первый объект и удерживайте в течение 5 секунд.")
    coord2 = get_average_coordinates("Поместите курсор на второй объект и удерживайте в течение 5 секунд.")

    repetitions = get_repetitions()

    # Задание №5
    # Время задержки перед копированием 8 секунд
    print('Переключитесь на оба проекта и подготовьтесь к копированию')
    time.sleep(5)
    for i in range(5):
        print(5-i)
        time.sleep(1)

    for i in range(repetitions):
        if stop == True:
            sys.exit()
        pyautogui.moveTo(coord1)
        pyautogui.click()
        pyautogui.press('down', presses=i)
        
        pyautogui.press('f2')
        pyautogui.hotkey('ctrl', 'c')

        pyautogui.hotkey('alt', 'tab')

        pyautogui.moveTo(coord2)
        pyautogui.click()
        pyautogui.press('down', presses=i)
        pyautogui.press('f2')
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.press('enter')

        pyautogui.hotkey('alt', 'tab')

if __name__ == "__main__":
    exit_thread = threading.Thread(target=exit_on_esc)
    exit_thread.start()
    main_thread = threading.Thread(target=main)
    main_thread.start()

 ,

ilyaGor
()

Вопрос по input time form (js)

Форум — Development

Моя форма «два нижних подчёркивания:два нижних подчёркивания» Как сделать чтобы в js input time форме 0 автоматом подтягивался если указываем менее 10 часов?

HTMLElement.prototype.timeMask = function() {
    let mask = new IMask(this, {
        mask: 'H:M',
        lazy: false,
        placeholderChar: '_',
        blocks: {
            H: {
                mask: IMask.MaskedRange,
                from: 0,
                to: 23,
                maxLength: 2,
                overwrite: true,
            },
            M: {
                mask: IMask.MaskedRange,
                from: 0,
                to: 59,
                maxLength: 2,
            }
        }
    })

    mask.type = 'time'
    this.mask = mask
}

Возможно нужно где-то ещё посмотреть код, если так подскажите. Форма не принимает первую цифру начинающуюся НЕ с 0, 1 или 2, но мне нужно чтобы если мы вводим ранее 10 часов первый ноль в форме автоматом проставлялся, подскажите добрые разработчики, как это сделать?

 , ,

ilyaGor
()

Python скрипт кликающий по экрану

Форум — Development

Переношу проект с одной версии программы на другую, т.к. импорт невозможен, использую копипаст объектов. Есть рутинная задача по копированию названий объектов, в корне проекта их нет, поэтому копировать название возможно только тыкая по экрану в чём python мне и помог.

Вот такой код

import keyboard
import threading
import time
import pyautogui

#import pyautogui - координаты мышки
#pyautogui.displayMousePosition()

def exit_on_esc():
    while True:
        if keyboard.is_pressed('esc'):
            exit(1)

def main():
    #задержка перед началом работы скрипта
    time.sleep(10)

    #находимся на первом проекте

    #определяем количество повторений
    repetitions = 6

    for i in range(repetitions):
        # нажимаем F2, чтобы выделить название объекта
        pyautogui.moveTo(133, 819) # координаты первого объекта
        pyautogui.click()
        pyautogui.press('down', presses=i)
        pyautogui.press('f2')
        #копируем название в буфер обмена
        pyautogui.hotkey('ctrl', 'c')
    
        #переключаемся на второй проект
        pyautogui.hotkey('alt', 'tab')

        # вводим новое название объекта 
        pyautogui.moveTo(133, 772)
        pyautogui.click()
        pyautogui.press('down', presses=i)
        pyautogui.press('f2')
        pyautogui.hotkey('ctrl', 'v')
        pyautogui.press('enter')

        # переключаемся на первый проект
        pyautogui.hotkey('alt', 'tab')


if __name__ == "__main__":
    # Запуск потока с отлавливанием нажатия ESC
    exit_thread = threading.Thread(target=exit_on_esc)
    exit_thread.start()

    # Запуск основного потока
    main_thread = threading.Thread(target=main)
    main_thread.start()

#скрипт выполнен!

Все хорошо работает, но каждый раз приходиться в ручную забивать координаты сначала одного экрана с первым проектом, затем второго со вторым. Может кто-то помочь чтобы координаты как-то сами определялись после первого нажатия на один объект и затем на второй, а потом чтобы всё запускалось?

 ,

ilyaGor
()

Free Pascal программа в терминале

Форум — Development

Упражняюсь в задачах, ранее написал програмку, которая отображает сетку звездочек 10x10 в центре экрана консоли. Символ # перемещается по периметру сетки по часовой стрелке с задержкой в 100 миллисекунд между каждым шагом. Пользователь может приостановить и возобновить анимацию, нажав пробел. Анимация продолжается до тех пор, пока пользователь не нажмет какую-либо клавишу. Программа использует модули SysUtils и Crt для различных функций, включая сон и clrscr. Процедура DrawGrid рисует сетку в заданной позиции x, y, а процедура MoveGrid анимирует движение символа # по периметру сетки.

Вот полный код:

program clrsrceen;
uses Crt, SysUtils;

const
  Width = 12;
  Height = 12;
  Delay = 100;
  GridWidth = 10;
  GridHeight = 10;
  GridBack = '*';
  GridRunner = '#';

procedure DrawGrid(x, y: Integer);
var
  i, j: Integer;
begin
  for i := 0 to GridHeight - 1 do begin
    GotoXY(x, y + i);
    for j := 0 to GridWidth - 1 do
      Write(GridBack);
  end;
end;

procedure MoveGrid(x, y: Integer);

  procedure Animate;
  var
    i: Integer;
  begin
    for i := 0 to GridWidth - 1 do begin
      GotoXY(x + i, y);
      Write(GridRunner);
      GotoXY(x + i, y);
      Sleep(Delay);
      Write(GridBack);
      if KeyPressed then Exit;
    end;
    for i := 0 to GridHeight - 1 do begin
      GotoXY(x + GridWidth - 1, y + i);
      Write(GridRunner);
      GotoXY(x + GridWidth - 1, y + i);
      Sleep(Delay);
      Write(GridBack);
      if KeyPressed then Exit;
    end;
    for i := GridWidth - 1 downto 0 do begin
      GotoXY(x + i, y + GridHeight - 1);
      Write(GridRunner);
      GotoXY(x + i, y + GridHeight - 1);
      Sleep(Delay);
      Write(GridBack);
      if KeyPressed then Exit;
    end;
    for i := GridHeight - 1 downto 0 do begin
      GotoXY(x, y + i);
      Write(GridRunner);
      GotoXY(x, y + i);
      Sleep(Delay);
      Write(GridBack);
      if KeyPressed then Exit;
    end;
  end;

begin
  while not KeyPressed do begin
    GotoXY(1, 1);
    Animate;
  end;
  if ReadKey = #0 then ReadKey;
end;

var
  x, y: Integer;
begin
  ClrScr;
  x := (ScreenWidth - GridWidth) div 2;
  y := (ScreenHeight - GridHeight) div 2;
  DrawGrid(x, y);
  MoveGrid(x, y);
  ClrScr;
end.

Потом возникла необходимость изменить так, чтобы программа закрывалась только нажатием Esc, на стрелки влево и вправо менялась скорость задержки и нажатием пробел менять направление движения решетки. вот что я сам попытался сделать. Но вот это не работает, хотя и компилируется, но теперь кнопки вообще безразличны программе. Подскажите как правильно сделать, и как переписать процедуру Animate без такого количества почти одинаковых блоков.

program clrscreenmode;
uses SysUtils, Crt;

const
   width      = 12;
   height     = 12;
   delay      = 100;
   gridWidth  = 10;
   gridHeight = 10;
   gridBack   = '*';
   gridRunner = '#';

var
  EscPressed: Boolean;

function IsEscPressed(): Boolean;
begin
  if (not EscPressed) and KeyPressed() then
    EscPressed := ReadKey() = #27;

  IsEscPressed := EscPressed;
end;

procedure DrawGrid(x, y	: integer);
var
   i, j	: integer;
begin
   for i := 0 to gridHeight - 1 do begin
      gotoXY(x, y + i);
      for j := 0 to gridWidth - 1 do
	 write(gridBack);
   end;
end;

procedure MoveGrid(x, y	: integer);

  procedure Animate(x, y: integer; forward: Boolean);
  var
   i	: integer;
  begin
   if forward then begin
      for i := 0 to gridWidth - 1 do begin
	 gotoXY(x + i, y);
	 write(gridRunner);
	 gotoXY(x + i, y);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
	 if IsEscPressed then exit;
      end;
      for i := 0 to gridHeight - 1 do begin
	 gotoXY(x + gridWidth - 1, y + i);
	 write(gridRunner);
	 gotoXY(x + gridWidth - 1, y + i);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
         if IsEscPressed then exit;
      end;
         for i := gridWidth - 1 downto 0 do begin
	 gotoXY(x + i, y + gridHeight - 1);
	 write(gridRunner);
	 gotoXY(x + i, y + gridHeight - 1);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
	 if IsEscPressed then exit;
      end;
      for i := gridHeight - 1 downto 0 do begin
	 gotoXY(x, y + i);
	 write(gridRunner);
	 gotoXY(x, y + i);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
	 if IsEscPressed then exit;
      end;
   end
   else begin
      for i := gridWidth - 1 downto 0 do begin
	 gotoXY(x + i, y);
	 write(gridRunner);
	 gotoXY(x + i, y);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
	 if IsEscPressed then exit;
      end;
      for i := gridHeight - 1 downto 0 do begin
	 gotoXY(x, y + i);
	 write(gridRunner);
	 gotoXY(x, y + i);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
         if IsEscPressed then exit;
      end;
      for i := 0 to gridWidth - 1 do begin
	 gotoXY(x + i, y + gridHeight - 1);
	 write(gridRunner);
	 gotoXY(x + i, y + gridHeight - 1);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
	 if IsEscPressed then exit;
      end;
      for i := 0 to gridHeight - 1 do begin
	 gotoXY(x + gridWidth - 1, y + i);
	 write(gridRunner);
	 gotoXY(x + gridWidth - 1, y + i);
	 sleep(delay);
	 write(gridBack);
	 if KeyPressed and (ReadKey = ' ') then forward := not forward;
	 if IsEscPressed then exit;
      end;
   end;
end;

var
   forward: Boolean;
begin
   forward := True;
   repeat
      gotoXY(1, 1);
      Animate(x, y, forward);
      if KeyPressed and (ReadKey = ' ') then forward := not forward;
   until IsEscPressed();
end;

var
   x, y	: integer;
begin
   clrscr;
   x := (screenWidth - gridWidth) div 2;
   y := (screenHeight - gridHeight) div 2;
   DrawGrid(x, y);
   MoveGrid(x, y);
   clrscr;
end.

 ,

ilyaGor
()

Emacs с автодополнением и подсказками для Fedora Linux

Форум — Development

Подскажите, как настроить в Emacs автодополнение и подсказки, по типу, как в терминале. Со своим, постоянно пополняющимся словарём для всего, либо для java и pascal. И если возможно, то как сделать автоматом проверки скобок. Скачивал через пакетный менеджер внутри Emacs плагины jdee, auto-correct, auto-complete, но они во первых с ошибками устанавливались, там было много строк Warning, во вторых при попытке добавить их в .emacs слетали некоторые ранее добавленные настройки. Может я, конечно, не правильно прописывал, но факт такой есть. С git, если всё это качать и ручную класть в .emacs.d тоже возникают проблемы, т.к. я на федоре не могу выполнить в них make install.

 , ,

ilyaGor
()

Pascal полноэкранная программа в терминале

Форум — Development

Есть код программы. Она рисует арену звёздочек и по контуру ходит символ решётка, пока пользователь не нажмёт какую-либо клавишу. Работает не совсем так как мне хотелось бы. Помогите улучшить, а именно чтобы после каждого прохождения символа решётки по всей траектории, второй и последующие циклы этого прохождения делались бы точно на тех же координатах, а не со смещением вниз. Если это конечно возможно сделать в терминале. И когда сейчас нажимаю любую кнопку, программа в принципе останавливается, но с большой задержкой, помогите сделать без задержки. И в целом оптимизировать код, если получится. Заранее благодарю.

program ClearScreen;
uses crt, sysutils;

const
  width = 12;
  height = 12;
  delay = 100;

var
  x, y, i, j : Integer;
  ch : Char;
  x_coord, y_coord : Integer;

procedure DrawGrid(x, y : Integer);
begin
  for i := 0 to 9 do
  begin
    for j := 0 to 9 do
    begin
      gotoxy(x + i, y + j);
      write('*');
    end;
  end;
end;

procedure MoveGrid(var x, y : Integer);
var
  dirX, dirY : Integer;
begin
  dirX := 1;
  dirY := 1;
  x_coord:= x;
  y_coord:= y;
  while not keypressed do
  begin
    for i := 0 to 9 do
    begin
      gotoxy(x_coord + i, y_coord);
      write('#');
      sleep(delay);
      gotoxy(x_coord + i, y_coord);
      write('*');
    end;
    for i := 0 to 9 do
    begin
      gotoxy(x_coord + 9, y_coord + i);
      write('#');
      sleep(delay);
      gotoxy(x_coord + 9, y_coord + i);
      write('*');
    end;
    for i := 9 downto 0 do
    begin
      gotoxy(x_coord + i, y_coord + 9);
      write('#');
      sleep(delay);
      gotoxy(x_coord + i, y_coord + 9);
      write('*');
    end;
    for i := 9 downto 0 do
    begin
      gotoxy(x_coord, y_coord + i);
      write('#');
      sleep(delay);
      gotoxy(x_coord, y_coord + i);
      write('*');
    end;

    if (x_coord = 0) or (y_coord = 0) or (x_coord = width-10) or (y_coord = height-10) then
    begin
      if (x_coord = width-10) then
        dirX := -1;
      if (x_coord = 0) then
        dirX := 1;
      if (y_coord = height-10) then
        dirY := -1;
      if (y_coord = 0) then
        dirY := 1;
    end;
    x_coord := x_coord + dirX;
    y_coord := y_coord + dirY;
    gotoxy(1,1);
    writeln('X:', x, ' Y:', y);
  end;
end;

begin
  clrscr;
  x := (ScreenWidth div 2) - 5;
  y := (ScreenHeight div 2) - 5;
  repeat
    DrawGrid(x, y);
    MoveGrid(x, y);
    ch := readkey;
  until ord(ch) <> 0;
  clrscr;
end.

 

ilyaGor
()

Добавить виджет к сайту wordpress

Форум — Web-development

Посдкажите, как на сайте, который написан на своей теме worpress, где всё редактируется исключительно через код, добавить виджет. В header сайта есть номер телефона, который хотелось бы менять не кодом, а через интерфейс, но только тем пользователем, у кого есть права администратора. То есть не создать новый виджет и прописать номер телефона, а именно взять под контроль элемент, который уже написан.

define('PHONES', [

	 [
	 	'tel' => '+7 900 000-00-00',
	 	'link'	=> unmask_phone('+7 900 000-00-00')
	 ]
]);

Перемещено ilinsky из development

 , ,

ilyaGor
()

Автоматизация рутины

Форум — General

Подскажите, как можно автоматизировать примитивное действие в браузере. На сайте под 3 сотни поддоменов, при переезде на другой хостинг возникли сложности с их переносом. Там нужно каждый вписать и добавить в панель в ручную. Это несколько действий и несколько тыканий мышки. Есть у кого-то в арсенале что-то типа снипета, который может сам это всё делать, просто получая список доменов. Чего-то специально предусмотренного для этого у сервиса нет.

 ,

ilyaGor
()

Скопировать сайт

Форум — Security

Сайт был изначально сделан на wordpress, затем к нему добавилась значительная часть кода. В результате защиты от копирования нет, его удаётся скачать с помощью wget c ключами -r -k -l 7 -p -E -nc. Если запустить на локалке index.html полученное с виду идентично работает, но картинки подгружаются с оригинала, если внимательно посмотреть на ссылки в коде. Вопрос, можно ли как-то автоматизированно скачать все картинки и заменить их в местах ссылок на уже скачанные, т.к. в ручную это нереальный объём учитывая все поддомены? Не вижу также в скопированном на локалке сайте фалов js, там только html и никаких стандартных папок wordpress, подскажите как можно скачать всё?

 

ilyaGor
()

Pascal системы исчисления

Форум — Development

Подскажите, как реализовать в данной процедуре возможность выбора разных систем исчисления, в которой она также сможет делать посимвольный ввод?

procedure ReadLongint (var success : boolean; var result : longin);
var
   c   : char;
   res : longint;
   pos :  integer;
begin
   res := 0;
   pos := 0;
   repeat
      read(c);
      pos := pos + 1
   until (c <> ' ') and (c <> #10);
   while (c <> ' ') and (c <> #10) do
   begin
      if (c < '0') or (c > '9') then
      begin
	 writeln('Unexpected ''', c, ''''' in pos: ', pos);
	 readln;
	 success := false;
	 exit
      end;
      res := res*10 + ord(c) - ord('0');
      read(c);
      pos := pos + 1
   end;
   result := res;
   success := true
  end;

 

ilyaGor
()

Помощь с Apache POI в java

Форум — Development

Подскажите, кто хорошо владеет библиотекой Apache POI на java. У меня есть ежедневная рутинная задача на работе, для которой я написал код и он в принципе работает, но значительную часть действий нужно всё таки совершать в ручную. Хочу улучшить. Ниже код, прошу сильно не ругать, я не профессиональный программист. Суть его следующая - есть пустой бланк образец, с формой на первой странице и два скачанных файла с межсетевого экрана. Один файл - логи по входам в систему, второй файл - почтовый трафик. Код создаёт новый файл, полностью копирует образец на первый лист, а на его второй и третий лист копирует содержимое файла логов входа и почты в те столбцы, которые я ему прописал.

public class Report {

	public static void main(String[] args) throws IOException {
		
		String filenameIndentity = getFileName("C:\\Users\\username\\Downloads", "^FileNameLog");
		String filenameMTA = getFileName("C:\\Users\\username\\Downloads", "^FileNameEmail");
		String filenameRepord = getFileName("S:\\папка\\46\\Отчёты 10.2022", "^отчёт за сутки образец");
		
		FileInputStream fileRepord = new FileInputStream(new File(filenameRepord));
		XSSFWorkbook repord = new XSSFWorkbook(fileRepord);
		Sheet sheetIndentity = repord.getSheet("в сети ООО \"Имя компании\"");
		Sheet sheeeetMTA = repord.getSheet("почта 24");
		
		FileInputStream fileIndentity = new FileInputStream(new File(filenameIndentity));
		XSSFWorkbook indentity = new XSSFWorkbook(fileIndentity);
		Sheet logIndentity = indentity.getSheet("Logs_Table");	
		
		FileInputStream fileMTA = new FileInputStream(filenameMTA);
		XSSFWorkbook mta = new XSSFWorkbook(fileMTA);
		Sheet logMTA = mta.getSheet("Logs_Table");	
		
		Set<Integer> columns = new HashSet<Integer>();
		Row row2 = null;
		Cell cell2 = null;
		for (Row row1 : logIndentity) {	
		    row2 = sheetIndentity.createRow(row1.getRowNum());	  
		     for (Cell cell1 : row1) {	

//в строке ниже зачастую необходимый индекс не равен 23,
//межсетевой экран часто делает файл где он нужен 24. Подскажите,
//как реализовать здесь проверку, чтобы проверялось содержимое
//ячейки и в случае, если в ней цифры, менять индекс с 23 на 24
//либо с 24 на 23. 	
   
			     if (cell1.getColumnIndex() == 23) {  
				     columns.add(cell1.getColumnIndex());
				     cell2 = row2.createCell(0);
				     copyCells(cell1, cell2);
			     }
		     }
		 }
		
		
		
		for (Row row1 : logMTA) {
			row2 = sheeeetMTA.createRow(row1.getRowNum());
			 for (Cell cell1 : row1) {
				 if (cell1.getColumnIndex() == 12) {
					 columns.add(cell1.getColumnIndex());
					 cell2 = row2.createCell(0);
					 copyCells(cell1, cell2);
				 } else if (cell1.getColumnIndex() == 38) {
					 columns.add(cell1.getColumnIndex());
					 cell2 = row2.createCell(1);
					 copyCells(cell1, cell2);					 
				 } else if (cell1.getColumnIndex() == 39) {
					 columns.add(cell1.getColumnIndex());
					 cell2 = row2.createCell(2);
					 copyCells(cell1, cell2);	
				 }
				 
			 }
		}


		  for (Integer column : columns) {
		   sheetIndentity.autoSizeColumn(column);
		  }	
		  
		  FileOutputStream out = new FileOutputStream("S:\\папка\\отчёт за сутки 21.10.2022.xlsx");
		  repord.write(out);
		  out.close();
		  repord.close(); 
		  fileRepord.close();
		  fileMTA.close();
		  fileIndentity.close();
		 
		  final Logger logger = Logger.getLogger(Report.class.getName());
		  logger.info("Собрал, всё ахеренно, отправляй");
		 
	}
	
	static Font copyFont(Font font1, Workbook wb2) {
		  boolean isBold = font1.getBold();
		  short color = font1.getColor();
		  short fontHeight = font1.getFontHeight();
		  String fontName = font1.getFontName();
		  boolean isItalic = font1.getItalic();
		  boolean isStrikeout = font1.getStrikeout();
		  short typeOffset = font1.getTypeOffset();
		  byte underline = font1.getUnderline();

		  Font font2 = wb2.findFont(isBold, color, fontHeight, fontName, isItalic, isStrikeout, typeOffset, underline);
		  if (font2 == null) {
		   font2 = wb2.createFont();
		   font2.setBold(isBold);
		   font2.setColor(color);
		   font2.setFontHeight(fontHeight);
		   font2.setFontName(fontName);
		   font2.setItalic(isItalic);
		   font2.setStrikeout(isStrikeout);
		   font2.setTypeOffset(typeOffset);
		   font2.setUnderline(underline);
		  }

		  return font2;
		 }
	
	 static void copyStyles(Cell cell1, Cell cell2) {
		  CellStyle style1 = cell1.getCellStyle();
		  Map<String, Object> properties = new HashMap<String, Object>();

		  //CellUtil.DATA_FORMAT
		  short dataFormat1 = style1.getDataFormat();
		  if (BuiltinFormats.getBuiltinFormat(dataFormat1) == null) {
		   String formatString1 = style1.getDataFormatString();
		   DataFormat format2 = cell2.getSheet().getWorkbook().createDataFormat();
		   dataFormat1 = format2.getFormat(formatString1);
		  }
		  properties.put(CellUtil.DATA_FORMAT, dataFormat1);

		  //CellUtil.FILL_PATTERN  
		  //CellUtil.FILL_FOREGROUND_COLOR 
		  FillPatternType fillPattern = style1.getFillPattern();
		  short fillForegroundColor = style1.getFillForegroundColor(); //gets only indexed colors, no custom HSSF or XSSF colors
		  properties.put(CellUtil.FILL_PATTERN, fillPattern);
		  properties.put(CellUtil.FILL_FOREGROUND_COLOR, fillForegroundColor);

		  //CellUtil.FONT
		  Font font1 = cell1.getSheet().getWorkbook().getFontAt(style1.getFontIndexAsInt());
		  Font font2 = copyFont(font1, cell2.getSheet().getWorkbook());
		  properties.put(CellUtil.FONT, font2.getIndexAsInt());

		  //BORDERS
		  BorderStyle borderStyle = null;
		  short borderColor = -1;
		  //CellUtil.BORDER_LEFT 
		  //CellUtil.LEFT_BORDER_COLOR
		  borderStyle = style1.getBorderLeft();
		  properties.put(CellUtil.BORDER_LEFT, borderStyle);
		  borderColor = style1.getLeftBorderColor();
		  properties.put(CellUtil.LEFT_BORDER_COLOR, borderColor);
		  //CellUtil.BORDER_RIGHT 
		  //CellUtil.RIGHT_BORDER_COLOR
		  borderStyle = style1.getBorderRight();
		  properties.put(CellUtil.BORDER_RIGHT, borderStyle);
		  borderColor = style1.getRightBorderColor();
		  properties.put(CellUtil.RIGHT_BORDER_COLOR, borderColor);
		  //CellUtil.BORDER_TOP 
		  //CellUtil.TOP_BORDER_COLOR
		  borderStyle = style1.getBorderTop();
		  properties.put(CellUtil.BORDER_TOP, borderStyle);
		  borderColor = style1.getTopBorderColor();
		  properties.put(CellUtil.TOP_BORDER_COLOR, borderColor);
		  //CellUtil.BORDER_BOTTOM 
		  //CellUtil.BOTTOM_BORDER_COLOR
		  borderStyle = style1.getBorderBottom();
		  properties.put(CellUtil.BORDER_BOTTOM, borderStyle);
		  borderColor = style1.getBottomBorderColor();
		  properties.put(CellUtil.BOTTOM_BORDER_COLOR, borderColor);

		  CellUtil.setCellStyleProperties(cell2, properties);
		 }
	 static void copyCells(Cell cell1, Cell cell2) {
		  switch (cell1.getCellType()) {
		   case STRING:
		   /*
		    //TODO: copy HSSFRichTextString to XSSFRichTextString 
		    RichTextString rtString1 = cell1.getRichStringCellValue();
		    cell2.setCellValue(rtString1); // this fails if cell2 is XSSF and rtString1 is HSSF
		   */
		    String string1 = cell1.getStringCellValue();
		    cell2.setCellValue(string1);
		   break;
		   case NUMERIC:
		    if (DateUtil.isCellDateFormatted(cell1)) {
		     Date date1 = cell1.getDateCellValue();
		     cell2.setCellValue(date1);
		    } else {
		     double cellValue1 = cell1.getNumericCellValue();
		     cell2.setCellValue(cellValue1);
		    }
		   break;
		   case FORMULA:
		    String formula1 = cell1.getCellFormula();
		    cell2.setCellFormula(formula1);
		   break;

		   //case : //TODO: further cell types

		  }

		  copyStyles(cell1, cell2);

		 }	
	 
	 public static String getFileName(String pFilePath, String pFilePattern) throws IOException {

		 Pattern pattern = Pattern.compile(pFilePattern);
		 String fileName = null;
		 File fileDir = new File(pFilePath);
		 File[] listFiles = fileDir.listFiles();

		 if (listFiles != null) {
		 for (int i = 0; i < listFiles.length; i++) {
		 // ignore directories
		 if (listFiles[i].isDirectory()) {
		 continue;
		 }
		 Matcher fileMatcher = pattern.matcher(listFiles[i].getName());
		 if (fileMatcher.find()) {
		 fileName = listFiles[i].getCanonicalPath();
		 }
		 } // end for()
		 }

		 return fileName;
		 }
	
}

В конечном файле в ручную на третьем листе с почтой удаляю первую строку листа, а на втором листе с логами входа в систему удаляю первую строку листа, сортирую список в единственном столбце (индекс 0), удаляю дубликаты и удаляю некоторые ненужные учётки (начинаются со слов администратор, пользователь, представитель), нужны только фио сотрудников. Подскажите как это реализовать кодом и как реализовать то что закомментировано в коде выше.

 , ,

ilyaGor
()

Отрисовать таблицу ASCII

Форум — Development

Есть код, который печатает таблицу с нарастанием символов по столбцам:

program PrintSym;
var
   i, j : integer;
   c    : char;
begin
   write('  |');
   for c:='0' to '9' do
       write(' .', c);
   for c:='A' to 'D' do
       write(' .', c);
   writeln;
   write('  |');
   for i:=1 to 14 do
      write('---');
   writeln;
   for i:=2 to 8 do
   begin
      write(i, '.|');
      for j:=0 to 13 do
     write('  ', chr(i*16+j));
      writeln
   end
end.

Результат:

  | .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D
  |------------------------------------------
2.|     !  "  #  $  %  &  '  (  )  *  +  ,  -
3.|  0  1  2  3  4  5  6  7  8  9  :  ;  <  =
4.|  @  A  B  C  D  E  F  G  H  I  J  K  L  M
5.|  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]
6.|  `  a  b  c  d  e  f  g  h  i  j  k  l  m
7.|  p  q  r  s  t  u  v  w  x  y  z  {  |  }
8.|  �  �  �  �  �  �  �  �  �  �  �  �  �  �

Подскажите, как можно переписать код, чтобы таблица нарастала не по столбцам, а по строкам вниз? То есть сейчас " 1, 2, 3" в третьей строке, в первом, втором и третьем столбцах, а как сделать чтобы они были все в первом столбце, с нарастанием вниз? Без перевода каретки. Никак не подберу вместо chr(i*16+j));

 ,

ilyaGor
()

Вакансия специалист по информационной безопасности г. Энгельс

Форум — Job

Добрый день, есть открытая вакансия, возможно заинтересует кого-то. Город Энгельс, это предприятие связанное с энергетикой (ЕПО Сигнал). Знание linux будет большим преимуществом. Обязанности:

  1. Реализовывать технические решения по информационной безопасности в соответствии с утвержденной архитектурой ИБ.
  2. Обеспечивать и контролировать доступ к информационным ресурсам.
  3. Подготовка отчетов, аналитических и информационных материалов;
  4. Мониторинг антивирусных систем
  5. Мониторинг IT инфраструктуры компании
  6. Проведения аудита автоматизированных систем по информационной безопасности.
  7. Разработка, внедрение, поддержка и совершенствование внутренних нормативных и/или распорядительных документов, регламентирующих процессы обеспечения информационной безопасности
  8. Проведения служебных расследований и проверок информационной безопасности

зп - 45 000р после вычетов в случае, если опыт до 5 лет, если опыт работы выше, зп по договорённости. Отчётности минимум. 1 большой кабинет, на двух человек.

телега либо ватсапп 89276241938

 , ,

ilyaGor
()

Поиск работы после 24 февраля

Форум — Talks

Объясняю ситуацию. Как многие молодые люди я планировал трудоустроится в разработку (в моём случае на java) и начал целенаправленно изучать этот язык чуть больше года назад.

Стартовал плавно, тратил минимум времени, но регулярно, потому что сфера деятельности для меня новая, вообще никогда не занимался программированием до этого. Цель - изучить всё необходимое для позиции джуна, в том числе подтянуть английский. Со временем, конечно, проекты, которые пишу для себя становятся интереснее, изучение становится более осмысленным и трудоёмким. Мне очень хотелось получить эту работу, я постоянно откликался на hh, даже понимая, что пока не тяну, но получал образцы тестовых заданий, беседовал с рекуртёрами и набивал руку. Постоянно отслеживал вакансии на других языках и на java и в принципе не торопился, потому что сходу 30-40 вакансий на джуна всегда было.

В Саратове, где я проживаю, до 24 февраля было около 15 представительств западных компаний. В январе этого года я уже чувствовал, что тяну с натяжкой и прошёл собеседование в одну из таких компаний, но также прошёл собеседование на позицию специалиста по ИБ в организации другого рода деятельности.

В половине из этих компаний у меня были друзья, которые после 24 февраля вроде бы не воспринимали новостные ленты в серьёз, но вот также плавно один за другим они побросали квартиры, за которые им ещё платить ипотеки и переместились из Саратова вместе со своими офисами в Казахстан/Грузию/Черногорию/Польшу/Латвию. Компании типа GridDynemics и тому подобным, у которых даже резюме присылалось исключительно на английском advanced уровня, испарились из нашего города до 1 марта. Epam, Netcracker, Haulmount и подобные, которые чуть более доступны, тоже ушли один за другим. В общем чисто из-за случайного стечения обстоятельств я выбрал ИБ. Если бы пошёл джуном, скорее всего я проработал бы ровно 2 месяца, т.к офисы, которые переехали забрали с собой только 10% сотрудников и это, как вы понимаете не джуны)).

Сейчас крайне непонятная ситуация на рынке, я так понимаю, западных денег мы больше не увидим в ближайшее время, возникает вопрос как теперь работать? Хочется всё-таки заниматься в будущем разработкой. Кто-то видит решение? Где сейчас можно работать разработчиком?

Перемещено xaizek из job

 , ,

ilyaGor
()

Введение в профессию (Столяров): MovingStar

Форум — Development

Добрый день. На 375 странице 1-й части трёхтомника Столярова есть задача на Free Pascal MovingStar. При запуске должно быть что-то типа змейки звёздочкой в консоли. Код из книги выглядит так.

program MovingStar;
uses crt;
const
   DelayDuration =  100;
procedure GetKey(var code : integer );

{ ... }

type
   star	=  record
        CurX, CurY, dx, dy : integer;
   end;

procedure ShowStar(var s : star);
begin
   GotoXY(s.CurX, s.CurY);
   write('*');
   GotoXY(1, 1);
end;

procedure HideStar(var s : star);
begin
   GotoXY(s.CurX, s.CurY);
   write(' ');
   GotoXY(1, 1)
end;

procedure MoveStar(var s : star);
begin
   HideStar(s);
   s.CurX := s.CurX + s.dx;
   if s.CurX > ScreenWidth then
      s.CurX := 1
   else
      if s.CurX < 1 then
      s.CurX := ScreenWidth;
   s.CurY := s.CurY + s.dy;
   if s.CurY > ScreenHeight then
      s.CurY := 1
   else
      if s.CurY < 1 then
	 s.CurY := ScreenHeight;
   ShowStar(s)
end;

procedure SetDirection(var s : star; dx, dy: integer);
begin
   s.dx := dx;
   s.dy := dy
end;

var
   s  : star;
   ch : char;
begin
   clrscr;
   s.CurX := ScreenWidth div 2;
   s.CurY := ScreenHeight div 2;
   s.dx := 0;
   s.dy := 0;
   ShowStar(s);
   while true do
   begin
      if not KeyPressed then
      begin
	 MoveStar(s);
	 delay(DelayDuration);
	 continue
      end;
      GetKey(c);
      case c of
	-75 : SetDirection(s, -1, 0);
	-77 : SetDirection(s,  1, 0);
	-72 : SetDirection(s, 0, -1);
	-80 : SetDirection(s, 0, 1);
	 32 : SetDirection(s, 0, 0);
	 27 : break
      end
   end;
   clrscr
end.

Там сокрыто тело процедуры GetKey для экономии места, но оно есть в предыдущей задаче, откуда я его и взял. Вот так выглядит полностью процедура GetKey

procedure GetKey(var code : integer );
var
   c : char;
begin
   c := ReadKey;
   if c = #0 then
   begin
      c := ReadKey;
      code := -ord(c)
   end
   else
   begin
      code := ord(c)
   end
end;

Но при попытки компиляции выдаёт ошибку:

Free Pascal Compiler version 3.2.2+dfsg-11 [2022/05/26] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling MovingStar.pas
MovingStar.pas(83,14) Error: Identifier not found "c"
MovingStar.pas(84,12) Error: Identifier not found "c"
MovingStar.pas(85,6) Error: Constant and CASE types do not match
MovingStar.pas(86,6) Error: Constant and CASE types do not match
MovingStar.pas(87,6) Error: Constant and CASE types do not match
MovingStar.pas(88,6) Error: Constant and CASE types do not match
MovingStar.pas(89,6) Error: Constant and CASE types do not match
MovingStar.pas(90,6) Error: Constant and CASE types do not match
MovingStar.pas(95) Fatal: There were 8 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode

Строка 83 - это как раз вызов GetKey(c) в бесконечном цикле while. Проблема явно в этой процедуре, подскажите, как сделать правильно.

Перемещено hobbit из general

 ,

ilyaGor
()

Установка Emacs на Kali linux

Форум — General

Помогите запустить Emacs. Сначала попробовал установить его, используя пакетные менеджеры. На эти комманды терминал мне выдал следующее:

sudo apt-get install emacs - E: Невозможно найти пакет emacs

sudo dnf install emacs - command not found

Не проблема, подумал я, скачал сам версию, командой wget https://ftp.gnu.org/gnu/emacs/emacs-28.1.tar.xz

распаковал, перешёл в распакованную директорию, ввёл ./configure, затем make, затем make install. Всё как указано в документации. Вообще процесс шёл нормально, ошибок никаких не выдал, кроме этой make: *** [GNUmakefile:108: Makefile] Ошибка 1

но при попытке запуска после установки пишет -

─$ emacs Could not find command-not-found database. Run ‘sudo apt update’ to populate it. emacs: command not found

Несколько раз обновлял, перезапускал комп, переустанавливал разные версии emacs. Ничего не помогло. Подскажите, как сделать?

 

ilyaGor
()

Fedora 36. Не запускается Kali Linux в VirtualBox

Форум — General

Установил, VirtualBox, загрузил туда образ, при попытке запуска выдаёт ошибку. Подскажите новичку.

Kernel driver not installed (rc=-1908)

The VirtualBox Linux kernel driver (vboxdrv) is probably not loaded.You may not have kernel driver installed for kernel that is runnig, if so you may do as root: dnf install akmod-VirtualBox kernel-devel-$(uname -r)If you installed VirtualBox packages and don’t want reboot the system, you may need load the kernel driver, doing as root: akmods; systemctl restart vboxdrv.service

If your system has EFI Secure Boot enabled you may also need to sign the kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load them. Please see your Linux system’s documentation for more information.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

kernel установлен и обновлён несколько раз.

 , , ,

ilyaGor
()

RSS подписка на новые темы