Чтиво за последнее время

Попадос. Засеев Гурам. Мир EVO. нейросети, аграфы, древние, Джоре. Ну в общем то не особо захватывающий и новый сюжет. Читабельность 3/5

Имя нам Легион. Дворничев Дмитрий, Лисицин Евгений. Сюжет: Одного товарища украли инопланетяне и заставляют выполнять задания внутри различного рода клонах. Начало интересное, потому скучновато. Не дочитал. Читабельность 3/5

Разлом в Небесах. Гамильтон Питер. Сюжет: Корабль поколений. Летят. Уже начинают забывать зачем и куда. Но случается авария. И вдруг оказывается что корабль давно уже под контролем инопланетян. Читабельность 5/5

Штурм. Панченко Андрей. Сюжет: звездолет спасается от неведомой (не раскрыто по сюжету) опасности в другую галактику. А она уже занята. Не дочитал, скучновато. Читабельность 3/5

Звезданутый Технарь. Герко Гизум. Сюжет: Некий чел купил себе ржавое ведро и полетел в космос чтоб стать «космическим мусорщиком». Только всё пошло не так. Слишком много деталей, и вся книга одно сплошное выживание на взлете этого недокарабля. Интересно только пару страниц начала. Читабельность 2/5

Шепот 1-3. Сиба С.И. Очередная книга из вселенной EVO. В принципе читабельно, но ничего нового. Но таки дочитал. Читабельность 4/5

Вычислитель. Тетралогия. Громов Александр Николаевич. Перечитка, плюс третья книга вышла. Когда первый раз читал, еще её не было. В принципе нормально. Весь сюжет вокруг одного товарища который умеет хорошо просчитывать вероятность событий в голове. В первой-второй части есть даже некая любовная линия. В принципе читабельность 5/5

Маска конструктра. Захар Зарипов. Сюжет: на марс прибывает первая колонизационнами миссия. Но всё идет не так (с). Исчезают инструменты и целые механизмы. Кто за этим стоит? Сюжет вроде и интересный, но написано так себе. Не дочитал. Читабельность 3/5

Детское:

Борис Жидков «Про обезьянку». Интересно. Но ребенку многие слова не понятны уже. Пришлось «переводить»

1С и проблема чтения xlsx файлов с датами

Проблема: при разборе файла формата xlsx часть дат в ячейках сдвигается ровнехонько на 4 года назад. Т.е. открываем файл экселем — видим 2026 год. Открываем файл при помощий табличного документа 1С — видим 2022.

Долго думал.. Хорошо рядом человек оказался, который с этой проблемой уже сталкивался. Оказывается некоторые файлы xlsx сохраняются в формате в котором «эпоха» начинается с 1900г, а часть с 1904. И определить средствами 1С, в каком формате сохранен именно этот файл, нет никакой возможности — только самому делать поправку даты:

ДатаВЯчейке=ДатаВЯчейке+1462 * 86400;

Более подробно можно почитать тут

Кто виноват и что делать (с)

По моему тут дело в том, что большинству людей очень трудно посмотреть в зеркало и признать, что он видит главного виновника всех своих неудач в жизни.
Кто-то валит всё на родителей, кто-то на начальство, на плохую жену, на власть, на законы…. А кто-то — на клятых москалей.
Так гораздо проще жить.

Не знаю кто (с)

1С: Оптимизация времени разбора большого XLSX файла

Для чтения и разбора файлов формата xlsx на 1С обычно используют следующую схему разбора файла:

ТабличныйДокументХар = Новый ТабличныйДокумент; 
ТабличныйДокументХар.Прочитать(парам.ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст);		
// читаем каждый лист по отдельности
Для Каждого ОбластьТД ИЗ ТабличныйДокументХар.Области Цикл
    ОбластьФайла = ТабличныйДокументХар.ПолучитьОбласть(ОбластьТД.Имя,);
    КолВоСтрокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоВертикали();
    КолВоКолонокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали();
	НачСтрока=3;КонСтрока=0;
    НачСтрока = ?(НачСтрока = 0, 2, НачСтрока);
    КонСтрока = ?(КонСтрока = 0, КолвоСтрокФайла, КонСтрока);						
    // перебираем все строки без шапки
    Для нСтрокаТФ = НачСтрока ПО КонСтрока Цикл      				
        ПКолонка=Формат(ном_кол, "ЧГ=0");
        Данные=ОбластьФайла.ПолучитьОбласть("R"+ПСтрока + "C1").ТекущаяОбласть.Текст;
    конеццикла
конеццикла    

Так-же встречается другой вариант, у которого есть особенность — не учитывается что файл может содержать листы:

