fsoc

fsoc

It-технологии , Системное администрирование.
Пикабушник
поставил 13 плюсов и 2 минуса
Награды:
5 лет на Пикабу
341 рейтинг 43 подписчика 3 подписки 14 постов 5 в горячем

Что случилось с KDE ? Мой опыт использования в 2024

Честно говоря, познакомился с KDE Plasma 4 году в 2015м при установке очередного дебианообразного дистрибутива. На первый взгляд как человеку только познавший Linux , студенту с огромный количеством времени ,под настройку которого было пару уютных чайных вечеров. Сказать что было все по-людски - сложно , изх коробки определенное кол-во твиков , открываешь виджет с погодой - крашится plasma , открыл приложение - крашится plasma , долго не крашится plasma - надо бы крашнутся. Довольно обширный выбор тем , работали процентов 30 не вызывая проблем , касмомизация на уровне , можно все настроить под себя , в отличие от GNOME она была достаточно лёгкая , на моей старой печке , она работала довольно быстро .
Запомнилась мне в общем она довольно позитивно , хоть и имела множество проблем.

Не так давно , я решил пересесть на Fedora , выбор DE - это вечно сложный выбор , и я решил по старой памяти выбрать дистрибутив с KDE Plasma 5 , предварительно посмотрел ролики с обзорами пятой плазмы что бы понимать что я пропустил( Оказалось очень много ) .

Плазма 5 из коробки выглядит довольно приятно , убогая стандартная панель , которую я выкидываю в замену Cairo-Dock или Latte-Dock ( о нём узнал от самого сообщества KDE ).
KDE Connect очень нравится , очень крутая вещь . Особенно вывести уведомления с телефона , и получать коды авторизации где-либо не отходя от пк.

К чему я придираюсь:
Во первых , тот же визуал , да выглядит приятно, кастомизация осталась на уроне plasma 4, тот же родной твик с погодой не умеет в российские города , только одна Москва ( Москвичам в этом плане повезло!) Уродливая панель которая бросается в глаза , была жуткая еще в 4-ке , в пятерке все то же самое.
И моё удивление Plasma точно так же падает.
Буфер обмена - не умеет копировать картинки , о как же это взбесило , как это возможно из коробки .. Приходится так же допиливать.
Темы - абсолютно не адаптированы ко всем приложениям , если вы нашли красивую тему , не факт что в приложении будет все отображаться адекватно , к примеру я часто использую vmware horizon client , при первом запуске мне пришлось редачить конфиги что бы она завелась нормально , т.к были ошибки , после чего я понял что графический интерфейс в по зависим от темы , и при выборе светлой темы перекрываются белые шрифты , идёшь сам в шрифты , ставишь  тест потемнее .. и так во многих вещах . Я все таких очень люблю когда из коробки все работает без дополнительных допиливаний , т.к пыл уже не тот как был в 2015-м когда я всем этим яростно интересовался.

В общем ровно месяц как я устроился на KDE , впечатления двухзначные .. , подумываю посмотреть, как сейчас, поживает GNOME.. , тот же GSconnect + очень большой выбор расширений меня сильно привлекают .. Если кто-то сталкивался , какие можно получить грабли из коробки ?

Показать полностью

Что бы такое запарсить .. ??

Добрый день всем :)

Введение:


Не так давно столкнулся с ситуацией, которая в принципе натолкнула меня на написание этой программы (если это можно так назвать и вообще если можно назвать меня программистом)

Я большой любитель компьютерного железа и частенько закупаю в одном из желтых магазинов у дома с эмблемой инопланетянина. Но копаться на сайте мне порой лень либо времени нет - не беда , прайс лист есть , сортирую по ценнику и поехал скупать , но нет , с недавних пор dns убрали прайс листы , так же на сайте всячески используются подгруздки данных через js процедуры .

Решил найти в интернете парсер , вся информация которая есть либо 2018-19 года с вопросами "а что то не получается " или "больше не актуально , не работает" а так хотелось найти рабочий парсер на Python .


