LINUX.ORG.RU

Избранные сообщения aol

Нужны ваши мысли по code review

Форум — Development

Вообщем у меня есть один долгоживущий проект, посвященный теме ревью кода. Что он делает можно увидеть из этого gif

На данный момент, вся логика максимально отдалена от структур проекта, репозиториев, коммитов и всего такого, поэтому можно комментировать любой кусок кода или произвольный текст, что использовалось на практике для «тыкания носом» в выдержку из какого-нибудь лога или YAML-конфига.

Но для современной разработки этого мало, ревью cейчас проводится по большому количеству файлов, с учетом отличий. Поэтому я буду проект серьезно переделывать.

Хотелось бы услышать ваши мысли и пожелания, в первую очередь по интерфейсу - как это должно выглядеть для максимального удобства проведения code review.

Например тот же Gerrit мне всегда казался слишком сложным и его использование на практике в коммерческой разработке я не видел.

 ,

alex0x08
()

В чем фишка Qt Quick

Форум — Development

Изучаю Qt. Вижу, что есть два подхода к разработке приложения: Qt Widgets и Qt Quick. Судя по всему за Qt Quick активно топят. На официальной странице нашел сравнение этих технологий. И вроде как пишут, что Qt Quick для стильных модных молодежных, а Qt Widgets если не Deprecated, то для старперов. На всяких Reddit-ах тоже активно нахваливают QML.

Интуитивно кажется, что Quick потянет за собой либо какой-то встроенный интерпретатор JavaScript, либо какой-то хитрый компилятор, но в любом случае добавит накладные расходы на взаимодействие между JavaScript и C++ кодом. Кажется, что это будет работать медленнее, чем если всё написано сразу на C++.

С другой стороны, если хочется быстрой разработки, чтобы раз-два и в продакшен - это же точно не про C++. Для этого есть Electron или Web в браузере. C++ для GUI, на мой взгляд, имеет смысл выбирать только если хочется максимальной производительности и минимального расхода ресурсов, а сроки разработки не особо важны.

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

Поэтому возникает вопрос: какой практический смысл в Qt Quick?

 , ,

Goganchic
()

Claim to support the GTK_FRAME_EXTENTS (enables full GTK CSD)

Галерея — Скриншоты

Поддержка клиентского декорирования GTK добавлена в openbox. Pull-request с соответсвующим заголовком уже месяц остается без внимания. Результат на снимке. Исходники взяты из ветки work по адресу https://github.com/Mikachu/openbox.

 ,

zombi_pony
()

GUI best practices

Форум — Development

А есть ли какие-то best practices, если не стандарты для современного UI? Я не имею в виду всякие бензоколонки и терминалы самообслуживания в магазинах, а системы для компов общего назначения. Например, в классическом UI из 90х есть модели SDI/MDI, есть понятие главного меню, как должны выглядеть и вести себя пункты этого меню, есть тулбары, статус-бар и проч. джентльменский набор.

А для современного UI например на электроне есть подобное или кто как хочет, так и дрочит /// или разраб электрона уже всё на ходу «стандартизировал», а разраб только использует, что дают?

 

seiken
()

Утечки памяти в golang приложении - как найти?

Форум — Development

Изучаю сетевое программирование в golang, нашел в каком-то блоге вот такой пример websocket чат-сервера. Как он работает - вполне понятно - тупо бродкастит сообщения от клиентов. Но почему после нескольких коннектов ядро прибивает процесс из-за OOM - не могу разобраться. Вроде все ресурсы освобождаются, каналы закрываются. Пробовал проанализировать кучу с помощью pprof - не могу поймать момент, когда происходит утечка. Как вообще отлаживаются подобные ошибки в go?


package main

import (
  "encoding/json"
  "fmt"
  "net"
  "net/http"

  "github.com/gorilla/websocket"
  uuid "github.com/satori/go.uuid"
)