ТабличныйДокументХар = Новый ТабличныйДокумент; 
ТабличныйДокументХар.Прочитать(парам.ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст);		
КолВоСтрокФайла = ТабличныйДокументХар.ПолучитьРазмерОбластиДанныхПоВертикали();
КолВоКолонокФайла = ТабличныйДокументХар.ПолучитьРазмерОбластиДанныхПоГоризонтали();  
СтрокиДиапазона =   50000;
НачСтрокаДиапазона = 3; 
КонСтрокаДиапазона = мин(КолВоСтрокФайла, СтрокиДиапазона);
КолВоСтрокФайла_часть = КолВоСтрокФайла;
Пока  КолВоСтрокФайла_часть>0 Цикл
	ОбластьФайла = ТабличныйДокументХар.ПолучитьОбласть(НачСтрокаДиапазона,1,КонСтрокаДиапазона,КолВоКолонокФайла);		
	Если КолвоСтрокФайла = 0 Тогда ТабличныйДокументХар = Неопределено;КонецЕсли;
	Для стр = 1  по КонСтрокаДиапазона-НачСтрокаДиапазона+1 Цикл  
              Данные=ОбластьФайла.Область(стр,2).Текст;
	КонецЦикла;  
	КолВоСтрокФайла_часть = КолВоСтрокФайла_часть-СтрокиДиапазона;
	НачСтрокаДиапазона = НачСтрокаДиапазона +СтрокиДиапазона;
	КонСтрокаДиапазона = КонСтрокаДиапазона +СтрокиДиапазона;
КонецЦикла;

Если сравнивать производительность каждого метода, то выходит следующая картина (для файла размером 254 тыс строк):

Метод 1Метод 2
Время работы кода1 784 сек714 сек

Граббер всех файлов телеграм канала

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

#!/usr/bin/env python3
# encoding: utf-8
import sys
import os,fcntl
import funcs
from telethon import TelegramClient
import requests
import configparser

## Защита от дубля запуска скрипта
fp = open(os.path.realpath(__file__), 'r')
try:
    fcntl.flock(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
    sys.exit(0)

config = configparser.ConfigParser()
config.read("settings.ini")

print(config["Telegram"]["telegram_api_id"])

async def SaveFile(dir_name,message):
     if os.path.isdir(os.path.dirname(os.path.abspath(__file__))+f"/files/{dir_name}")==False:
       os.mkdir(os.path.dirname(os.path.abspath(__file__))+f"/files/{dir_name}")
     with open(os.path.dirname(os.path.abspath(__file__))+f"/files/{dir_name}/message.txt", 'w') as file:
        file.write(message.message)
     print(f"Вложения: {message.media}")
     if hasattr(message.media,"document"):
       if message.media.document != False:
         file_name=message.media.document.attributes[0].file_name
         print(f"-вложенный файл {file_name}")
         print("--сохраняю..")
         if os.path.isfile(os.path.dirname(os.path.abspath(__file__))+f"/files/{dir_name}/{file_name}")==False:
           await client.download_media(message.media, file=os.path.dirname(os.path.abspath(__file__))+f"/files/{dir_name}/{file_name}")
           print("--ок..")
         else:
           print("--уже скачивали!")
     if hasattr(message.media,"video"):
       if message.media.video!=False:
          print(f"-вложенное видео")

async def tele_news_parse():
    dp = await client.get_entity(config["Telegram"]["stl_chanel"])
    poz=int(config["Telegram"]["current_message_id"])
    print(f"-start at {poz}")
    async for message in client.iter_messages(dp,limit=10,offset_id=poz):
        print("---------------------------------------------------------")
        if hasattr(message, "message"):
            if message.message!=None:
                print(f"Сообщение: {message}")
                if message.grouped_id:
                   print("-its album!")
                   target_group_id = message.grouped_id
                   search_ids = range(message.id - 20, message.id + 21)
                   posts = await client.get_messages(config["Telegram"]["stl_chanel"], ids=list(search_ids))
                   media_group = []
                   for post in posts:
                     if post is not None and post.grouped_id == target_group_id and post.media is not None:
                      media_group.append(post)
                   for message in media_group:
                      print(f"--из альбома: {message}")
                      await SaveFile(target_group_id,message)
                else:
                  print("-its one file!")
                  await SaveFile(message.id,message)


    with open('settings.ini', 'w') as configfile:
        poz+=10
        print(f"-new poz at {poz}")
        config["Telegram"]["current_message_id"]=str(poz)
        config.write(configfile)

if __name__ == '__main__':
    client = TelegramClient("parser_data", config["Telegram"]["telegram_api_id"], config["Telegram"]["telegram_api_hash"])
    client.start()
    client.loop.run_until_complete(tele_news_parse())
1 2 3 4 314