Не так давно я начал проходить тестирование UI интерфейсов и решил с помощью Selenium на Python реализовать парсер.

2 часа мучений и добиваемся такого результата :


Что бы такое запарсить .. ?? Python, Программирование, Selenium, Парсинг

Ссылка на код :

https://github.com/tagunzet/selenium_dnsshop_parser



Теперь вопрос , есть идея такая , создаю web сервис на Flask/Django и создаю микро-сервис который будет помогать пользователю подобрать технику по его параметрам .

Например мы хотим подобрать телефон , выбираем критерии к примеру :


Пол

Возраст

Для каких целей

Цена

И т.д.


Далее получаем список критериев на основе чего делаем подбор техники и советуем пользователю .


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


Конечно можно на первое время сделать подбор на основе ручного анализа (через словари к примеру)


А по мере развития уже автоматизировать процесс через обучение.

Ну как, стоит ли?

Показать полностью 1

Telegramm - Бот для мониторинга погоды

Знаю, каждый Python программист уже создавал сотню разных Tg-ботов, тема уже заезженная, не актуальная, но этот бот писался для себя, имею под рукой vds сервер, есть возможность развернуть, так что… Могу и буду!


И так, есть задача:

1. Мониторить погоду с какого-нибудь хорошего источника

2.Получать инфу через запрос

3.Хочу знать погоду на конкретной геолокации

4.Выводить погоду в телегу в "нескучном виде" ( текст глаза режет )


Код :

https://github.com/tagunzet/tg_weatherbot


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


1.Получил информацию с помощью сервиса openweather.

2.Далее указал параметры в которых меня интересует погода

3.Вывел запрос , обработал данные , положил в массив .

4.Вывожу эту информацию через Telegram бота , обработав предварительно и вставив смешные картинки под погодную температуру .


И так :

Telegramm - Бот для мониторинга погоды Python, Программирование, Погода, Telegram, Бот
Показать полностью 1

Выброс из головы , достойный на новый проект . Часть #2 Наверное конец ...

И снова добрый день мои читатели. И вот я закончил начатое , сразу скажу , проект я закончил , ТЗ - выполнено и приложение заработало .

Работает - палкой и смекалкой , но все же , возможно когда-нибудь пригодится человечеству ( вероятность = 0 )

Остановились в прошлой части мы на том , что извлекли видео и отдельно звуковую дорожку .

Проблема сразу меня атаковала и отняла 4 часа моего времени на её решение ( диванные эксперты справились бы за 1 минуту но я еще молод и глуп что бы просить помощи у великих .. )
Так вот , аудиофайл с youtube скачивается хоть и как mp3 файл , но mimetype у него webm , для этого пришлось скачать еще 3 файла с ffmpeg и закинуть в мою директорию указав в python .

import speech_recognition as sr

from os import path

from pydub import AudioSegment

AudioSegment.converter = "ffmpeg.exe"

AudioSegment.ffmpeg = "ffmpeg.exe"

AudioSegment.ffprobe ="ffprobe.exe"


с помощью библиотеки AudioSegment я импортирую исходный трек
sound = AudioSegment.from_file(namefile+".mp3")
beginning = sound + 1
Прибавляю 1db громкости ## мне помогло немного повысить точность распознания , если криво распознает убрать .

И теперь, сохраняет файл в wav формате со всеми изменениями .
beginning.export("outputfile.wav", format="wav")


Далее переходим к блоку распознания и так :

Импортируем библиотеки , да где то выше я уже импортировал их , но НУЖНО БОЛЬШЕ ИМПОРТОВ .
import speech_recognition
from speech_recognition import *

Берем наш файл и объявляем объект

sample_audio = speech_recognition.AudioFile('outputfile.wav')

r = sr.Recognizer()

with sr.AudioFile('outputfile.wav') as source:

audio = r.record(source) чтение объекта ( аудиофайла)