//Client management
type ClientManager struct {
  //The client map stores and manages all long connection clients, online is TRUE, and those who are not there are FALSE
  clients map[*Client]bool
  //Web side MESSAGE we use Broadcast to receive, and finally distribute it to all clients
  broadcast chan []byte
  //Newly created long connection client
  register chan *Client
  //Newly canceled long connection client
  unregister chan *Client
}

//Client
type Client struct {
	//User ID
	id string
	//Connected socket
	socket *websocket.Conn
	//Message
	send chan []byte
}

//Will formatting Message into JSON
type Message struct {
	//Message Struct
	Sender    string `json:"sender,omitempty"`
	Recipient string `json:"recipient,omitempty"`
	Content   string `json:"content,omitempty"`
	ServerIP  string `json:"serverIp,omitempty"`
	SenderIP  string `json:"senderIp,omitempty"` 
}

//Create a client manager
var manager = ClientManager{
	broadcast:  make(chan []byte),
	register:   make(chan *Client),
	unregister: make(chan *Client),
	clients:    make(map[*Client]bool),
}

func (manager *ClientManager) start() {
  for {
    select {
    //If there is a new connection access, pass the connection to conn through the channel
    case conn := <-manager.register:
      //Set the client connection to true
      manager.clients[conn] = true
      //Format the message of returning to the successful connection JSON
      jsonMessage, _ := json.Marshal(&Message{Content: "/A new socket has connected. ", ServerIP: LocalIp(), SenderIP: conn.socket.RemoteAddr().String()})
      //Call the client's send method and send messages
      manager.send(jsonMessage, conn)
      //If the connection is disconnected
    case conn := <-manager.unregister:
      //Determine the state of the connection, if it is true, turn off Send and delete the value of connecting client
      if _, ok := manager.clients[conn]; ok {
      	close(conn.send)
      	delete(manager.clients, conn)
      	jsonMessage, _ := json.Marshal(&Message{Content: "/A socket has disconnected. ", ServerIP: LocalIp(), SenderIP: conn.socket.RemoteAddr().String()})
      	manager.send(jsonMessage, conn)
      }
    	//broadcast
    case message := <-manager.broadcast:
    	//Traversing the client that has been connected, send the message to them
    	for conn := range manager.clients {
          select {
          case conn.send <- message:
      	  default:
      	    close(conn.send)
            delete(manager.clients, conn)
      	  }
    	}
    }
  }
}

//Define the send method of client management
func (manager *ClientManager) send(message []byte, ignore *Client) {
  for conn := range manager.clients {
    //Send messages not to the shielded connection
    if conn != ignore {
      conn.send <- message
    }
  }
}

//Define the read method of the client structure
func (c *Client) read() {
  defer func() {
    manager.unregister <- c
    _ = c.socket.Close()
  }()

  for {
    //Read message
    _, message, err := c.socket.ReadMessage()
    //If there is an error message, cancel this connection and then close it
    if err != nil {
    	manager.unregister <- c
    	_ = c.socket.Close()
    	break
    }
    //If there is no error message, put the information in Broadcast
    jsonMessage, _ := json.Marshal(&Message{Sender: c.id, Content: string(message), ServerIP: LocalIp(), SenderIP: c.socket.RemoteAddr().String()})
    manager.broadcast <- jsonMessage
  }
}

func (c *Client) write() {
  defer func() {
    _ = c.socket.Close()
  }()

  for {
    select {
    //Read the message from send
    case message, ok := <-c.send:
      //If there is no message
      if !ok {
        _ = c.socket.WriteMessage(websocket.CloseMessage, []byte{})
        return
      }
      //Write it if there is news and send it to the web side
      _ = c.socket.WriteMessage(websocket.TextMessage, message)
    }
  }
}

