Всем привет. Понадобилось забацать поиск пути в игрушке, которую пишу на С. Несколькоминутный поиск привёл к алгоритму «А звёздочка». Поискал описание алгоритма, нашёл неплохое объяснение вот здесь и здесь. Раскурил листинг на питоне, а вот как это портировать на С? Даже не знаю с чего начинать. Буду рад любым советам/ссылкам/посылам/etc ☺
Всем привет.
После перезагрузки хоста падает lvm, в который было воткнуто 2 диска sdb и sdc.
Выхлоп journalctl:
Mar 29 09:13:06 localhost systemd[1]: Starting Activation of LVM2 logical volumes...
Mar 29 09:13:06 localhost lvm[180]: Couldn't find device with uuid sccmIu-CRmu-jS2G-a009-J2Zl-N1YL-D7RMpv.
Mar 29 09:13:06 localhost lvm[180]: Refusing activation of partial LV lvm/volume. Use '--activationmode partial' to override.
Mar 29 09:13:06 localhost lvm[180]: 0 logical volume(s) in volume group "lvm" now active
Mar 29 09:13:06 localhost systemd[1]: lvm2-activation.service: Main process exited, code=exited, status=5/NOTINSTALLED
Mar 29 09:13:06 localhost systemd[1]: lvm2-activation.service: Failed with result 'exit-code'.
Mar 29 09:13:06 localhost systemd[1]: Failed to start Activation of LVM2 logical volumes.
pvscan -vd выводит следующее:
localhost ~ # pvscan -vd
Wiping internal VG cache
Wiping cache of LVM-capable devices
Couldn't find device with uuid sccmIu-CRmu-jS2G-a009-J2Zl-N1YL-D7RMpv.
There are 1 physical volumes missing.
PV [unknown] VG lvm lvm2 [<465.76 GiB / 0 free]
PV /dev/sdc VG lvm lvm2 [<465.76 GiB / 0 free]
Total: 2 [<931.52 GiB] / in use: 2 [<931.52 GiB] / in no VG: 0 [0 ]
pvck:
localhost ~ # pvck -vyd /dev/sdb1
Scanning /dev/sdb1
Could not find LVM label on /dev/sdb1
localhost ~ # pvck -vyd /dev/sdc
Scanning /dev/sdc
Found label on /dev/sdc, sector 1, type=LVM2 001
Found text metadata area: offset=4096, size=1044480
vgdisplay:
localhost ~ # vgdisplay
Couldn't find device with uuid sccmIu-CRmu-jS2G-a009-J2Zl-N1YL-D7RMpv.
--- Volume group ---
VG Name lvm
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 1
VG Size <931.52 GiB
PE Size 4.00 MiB
Total PE 238468
Alloc PE / Size 238468 / <931.52 GiB
Free PE / Size 0 / 0
VG UUID MfU6QF-MqPN-1rzE-RpwR-c3yd-SZnY-qY6LEz
Подскажите пожалуйста, как выбрать определённого юнита, расположенного на тайловой карте? Есть «лобовой» вариант перебирать массив юнитов и сравнивать координаты каждого юнита с координатами тайла, на котором находится курсор, но меня этот вариант не сильно устраивает, т.к. если на карте будет 100к юнитов, то перебор будет занимать очень много времени.
Немного поигравшись и вкусив все прелести изометрии решил её отложить в сторону и сделать «скелет» в 2D.
Сейчас, реализовывая передвижение тайла по нажатию ПКМ, я «размазал» его по нескольким функциям: main.c: updateInput(), main.c:update() и main.c:moveCharacter(), что мне собственно не очень нравится, т.к. хотелось бы держать всё в одном месте. Натолкните, пожалуйста, на идею как можно сделать проще/красивее/иначе.
BTW, за критику и другие советы буду благодарен :)
Всем привет. Решил поиграться с SDL2, взял пример с Lazy Foo и запустил его на Cишке. Программа стартует, но текстуры, кторые я загружаю не рендерятся. В чём может быть проблема?
make test
cc -m32 -gstabs+ -dynamic-linker /usr/i686-pc-linux-gnu/lib/ld-linux.so.2 -L/usr/i686-pc-linux-gnu/lib -m elf_i386 -lc test.s -o test
cc: error: elf_i386: No such file or directory
cc: error: unrecognized command line option '-m'
make: *** [<builtin>: test] Error 1
Захотелось осилить гитару для себя. К сожалению, а может и к счастью, с преподом заниматься нет возможности, т.к. график у меня скачет и невозможно назначить перманентное время занятий. Некоторые советуют начинать задрачивать брынчание аккордов, мол этого будет достаточно, но мне бы хотелось осилить интсрумент на более серьёзном уровне - знать нотную грамоту и т.д.
Посему посоветуйте, пожалуйста, хороший самоучитель для девайса.
Другие советы для более быстрого и эффективного освоения тоже приветствуются.
Например, вас взяли на проект где уже написано 100500 строк кода, при чём проект пережил несколько этапов эволюции: писался разными людьми, которые уже не работают, с разным уровнем скиллов и т.д. Другими словами — «сборная солянка» ☺
Вы сразу берёте какую-то таску, пусть будет «на починить» или «реализовать» что-то и понеслась...
Как вы будете это делать?
У меня что-то хреновенько выходит ☹ Реализовывая/чиня что-то, я пытаюсь применять алгоритмы поисков вглубину и ширину. Но проблема заключается в том, что дойдя до самой глубокой ноды я уже не понимаю как и зачем я сюда добрался. Записи и рисовалки не помогают. С шириной всё ещё хуже — инфы набирается столько, что теряю нить её применения и приходится несколько раз начинать сначала.
Интересен любой опыт над любыми проектами... ну, и техники «вливания»
Мне нужны значения query->results->channel->location->city
query->results->channel->item->condition->{temp, text}. Как это сделать более красиво, используя json-c библиотеку, нежели в этом говнокоде:
static void get_json_items(struct json_object *jobj, const char *key)
{
struct json_object *tmp;
struct json_object *location;
struct json_object *condition;
struct json_object *temp;
struct json_object *text;
int exists;
/* enum json_type type; */
exists = json_object_object_get_ex(jobj, key, &tmp);
if (!exists) {
printf("%s is not found in JSON\n", key);
return;
}
exists = json_object_object_get_ex(tmp, "results", &tmp);
if (!exists) {
printf("\"results\" is not found\n");
return;
}
exists = json_object_object_get_ex(tmp, "channel", &tmp);
if (!exists) {
printf("\"channel\" is not found\n");
return;
}
exists = json_object_object_get_ex(tmp, "location", &location);
if (!exists) {
printf("\"location\" is not found\n");
return;
}
exists = json_object_object_get_ex(location, "city", &location);
if (!exists) {
printf("\"city\" is not found\n");
return;
}
exists = json_object_object_get_ex(tmp, "item", &tmp);
if (!exists) {
printf("\"item\" is not found\n");
return;
}
exists = json_object_object_get_ex(tmp, "condition", &condition);
if (!exists) {
printf("\"condition\" is not found\n");
return;
}
exists = json_object_object_get_ex(condition, "temp", &temp);
if (!exists) {
printf("\"temp\" is not found\n");
return;
}
exists = json_object_object_get_ex(condition, "text", &text);
if (!exists) {
printf("\"text\" is not found\n");
return;
}
printf("DBG >>>\n");
/* printf("---\nlocation: %s\n---\n", json_object_to_json_string(location)); */
/* printf("---\nitem: %s\n---\n", json_object_to_json_string(tmp)); */
printf("city: %s\n",
json_object_get_string(location)
);
printf("temp: %s\n",
json_object_get_string(temp)
);
printf("text: %s\n",
json_object_get_string(text)
);
printf("DBG <<<\n");
}
lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation 3rd Gen Core processor DRAM Controller [8086:0154] (rev 09)
00:02.0 VGA compatible controller [0300]: Intel Corporation 3rd Gen Core processor Graphics Controller [8086:0166] (rev 09)
00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04)
00:16.0 Communication controller [0780]: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 [8086:1e3a] (rev 04)
00:19.0 Ethernet controller [0200]: Intel Corporation 82579LM Gigabit Network Connection [8086:1502] (rev 04)
00:1a.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 [8086:1e2d] (rev 04)
00:1b.0 Audio device [0403]: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller [8086:1e20] (rev 04)
00:1c.0 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 [8086:1e10] (rev c4)
00:1c.1 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 [8086:1e12] (rev c4)
00:1c.2 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 3 [8086:1e14] (rev c4)
00:1d.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 [8086:1e26] (rev 04)
00:1f.0 ISA bridge [0601]: Intel Corporation QM77 Express Chipset LPC Controller [8086:1e55] (rev 04)
00:1f.2 SATA controller [0106]: Intel Corporation 7 Series Chipset Family 6-port SATA Controller [AHCI mode] [8086:1e03] (rev 04)
00:1f.3 SMBus [0c05]: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller [8086:1e22] (rev 04)
02:00.0 System peripheral [0880]: Ricoh Co Ltd MMC/SD Host Controller [1180:e822] (rev 07)
03:00.0 Network controller [0280]: Intel Corporation Centrino Advanced-N 6205 [Taylor Peak] [8086:0085] (rev 34)
Возмжоно ли пробросить/расшарить видеокарту в гостевую ОС без наличия второй?
Я собрал кернел с IOMMU:
[ 0.000000] Kernel command line: BOOT_IMAGE=/kernel-virt root=PARTUUID=f50ff0ca-82e4-4b1b-99ac-60b9987f634f zswap.enable=1 disable_ipv6 resume=/dev/sda3 "acpi_osi=!Windows 2012" intel_iommu=on
[ 0.000000] DMAR: IOMMU enabled
[ 0.004716] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.311330] iommu: Adding device 0000:00:00.0 to group 0
[ 0.311419] iommu: Adding device 0000:00:02.0 to group 1
[ 0.311509] iommu: Adding device 0000:00:14.0 to group 2
[ 0.311600] iommu: Adding device 0000:00:16.0 to group 3
[ 0.311689] iommu: Adding device 0000:00:19.0 to group 4
[ 0.311779] iommu: Adding device 0000:00:1a.0 to group 5
[ 0.311868] iommu: Adding device 0000:00:1b.0 to group 6
[ 0.311957] iommu: Adding device 0000:00:1c.0 to group 7
[ 0.312044] iommu: Adding device 0000:00:1c.1 to group 8
[ 0.312133] iommu: Adding device 0000:00:1c.2 to group 9
[ 0.312235] iommu: Adding device 0000:00:1d.0 to group 10
[ 0.312327] iommu: Adding device 0000:00:1f.0 to group 11
[ 0.312415] iommu: Adding device 0000:00:1f.2 to group 11
[ 0.312505] iommu: Adding device 0000:00:1f.3 to group 11
[ 0.312594] iommu: Adding device 0000:02:00.0 to group 12
[ 0.312684] iommu: Adding device 0000:03:00.0 to group 13
[ 0.326767] [drm] VT-d active for gfx access
Какие следующие шаги нужно выполнить, если это возможно?
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import ElementNotVisibleException
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import WebDriverException
import time
class Component:
def __init__(self, driver):
self.driver = driver
def TypeText(self, selector, value):
input_field = self.FindElement(selector)
try:
input_field.send_keys(value)
except ElementNotVisibleException:
# time.sleep(1)
input_field.send_keys(value)
def Click(self, selector):
element = self.FindElement(selector)
# try:
# element.click()
# except ElementNotVisibleException:
# # time.sleep(1)
# element.click()
# except WebDriverException:
# # time.sleep(1)
# element.click()
element.click()
def FindElement(self, selector):
# element = WebDriverWait(self.driver, 5).until(
# lambda driver: driver.find_element(By.CSS_SELECTOR, selector))
# # EC.presence_of_element_located((By.CSS_SELECTOR, selector)))
element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, selector))
)
print(element)
return element
Очень не хочется вставлять sleep'ы, потому что, на сколько мне известно, для этого существуют wait'ы в селениуме. Даже при
element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, selector))
я получаю эксепшн:
Traceback (most recent call last):
File "./main.py", line 40, in <module>
run()
File "./main.py", line 36, in run
p.setDateFilter(STARTDATE, ENDDATE)
File "/home/int/dev/python/den/lib/core/page.py", line 40, in setDateFilter
date.Click(self.locators['BankShifts.dateicon'])
File "/home/int/dev/python/den/lib/core/core.py", line 33, in Click
element.click()
File "/home/int/dev/python/den/lib/selenium/webdriver/remote/webelement.py", line 74, in click
self._execute(Command.CLICK_ELEMENT)
File "/home/int/dev/python/den/lib/selenium/webdriver/remote/webelement.py", line 457, in _execute
return self._parent.execute(command, params)
File "/home/int/dev/python/den/lib/selenium/webdriver/remote/webdriver.py", line 233, in execute
self.error_handler.check_response(response)
File "/home/int/dev/python/den/lib/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
Stacktrace:
at fxdriver.preconditions.visible (file:///tmp/tmp5fwmfvli/extensions/fxdriver@googlecode.com/components/command-processor.js:10092)
at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmp5fwmfvli/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)
at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmp5fwmfvli/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmp5fwmfvli/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
at DelayedCommand.prototype.execute/< (file:///tmp/tmp5fwmfvli/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
В С у меня вообще нет опыта, но очень интересен кернел. Копаясь в интернетах, набрёл на The Eudyptula Challenge проект с таким описанием:
What is it?
The Eudyptula Challenge is a series of programming exercises
for the Linux kernel, that start from a very basic "Hello world"
kernel module, moving on up in complexity to getting patches
accepted into the main Linux kernel source tree.
What skills do I need to take this?
A basic understanding of the C programming language is required.
No previous Linux kernel coding experience is needed, but that
of course will help.
и очень заинтересовался ☺ Но меня немного смущает порог вхождения. Я никогда не писал ничего серьёзного в юзер-спейсе, кроме хеллоуворлдов из упражнений в K&R (сейчас по-тихоньку разруливаю вот это, хотя, в сишке более-менее ориентирусь (по крайней мере, мне так кажется ☺).
Вопрос: стоит ли вообще рыпаться с этой едиптулой, или лучше набить скиллов, лет 10-15 практикуясь в обычных С проектах?