print(type(audio)) выводим тип аудиофайла , удостоверяемся что он объект своими глазами

massslov = [] - сюда будут выводиться слова которые нашел sphinx

try:

out = r.recognize_sphinx(audio, language="en-US")

massslov.append(out)

## далее идут исключения если ничего не нашел или невозможно найти .

except sr.UnknownValueError:

print("Sphinx could not understand audio")

except sr.RequestError as e:

print("Sphinx error; {0}".format(e))

print("--- %s seconds ---" % (time.time() - start_time)) ## считаю сколько времени займет процедура

Кстати, процедура не быстрая , 2 минутный трек читает около 80 сек . (На моём пеньке , у вас может будет быстрее) 

print(massslov) ## выводим массив найденных слов

Выброс из головы , достойный на новый проект .  Часть #2 Наверное конец ... Python, Программирование, Google, Нейронные сети, Google Translate, Перевод, Видео, Длиннопост

Давайте переведём эти слова


Использовать будем библиотеку deep_translator

from deep_translator import GoogleTranslator

to_translate = massslov[0]

translated = GoogleTranslator(source='auto', target='ru').translate(to_translate)

print(translated)



И на выходе получаем это :
Выброс из головы , достойный на новый проект .  Часть #2 Наверное конец ... Python, Программирование, Google, Нейронные сети, Google Translate, Перевод, Видео, Длиннопост

Получится что-то похожее на текст . Похожее на перевод .

Далее нужно этот текст озвучить :

Используем библиотеку gtts

from gtts import gTTS  ## импортируем библиотеку

import os  ## системные утилиты будет для сохранения нужна

text = translated ## говорим что текст для озвучки хранится в переменной translated

language = 'ru' # язык русский

speech = gTTS(text = text, lang = language, slow = False) ## с параметрами не игрался , возможно можно настроить более тонко , мне лень было честно , со slow можно играться , если в видео говорят быстро ставим True , а если нет - False.

speech.save("text.mp3") ## сохраняем в text.mp3 в нашей директории

И так ,есть видео , есть mp3 файл с переводом , давайте совместим видео с аудиодорожкой .


Используем библиотеку mhmovie

from mhmovie import *  ## импортируем библиотеку

m = Movie(namefile+".mpeg") # указываем видеофайл

mu = Music('text.mp3') # указываем звуковой файл

final = m+mu #соединить звук и видео

final.save(namefile+"film.mp4") ## сохраняем результат