func main() {
	fmt.Println("Starting application...")

	//Open a goroutine execution start program
	go manager.start()
	//Register the default route to /ws, and use the wsHandler method
	http.HandleFunc("/ws", wsHandler)
	http.HandleFunc("/health", healthHandler)
	//Surveying the local 8011 port
	fmt.Println("chat server start.....")
	//Note that this must be 0.0.0.0 to deploy in the server to use
	_ = http.ListenAndServe("0.0.0.0:8448", nil)
}

var upgrader = websocket.Upgrader{
  ReadBufferSize:  1024 * 1024 * 1024,
  WriteBufferSize: 1024 * 1024 * 1024,
  //Solving cross-domain problems
  CheckOrigin: func(r *http.Request) bool {
    return true
  },
}

func wsHandler(res http.ResponseWriter, req *http.Request) {
  //Upgrade the HTTP protocol to the websocket protocol
  conn, err := upgrader.Upgrade(res, req, nil)
  if err != nil {
    http.NotFound(res, req)
    return
  }

  //Every connection will open a new client, client.id generates through UUID to ensure that each time it is different
  client := &Client{id: uuid.Must(uuid.NewV4(), nil).String(), socket: conn, send: make(chan []byte)}
  //Register a new link
  manager.register <- client

  //Start the message to collect the news from the web side
  go client.read()
  //Start the corporation to return the message to the web side
  go client.write()
}

func healthHandler(res http.ResponseWriter, _ *http.Request) {
  _, _ = res.Write([]byte("ok"))
}

func LocalIp() string {
  address, _ := net.InterfaceAddrs()
  var ip = "localhost"
  for _, address := range address {
    if ipAddress, ok := address.(*net.IPNet); ok && !ipAddress.IP.IsLoopback() {
      if ipAddress.IP.To4() != nil {
        ip = ipAddress.IP.String()
      }
    }
  }
  return ip
}

 , ,

C
()

Добавить фичу в /proc/cpuinfo для работоспособности эмуляции SSE4.2

Форум — Development

Суть такова, программа определяет что у меня мой Phenomчик не умеет в sse4.2 говорит про это и всё дальше не работает.
А мне надо чтобы она валилась на traps illegal instruction.

Чуть расширенная суть csgo обновилась до cs2 и теперь на моём Phenom2 X6 не работает.

Завёл issue

И там человек посоветовал попробовать модуль ядра opemu-linux для эмуляции недостающих инструкций и попутно он его подправил для сборки на свежих ядрах.
Им (удобно) я определил что валится игра на инструкциях: Типа

OPEMU:  pmaxud xmm0, xmm1
traps: cs2[blabla] trap invalid opcode
...
OPEMU:  pminud xmm0, xmm1
traps: cs2[blabla] trap invalid opcode

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

Launcher Error: A CPU that supports the `SSE4.2` instruction set is required.

А мне надо чтобы именно что программа бы падала на invalid opcode/illegal instruction а для этого программе надо соврать что процессор умеет SSE4.2 =) Вроде можно было фичи процессора подменять не, ну в смысле без правки ядра? В голове усердно торчит мысль что можно, но как не вспомню, гуглить не получается, сырцы сейчас рыть лень просто хочется ответа, голёва болит, носъ пихтит, горьло как сарделька, болякаю ой нимагу, пожалейте, подскажити болезному боляке йуууууу.

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

Ну /proc/cpuinfo это для примера, нужно чтобы программы не думали что нужные им фичи есть и их проверки обламывались.

 cpu feachures, , , sse4.2,

LINUX-ORG-RU
()

Как ограничить скорость, отдельным зарвавшимся IP, с помошью TC

Форум — Admin

Такое возможно вообще? Читал читал всяческие статьи, но что то моей бестолковки уже не хватает, сильно как то мудрено в моей старой башке уже на терминах происходит затык.

