import sys
from PyQt5 import QtWidgets, QtCore, QtGui
class ClockWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
# Устанавливаем параметры окна
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
# Устанавливаем таймер для обновления времени
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.update_time)
self.timer.start(1000) # Обновляем каждую секунду
# Создаем метку для отображения времени
self.label = QtWidgets.QLabel(self)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setStyleSheet("font-size: 48px;") # Размер шрифта
# Устанавливаем начальное время
self.update_time()
# Устанавливаем размер окна
self.resize(200, 60)
# Переменные для перемещения окна
self.dragging = False
self.drag_position = None
def update_time(self):
current_time = QtCore.QTime.currentTime()
self.label.setText(current_time.toString("HH:mm:ss"))
self.check_color_below_widget()
def check_color_below_widget(self):
# Получаем глобальные координаты нижней границы виджета
global_pos = self.mapToGlobal(self.rect().bottomLeft())
# Определяем координаты точки на 10 пикселей ниже
point_below = global_pos + QtCore.QPoint(0, 10)
# Получаем цвет пикселя в этой точке
screen = QtWidgets.QApplication.primaryScreen()
pixel_color = screen.grabWindow(0).toImage().pixel(point_below.x(), point_below.y())
color = QtGui.QColor(pixel_color)
# Выводим значения RGB для отладки
print(f"Color below widget: R={color.red()}, G={color.green()}, B={color.blue()}")
# Вычисляем яркость цвета
brightness = (color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000
# Устанавливаем цвет текста в зависимости от яркости
if brightness < 128: # Темный фон
self.label.setStyleSheet("color: white; font-size: 48px;")
else: # Светлый фон
self.label.setStyleSheet("color: black; font-size: 48px;")
def paintEvent(self, event):
# Рисуем прозрачный фон
painter = QtGui.QPainter(self)
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setBrush(QtGui.QColor(0, 0, 0, 0))
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.dragging = True
self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
def mouseMoveEvent(self, event):
if self.dragging:
self.move(event.globalPos() - self.drag_position)
def mouseReleaseEvent(self, event):
if event.button() == QtCore.Qt.LeftButton:
self.dragging = False
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
clock = ClockWidget()
clock.show()
sys.exit(app.exec_())
snmpwalk -v 2c -c public corerouter.my.domain
...
iso.3.6.1.2.1.1.1.0 = STRING: "RouterOS CRS309-1G-8S+"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.14988.1
...
snmptranslate -mALL -Td iso.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0
sysDescr OBJECT-TYPE
-- FROM SNMPv2-MIB, RFC1213-MIB
-- TEXTUAL CONVENTION DisplayString
SYNTAX OCTET STRING (0..255)
DISPLAY-HINT "255a"
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A textual description of the entity. This value should
include the full name and version identification of
the system's hardware type, software operating-system,
and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysDescr(1) 0 }
snmptranslate -Td -mAll iso.3.6.1.2.1.1.2.0
SNMPv2-MIB::sysObjectID.0
sysObjectID OBJECT-TYPE
-- FROM SNMPv2-MIB, RFC1213-MIB
SYNTAX OBJECT IDENTIFIER
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The vendor's authoritative identification of the
network management subsystem contained in the entity.
This value is allocated within the SMI enterprises
subtree (1.3.6.1.4.1) and provides an easy and
unambiguous means for determining `what kind of box' is
being managed. For example, if vendor `Flintstones,
Inc.' was assigned the subtree 1.3.6.1.4.1.424242,
it could assign the identifier 1.3.6.1.4.1.424242.1.1
to its `Fred Router'."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) sysObjectID(2) 0 }
mikrotik OBJECT IDENTIFIER ::= { enterprises 14988 }
.snmpwalk -v 2c -c public corerouter.my.domain 1.3.6.1.4.1.14988
...
iso.3.6.1.4.1.14988.1.1.3.100.1.2.17 = STRING: "cpu-temperature"
iso.3.6.1.4.1.14988.1.1.3.100.1.3.17 = INTEGER: 22
iso.3.6.1.4.1.14988.1.1.3.100.1.4.17 = INTEGER: 1
...
snmptranslate -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.2.17
MIKROTIK-MIB::mtxrGaugeName.17
snmptranslate -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.3.17
MIKROTIK-MIB::mtxrGaugeValue.17
snmptranslate -Td -mAll iso.3.6.1.4.1.14988.1.1.3.100.1.4.17
MIKROTIK-MIB::mtxrGaugeUnit.17
mtxrGaugeUnit OBJECT-TYPE
-- FROM MIKROTIK-MIB
SYNTAX INTEGER {celsius(1), rpm(2), dV(3), dA(4), dW(5), status(6)}
MAX-ACCESS read-only
STATUS current
DESCRIPTION "units"
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) mikrotik(14988) mikrotikExperimentalModule(1) mtXRouterOs(1) mtxrHealth(3) mtxrGaugeTable(100) mtxrGaugeTableEntry(1) mtxrGaugeUnit(4) 17 }
snmpwalk -v 2c -c public -m MIB:ALL corerouter.my.domain 1.3.6.1.4.1.14988
...
MIKROTIK-MIB::mtxrGaugeName.17 = STRING: cpu-temperature
MIKROTIK-MIB::mtxrGaugeValue.17 = INTEGER: 23
MIKROTIK-MIB::mtxrGaugeUnit.17 = INTEGER: celsius(1)
...
snmpwalk -v 2c -c public -m MIB:ALL -O f corerouter.my.domain 1.3.6.1.4.1.14988
...
.iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrHealth.mtxrGaugeTable.mtxrGaugeTableEntry.mtxrGaugeName.17 = STRING: cpu-temperature
.iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrHealth.mtxrGaugeTable.mtxrGaugeTableEntry.mtxrGaugeValue.17 = INTEGER: 22
.iso.org.dod.internet.private.enterprises.mikrotik.mikrotikExperimentalModule.mtXRouterOs.mtxrHealth.mtxrGaugeTable.mtxrGaugeTableEntry.mtxrGaugeUnit.17 = INTEGER: celsius(1)
...
Словно в пустом участке есть нечто, превращающее строку в жирную
ls -l|grep '^-'|awk '{if(a[$5]){ a[$5]=a[$5]"\n"$NF; b[$5]++;} else a[$5]=$NF} END{for(x in b)print a[x];}'
ls -lR | grep '^-' | awk '{
f = "";
if (NF > 9)
for (i = 9; i <= NF; i++)
f = f ? f" "$i : $i;
else
f = $9;
if (a[$5]) {
a[$5] = a[$5]"\n"$5" "f;
b[$5]++;
} else {
a[$5] = $5" "f
}
}
END {
for (x in b)
print a[x];
}'
Зачем нужны HDD Seagate SkyHawk (видео)
ImagePerfect supports the ATA-8 Streaming command set and allows a host to request delivery of data within an allotted time; it places a priority on a time to transfer the data, rather than the integrity of the data.
In addition, the ATA-8 Streaming command set is optimized to handle large sequential block transfers.
Internal and background operations of SkyHawk HDDs with ImagePerfect are interruptible and scheduled such that they do not hold up any requests from the host. Command completion times (CCT) are kept low to minimize any host buffer overruns or underruns.
Можно ли HDD SkyHawk использовать в NAS?
Может быть ONU как-им то образом различает что трафик ip-ip и не справляется с ним, даже если он в режиме pass-through?Да, скорее всего, причина в этом: почти все бюджетные скоростные маршрутизаторы не могут маршрутизировать трафик на процессоре в полную скорость, перекладывая эту задачу на специализированную аппаратную подсистему после начальной обработки соединения. Аппаратные подсистемы, как правило, ускоряют только TCP и UDP.