и на выходе получаем ролик с переводом , открываем и наслаждаемся .. ( ржем с перевода ) мне стыдно :(

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

Все остальное допилю ,

Берем видео (Английская болтовня )

https://www.youtube.com/watch?v=hVivvHS4QZQ

А получаем вот что :

В общем ,  проект есть на моём github , код открыт для всех :
https://github.com/tagunzet/Translate_Youtube_movie/tree/mai...

Показать полностью 2 2

Выброс из головы , достойный на новый проект .  Часть #1

Сидел как-то смотрел я Youtube и подумал, вот бы была бы возможность взять англоязычный ролик, вытащить его, отделить от ролика звуковую дорожку, в помощь python и любого распознавателя речи (а их много)  вытащить массив слов для перевода.


После того как мы вытащим слова, переводим их на другой язык, немного уменьшаем громкость оригинальной дорожки и накладываем переведенный звук поверх. Получится универсальный переводчик любого англоязычного ролика и наоборот! Именно звуковой перевод, не субтитры.. что реально интересно. Можно будет поиграться с движками распознавания - выбор есть.

Выброс из головы , достойный на новый проект .  Часть #1 YouTube, Python, Программирование, Google, Google Translate, Text-to-speech, Видео, Длиннопост

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

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


Поехали!


И так, как хороший ленивый программист игнорируем тз, а список требований сокращаем в 100 раз для своего удобства. В целом нам требуется :


1.Скачать видео из Youtube по URL

2.Отделить видео от аудио и сохранить 2 файла в одну папку

3.Вытащить текст из аудио

4.Перевести текст

5.Из текста создать новую дорожку

6.Наложить переведенную дорожку на оригинальную дорожку ( оригинальную немного приглушить что бы лучше было слышно перевод )

7.Наложить звук обратно на видео

8.Наслаждаться ОТМЕННЫМ переводом .

Выброс из головы , достойный на новый проект .  Часть #1 YouTube, Python, Программирование, Google, Google Translate, Text-to-speech, Видео, Длиннопост

И так начнём!

Создаем py файл, и начинаем калякать.


Для того, чтобы скачать видео нам требуется библиотека "youtube_dl" следственно импортируем её.

import os ## Требуется для os.path и поиска пути директории

import youtube_dl # импортирую библиотеку

ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s'})

with ydl:

result = ydl.extract_info( ##извлекаем информацию о видеофайле из ссылки

'https://www.youtube.com/watch?v=vFdE02UwMV4%27, ## ссылка на видеофайл

download=False ## Скачать информацию True False

)

if 'entries' in result:

# Если плейлист или список

video = result['entries'][0]

else:

## просто видео

video = result


И так на выходе получаем словарь, в котором начинаем рыться и искать URL на видео.

После копания в данном словаре я нашел что видео и звуковая дорожка находятся отдельно. Прекрасно, тогда скачиваем всё!



Поиск ключа и его значений:

slovar = video.keys() # выводим все ключи словаря

videos = video['formats'][6]['url'] ## URL видео было в списке "formats"

print(video['formats'][6]['url']) ## ПРИНТУЕМ

audios = video['formats'][3]['url'] ## URL аудио было в списке "formats"

print(video['formats'][3]['url']) ## ПРИНТУЕМ



Скачивать решил через WGET библиотеку.


import wget

wget.download(videos, "yt_vid.mpeg")

wget.download(audios, "yt_sound.mp3")


Получаю два загруженных файла в папке, один видео, второй звук.


Получаем пути этих файлов:


path_vid = os.path.join(os.getcwd(), 'yt_vid.mpeg') ## Путь до видеофайла

path_audio = os.path.join(os.getcwd(), 'yt_sound.mp3') ## Путь до аудиофайла

Теперь перехожу к обработке .... Но уже в следующем посте .

Показать полностью 2

Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте' - vksound.ru. Финал

И так, почитав комментариев под предыдущим постом мне понравилась идея убрать регистрацию вообще, закомментировать, создать специальную учетную запись и выполнять действия через неё.

Я создал учетную запись, и закомментировал функцию получения логина и пароля через GET запрос и указал уже свои. Далее внес несколько правок по интерфейсу, убрал данные, которые будут лишние. Так же внёс трай/кэтч в функцию логина, так вот, если пользователь укажет некорректный id, то ничего не произойдет.


В целом сервис полностью функционирует, критику жду уже от вас.

Все исходники есть в репозитории GitHub, ссылка на GIT есть в прошлых постах и на сайте.
Если у вас возникают ошибки и вы знаете, как её можно исправить жду отзывы :)


Для меня это окончание проекта , продолжать делать его не буду , мне не интересно , денег с него я не получаю , рекламу делать на сайте не хочу , преследую учебные цели , если кому то интересно , отвечу расскажу на все вопросы .

В данный момент ищу действительно нужный и интересный проект для реализации. Если есть идеи делитесь.

Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте' - vksound.ru. Финал Python, Проект, Flask, Github, Программирование, Музыка, ВКонтакте
Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте' - vksound.ru. Финал Python, Проект, Flask, Github, Программирование, Музыка, ВКонтакте
Показать полностью 2

Ищем отзывы с "drom.ru" об авто

И так, люблю читать информацию о своем авто и тут наткнулся на мысль что было бы круто сделать для себя книгу со всеми собранными отзывами, большее количество отзывов находятся на drom и было принято решение брать данные оттуда. Библиотека будет использоваться bs4 для python, а также docx так как я хочу сделать себе чтиво в виде книги ))