Показалось более понятно совет коллеги @Pinkbyte отсюда Как ограничить скорость трафика с конкретным ip адресом? (комментарий) сделал все как он советует, потом наткнулся на вопрос @gobot проштудировал его пост Ограничение скорости, все вроде перепроверил, счетчики ростут никакого ограничения скорости не наблюдаю, может кто кинет какой примерчик.

Мне надо временно ограничить именно входящий трафик на сервере Fedora34 качальщикам клиентам.

 ,

alex_sim
()

Описать в dts устройство на шине PCI

Форум — Development

Например, у меня есть устройство 0001:01:00.0, я хочу его поконфигурировать через dts. Как это сделать?

У меня в dts есть описание нужного контроллера, pcie@ffкакой-то адрес. Описание устройства нужно вставить внутрь? А что указать, чтобы компьютер понял, что речь об устройстве 0 на шине 1?

 ,

anarquista
()

А нужен ли Wayland?

Форум — Desktop

На фоне Arch Wiki

Да, пока установка xorg-server для нуба нетривиальна (кроме пользователей Arch). Нужно скачать исходники с git, собрать, поставить, не забыть зависимости, но!..

Недокомпозиторы в виде Picom теперь не заставляют выть вентиляторы ноута, Firefox пишет - Compositing - WebRender (чего не было на xf86-intel и его можно выбросить), а «Картинка - ожила»! Никакого разрыва, всё гладко, кадр - идеален :) Нет глюков с нестандартными раскладками под Wayland, нет глюков с отрисовкой меню, нет проблем с размерами шрифта, можно share screen, и всё это на любимом Xmonad…

А патч принимали 7 месяцев, а версию нам ждать и ждать (мы знаем, почему).

Так нужен ли Wayland?

 , ,

Neuromagus
()

Курсы QA

Форум — Development

Есть чего годного по курсам QA (тестировщик)? Или литературу накидайте годную чтоли...

 ,

untitl3d
()

isc-dhcp-server, bind9 и пробелы в именах хостов

Форум — Admin

Ситуация такая.
Есть isc-dhcpd-4.4.1 который смотрит в wifi.
И bind9, с динамической зоной для него.
Все это работает давно и замечательно, но как всегда есть essid'ы с пробелами.
Соответственно в dhcpd.leases я их вижу как set ddns-fwd-name = "Smart TV Pro.wan";.
А в dns как Smart\032TV\032Pro A 192.168.4.192.
Соответственно arp -a его не видит ? (192.168.4.192) at 38:e7:c0:e4:c8:42 [ether] on wlan0 ну и пропинговать соответственно никак.
По ip пингуется, адрес выдается.
Как можно заменять пробелы на пример подчеркиванием?
Что это сможет сделать? Сразу dhcp, или bind?
Или ничто?

 , , ,

hbars
()

Пожалуйста, подскажите, какие значительные недостатки у Drone CI/CD по сравнению с другими популярными типа Gitlab, Jenkins, etc. ?

Форум — Admin

Собственно кроме популярности.

https://medium.com/globant/introduction-to-drone-io-ci-cd-platform-1d43f8bc1728

Я так понял, что связка Gitea+Drone получается очень лайтовой?

Насколько сильно это сказывается на ее функционале?

 , , , ,

sanyo1234
()

А у tint2 есть живые форки?

Форум — Development

Позиция разработчика в прошлом году:

The final release of tint2 is 17.0.2.

The code is frozen and no more feature requests are accepted.

Неделю назад ему там коммент оставили:

Recent code changes in tint2 dependencies arise issues that are relevant.

Is there any possibilities that the support for tint2 will be resumed at least to fix such problems?

Собственно вопрос. Если ли где новый живой апстрим, готовый делать релизы. Может видел кто…

 , ,

wandrien
()

ProtonVPN WireGuard NetworkManager не работает

Форум — Admin

Ниработает. Нужен чтобы ходить на сайтики закрытые роскомпозором. TOR чаще мёртв, чем жЫв - до бриджей почти всегда не достучаться (или это мне так везёт?). Сгенерировал конфиг на сайте Proton, импортировал его в NetworkManager, поднимаю соединение и усё, тырнета нет.