https://github.com/tagunzet/drom_obzor


from bs4 import BeautifulSoup

import urllib.request

import docx


Импортирую библиотеки, а далее указываю ссылку от куда будем брать данные:

а далее

resp = urllib.request.urlopen("http://www.drom.ru/reviews/toyota/vitz/")

указываем ссылку (у меня это раздел Тойота марка VITZ )


soup = BeautifulSoup(resp)

(Указываем экземпляр объекта)

Cоздаю два массива один будет содержать список ссылок, а второй информацию, которую мы достали по этой ссылке

linkmass = []

tmpmass = []

Получение ссылок

Тут мы заходим на сайт и парсим все ссылки, которые есть на нем.

for link in soup.find_all('a', href=True):

if 'page' in link['href']:

#print(link['href'])

getlink(link['href'])

И передаём список ссылок в функцию getlink где мы уже будем обрабатывать эти ссылки.

def getlink(page): Функция обработки ссылок, как известно ссылок на странице будет много и половину этих ссылок мусор

resp = urllib.request.urlopen(page)

soup = BeautifulSoup(resp)

for link in soup.find_all('a', href=True): смотрим все тэги a href

if len(link['href']) == 46: если длинна ссылки строки == 46, а именно ссылки с номерами авто равны 45 символам мы добавляем в словарь

#print(link['href'])

linkmass.append(link['href']) добавляем в словарь ссылок

а теперь получаем информацию по ссылке :

doc = docx.Document() объявляем экземпляр объекта

doc.add_paragraph('Отзывы о Toyota Vitz') пишем заголовок для нашей книги

def getinfo(): функция получения информации

for linkofinfo in linkmass: берем ссылки из словаря по одной

resp = urllib.request.urlopen(linkofinfo) и начинаем читать страницу

soup = BeautifulSoup(resp)

soup.prettify() -- функция делает внешний вид лучше ( нашел о оф документации )

for name in soup.find_all("div", {"class": "b-fix-wordwrap"}): теперь ищем класс в котором содержится отзыв об авто.

tmps = (str(name.get_text().strip())) добавляем во временную переменную

print('append') - что-нибудь чирканём в консоль что бы видеть статус добавления

par1 = doc.add_paragraph('Итак:  ') - добавляем параграф

par1.add_run(tmps) - добавляем текст в параграф

Конец кода

getinfo() - - не забываем вызвать функцию getinfo ( я это сделал в самом низу )

doc.save('helloworld.docx') -- обязательно сохраняем наш результат в docx файл !

У меня вышло 342 страницы интересного чтива !!))

Может кому-то пригодится!|


link to git : https://github.com/tagunzet/drom_obzor

Ищем отзывы с "drom.ru" об авто Python, Dromru, Программирование, Программист, Книги, Длиннопост
Ищем отзывы с "drom.ru" об авто Python, Dromru, Программирование, Программист, Книги, Длиннопост
Показать полностью 2

Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте' - vksound.online #2

1.Список материалов
GIT - https://github.com/tagunzet/vksound

Решил написать приложение под Flask , так как по сути будет использоваться всего 2-3 страницы , незачем использовать Django .

И так импорт библиотек будет выглядит примерно так :

import vk_api

from vk_api import audio

from vk_api.audio import VkAudio

from vk_api import audio

import collections

import requests,vk_audio

import lxml

from flask import Flask,render_template,request, url_for,redirect , session



Давайте для начала запустим Flask.

app = Flask(__name__)

app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' - Секретный ключ требуется для сессий , без него не заработает , может принимать любые значения , я обычно делаю рандом или пишу ахинею , можно генерировать .

if __name__ == '__main__':

app.run(host='тут пишите свой ip' , port = тут порт) - указываем в параметрах Flask IP-адрес на котором запускаем и порт .  Если это локальная машина то пишем её локальный адрес 127.0.0.1 и порт три топора 777 ( на свой вкус ) , если на внешнем то пишем внешний .