Какую диагностику ни делал, всё выглядит нормально. Вот только пакеты уходят, а в ответ ничего не приходит:

$ sudo wg
interface: wg0
  public key: +2+2T0B2eCV11XCdCPPAv/8FMKsKtEr57YiiR+nspHQ=
  private key: (hidden)
  listening port: 45277

peer: jA3Pf5MWpHk8STrLXVPyM28aV3yAZgw9nEGoIFAyxiI=
  endpoint: 185.177.124.190:51820
  allowed ips: 0.0.0.0/0
  transfer: 0 B received, 3.90 KiB sent

При этом,

nc -zvu 185.177.124.190 51820
Connection to 185.177.124.190 51820 port [udp/*] succeeded!

Это peer т.е. собсно WG сервер, который предоставляется Proton’ом.

Куда рыть не пойму. Не повезло с сервером просто, выбрать на сайте Proton’а другой? Или попробовать не через NM, а скажем systemd-network? Хотя, повторюсь, и с NM всё выглядит нормально.

Можно конечно сделать OpenVPN, решение более отработанное, но всё же охота разобраться.

 , ,

mrjaggers
()

В свободном доступе опубликована книга «PostgreSQL 15 изнутри»

Новости — Open Source
Группа Open Source

Компания Postgres Professional объявила о публикации в свободном доступе книги «PostgreSQL 15 изнутри». Автор книги — Егор Рогов, директор по разработке образовательных программ Postgres Professional.

В октябре вышла 15-я версия PostgreSQL, и уже в декабре на сайте Postgres Professional появилось обновлённое издание книги. В нём учтены замечания читателей, исправлены опечатки, а также отражены изменения, произошедшие в версии PostgreSQL 15. Печатный тираж уже готовится к выпуску и увидит свет в январе 2023.

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

>>> Подробности

 , , , ,

Stacy
()

tint2 fork

Форум — Desktop

К радости пользователей tint2, разработка которого заморожена год назад, существует его форк: https://gitlab.com/nick87720z/tint2

Ура!

 ,

el8mn
()

Генератор документов на C++

Форум — Development

Доброе время суток

Кто подскажет годную, Open source, библиотеку для генерации документов наподобие FastRepor.

Заранее спасибо

 , , ,

enep
()

Какие нынче роутеры для открытых прошивок?

Форум — Linux-hardware

Хочу поставить роутер, суть такова:

Входной WAN 100мбит.

Внутренние LAN 1000мбит 4 штуки.

Wi-Fi что там сейчас модно, 5 ГГц как минимум.

USB3 порт для NAS.

Поддержка uPnP и NFS.

В принципе, у меня раньше был Xiaomi MI-3G и там всё работало, но может, с тех времён появилось что-то лучше?

 ,

Aceler
()

КуМир на Pop_OS и qt4

Форум — Desktop

Добрый день!

На каникулы к девушке в гости приехали сёстры шеольного возраста и, в рамках курса информатики, им необходимо разобраться с КуМир. Пошёл на оф сайт, качнул архив, но проблема в том, что для работы ему требуется некромантия в лице qt4. В репах есть только 5 и 6. Порыл интернет и выяснил, что необходимые пакеты – libqtcore4 libqtgui4 libqt4-svg libqt4-xml и libqt4-script. Подскажите, пожалуйста, откуда бы это всё взять? Интересны также любые советы по теме)

Большое спасибо!

 ,

kirich
()

fproxy v80 — локальный прокси-сервер для фильтрации http(s)-трафика

Новости — Интернет
Группа Интернет

Опубликована 80-я версия кэширующего и антиспамного прокси-сервера для персонального использования c гибкими настройками.

( читать дальше... )

>>> Подробности

 , , ,

firkax
()