Далее нужно создать страницу которую Flask будет отображать .

Так как мы импортировали библиотеку render_template то мы научились обрабатывать html файлы . Создаем папку рядом с python файлом в котором мы пишем всю эту дичь , называем папку обязательно templates , никак по другому , иначе магия не произойдет , templates - это такая папка которая хранит ваши html файлы , пока что этого достаточно .


Теперь добавляю форму логина .

файл на github - /templates/login

Далее подвязываю на функцию фласка

@app.route('/')

def hello_world():

if 'username' in session:

return redirect("/login/")

else:

return render_template("login.html")


То есть когда мы переходим в корень и у нас есть сессия то фласк перекидывает на функцию авторизации , если нет перекидывает на форму авторизации .

ФУНКЦИЮ И ФОРМУ ДЛЯ НЕВНИМАТЕЛЬНЫХ !

Далее функция авторизации . 



@app.route("/login/", methods=["GET", "POST"]) - если переходит в ip/login/

def login(): - функция

message = ''

if request.method == 'POST' : - если сюда с формы приходит через пост данные то

session['username'] = request.form['username'] присваиваем в сессию пользовательский логин

#print(request.form)

users_id = [] - id пользака из вк хранится тут

access_tokens = [] - тут  токен

username = request.form.get('username') запрашиваем логин

password = request.form.get('password') запрашиваем пароль

print(username,password) печатаем в консоль

vk_session = vk_api.VkApi(тут идет авторизация

username, password,

# функция для обработки двухфакторной аутентификации

auth_handler=auth_handler если она есть если нету то выполнится vk_session_auth()

)

try:

vk_session.auth()

session['username'] = 'starting' - пишем в сессию что начата

del bigmass[:] - незабываем очистить массив при использовании функции а то будут отображаться старые данные других пользоавтелей

except vk_api.AuthError as error_msg:

print(error_msg)
если ошибка печатаем её

return

import vk_audio - импортим либу vk_audio

one_comm = (vk_session.token['user_id'])

two_comm = (vk_session.token['access_token'])

users_id.append(one_comm) добавляем айди и токен в массив

access_tokens.append(two_comm)

vk = vk_audio.VkAudio(vk=vk_session)

owner = int(str(request.form.get('code'))) # Если None - аудио будут браться из своей музыки code - это id вк

data = vk.load(owner) # получаем наши аудио

print(data)печатаем что получили

second_audio = data.Audios

limit = 25 - ставим 25 песен , можете изменить на то сколько хотите , но > 1000 долго грузились у меня , больше 7 минут

Тут идем проходом по всем песням и смотрим

index = 1

for audios in data.Audios:

index += 1

if len(str(audios['url'])) >= 3 : Удаляем треки где нет названий

print(audios)

bigmass.append(audios) добавляем треки в массив

if index==limit:

break
если достигаем лимита заданного на 25 песен прекращаем проход

print(bigmass) - печатаю в консоль

#return (str(users_id)+' '+str(two_comm))

return render_template("home.html",one_comm=one_comm,two_comm=two_comm,mass=bigmass)

передаю параметры в jinja2 шаблонизатор

else:
если мы не авторизированы но случайно сюда попали то не передаём ничего

return render_template("home.html",mass=bigmass)

И так окно входа выглядит как на рисунке 1.  а форма вошедшего человека выглядит так как на картинке 2 .


Функция exit убивает сессию . Усё !
Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте'  - vksound.online #2 Python, ВКонтакте, API, Vkapi, BDSM, Разработчики, Flask, Bootstrap, Длиннопост
Как я написал сервис для воспроизведения и скачивания песен с c социальной сети 'Вконтакте'  - vksound.online #2 Python, ВКонтакте, API, Vkapi, BDSM, Разработчики, Flask, Bootstrap, Длиннопост
Показать полностью 2
Отличная работа, все прочитано!