LINUX.ORG.RU

Сообщения PoMbl4

 

Бесконечная прокрутка с unload

Форум — Web-development

Привет, ребята.

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

Варианты которые я пробовал.

1. Использование пустого div сверху в качестве держателя скролла. Когда мы удаляем ушедший за вьюпорт элемент, то мы берем его высоту и прибавляем к высоте пустого div. Тут хотя бы нет моргания при манипуляциях с дом. Но проблема кроется в том, что юзер может загнать вьюпорт на этот пустой div при обратном скролле. Эта проблема особенно актуальна в дефолтном андроидном браузере, там пока анимация скролла не остановится хрен получишь какие эвенты, подход с таймером не спасает от этого случая. То, что юзер загнал вьюпорт на этот пустой div наверное можно как-то решить, если принять какой-то вариант правильным в этом случае.

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

3. И есть третий вариант, это использовать div с прокруткой, в этом случае все ведет себя достаточно плавно, кроме фокса, у него жуткие тормоза на прокрутке div в сравнении с прокруткой всей страницы.

Ну и вопрос в том как добиться того чего я хочу? Или может быть я трачу силы зря и современные банано-технологии этого не позволяют и я должен ограничиться тупенькой кнопкой «Load More».

Что касается бесконечной прокрутки, то она в моём случае уместна, я знаю, что её порой не любят.

 , ,

PoMbl4 ()

python освобождение памяти

Форум — Development

Привет, ребята. Я пишу на django проектик, и там есть работа с фотками. Сохранить как jpg, сделать тумбочку. Работа с пиксами происходит с помощью pil.

Так вот, когда pil попадается большая картинка, то он выделяет много памяти для неё, python эту память не освобождает (в ожидании следующего раза). И в результате после этого инстанс джанги, которому выпало обрабатывать картинку остается с этой выделенной памятью. В нормальном состоянии инстанс джанги потребляет 33 МБ, после обработки картинки потребление возрастает пропорционально размеру картинки. Например фотка 7.7MP заставляет python уже жрать 65 МБ памяти.

Так вот вопрос, оно отпустит когда-нибудь эту память или нет? Отпустит оно её просто со временем или отпустит оно её когда она будет нужна другому процессу?

 ,

PoMbl4 ()

Шифрование диска и ошибки RAM

Форум — General

На ширпотребе ram всё больше и она всё тоньше. А ECC всё нет. Меня интересует такой вопрос, на сколько использование шифрования уязвимо к ошибкам памяти? Без шифрования если один бит изменится (например во время копирования или записи) я рискую потерять один файл в лучшем случае. Что я получу в такой ситуации использую шифрование? Что произойдёт если этот бит придется на область памяти в которой хранится ключ? Получу я полностью убитый зашифрованный раздел? Про необходимость бекапов - это всё очевидно.

 , ,

PoMbl4 ()

Скрипт сборки freetype с патчами bohoomil

Форум — Desktop

С выходом новой версии патчей от bohoomil у меня уходит достаточно много сил на сборку пакета. В процессе нужно вспомнить все варварские приёмы с помощью которых я заталкиваю freetype в пакет. Решил я это дело автоматизировать, не столько для автоматизации, а в качестве памятки. Перед запуском нужно удовлетворить зависимости:

apt-get build-dep freetype
apt-get install devscripts

Функция buildi386 нужна только для сборки multiarch пакетов. Например для wine на amd64 нужен libfreetype6:i386. Чтобы увидеть эффект нужно поместить файл infinality-settings.sh туда, где он будет запускаться при запуске иксов. Например в /etc/profile.d/

#!/bin/bash

GITURL='https://codeload.github.com/bohoomil/fontconfig-ultimate/zip/pkgbuild'
FREETYPEURL='http://download.savannah.gnu.org/releases/freetype'
BOHOOMILDIR='fontconfig-ultimate-pkgbuild/01_freetype2-iu'

# apt-get build-dep freetype
# apt-get install devscripts

revision=''

die()
{
	echo
	echo "FAIL: $@"
	exit 1
}

downloadsrc()
{
	for i in freetype freetype-doc ft2demos
	do
		wget "$FREETYPEURL/$i-$revision.tar.gz" ||
			die "wget $FREETYPEURL/$i-$revision.tar.gz"
	done
}

prepare()
{
	rm -rf freetype
	mkdir freetype
	cd freetype || exit 1

	wget --output-document=bohoomil.zip "$GITURL" || die "wget $GITURL"
	unzip bohoomil.zip || die 'unzip bohoomil.zip'

	revision=`grep -m1 '^pkgver\=' "$BOHOOMILDIR/PKGBUILD"`
	[[ $revision =~ ^pkgver=(.+)$ ]]
	revision=${BASH_REMATCH[1]}

	if [ -z "$revision" ]
	then
		die "can't get freetype revision from $BOHOOMILDIR/PKGBUILD"
	fi

	echo "Found freetype revision: $revision"

	apt-get source freetype || die "apt-get source freetype"
	rm *

	cd freetype-* || die "can't cd to freetype-X/debian"
	rm *

	debrev="$revision"
	if [[ ! $revision =~ ^.+\-.+$ ]]
	then
		debrev="$revision-0.1"
	fi

	debchange --newversion "$debrev" 'bohoomil patches added' ||
		die "debchange failed"

	cd ..
	cd "freetype-$revision" || die "can't cd to freetype-$revision"

	downloadsrc

	# build error fix
	echo 'usr/share/man' >> debian/libfreetype6-dev.install

	# replace debian patches in freetype
	rm debian/patches-freetype/*

	cp "../$BOHOOMILDIR/"*.patch debian/patches-freetype/
	ls debian/patches-freetype/*.patch | xargs -n 1 basename |
		sed 's|$| \-p1|' > debian/patches-freetype/series

	# remove patches from freetype2-demos
	rm debian/patches-ft2demos/*
	echo '01-empty.patch' > debian/patches-ft2demos/series
	touch debian/patches-ft2demos/01-empty.patch
}

build()
{
	export CFLAGS="-Wno-error"

	echo "y" | debuild -uc -us
	# now build fails, update symbols file, and run again
	cp debian/libfreetype6/DEBIAN/symbols debian/libfreetype6.symbols
	echo "y" | debuild -uc -us -nc
}

buildi386()
{
	export CFLAGS="-Wno-error -m32"
	export LDFLAGS="-Wl,-melf_i386"
	export DEB_BUILD_ARCH="i386"
	export DEB_HOST_MULTIARCH="i386-linux-gnu"

	echo "y" | debuild -uc -us -ai386

	cd ..
	echo "### fix debs i386 ###"

	# fix depends libc6-i386 to libc6
	for i in *_i386.*deb
	do
		dpkg -x "$i" "/tmp/$i"
		dpkg -e "$i" "/tmp/$i/DEBIAN"
		sed '/Depends\: / s|\-i386||g' -i "/tmp/$i/DEBIAN/control"
		dpkg -b "/tmp/$i/" "$i"
		rm -r "/tmp/$i"
	done
}

if (( $EUID < 1000 ))
then
	echo 'Moron!?'
	exit 1
fi

prepare
build

# uncomment if you want to build i386 packages on amd64 arch.
#buildi386

 , ,

PoMbl4 ()

debian jessie, networkmanager теряет сеть

Форум — General

У меня debian jessie amd64, имеется network manager ну и плазмоид к нему. Так вот, суть в том, что он теряет сеть после выключения-включения. Да даже после сна теряет. Я поставил в плазмоиде ipv6 в ignored, ipv4 галку required, он стал терять сеть куда реже, неделю или две оно работало. А тут пришел, включил, и опять в этом плазмоиде возник eth0 как активное соедиение и интернет не работает. Собственно вопрос - как устранить это безобразие? Сносить networkmanager я не хочу, тут вон почта хранится в mysql, жировать так жировать.

 

PoMbl4 ()

Android browser прямоугольники на картинках

Форум — Mobile

У меня есть Huawei Ascend g525. Я накатил на него Mokee OS (андроид 4.4.4). Есть неприятный баг дефолтного браузера. Если открыть эту страницу http://m.habrahabr.ru/post/251941/, то на картинки накладываются белые прямоугольники, которые перекрывают их.

Из-за чего это может возникать? Пробовал cyanogenmod там такой же эффект.

 

PoMbl4 ()

Android, читалка со словарём

Форум — Mobile

Посоветуйте читалку с функцией словаря. Перевод должен вызываться как можно быстрее. Пробовал FBreader, там чтобы получить перевод нужно удерживать палец над словом, а затем отпустить. Это занимает много времени.

PoMbl4 ()

ideapad. Нашёл способ управления зарядом батареи.

Форум — General

Привет, ребята.

У меня есть ноутбук Lenovo ideapad G580 (20150). И у этого ноутбука под венду есть утилита под названием «lenovo energy management». Среди возможностей этой утилиты есть и функция управления зарядом батареи - полный заряд и режим защиты аккумулятора. В Linux этой фичей пользоваться нельзя, нет средств для этого (tp_smapi и tpacpi-bat только для настоящих ThinkPad'ов). Меня этот факт очень огорчал и я провел изыскания в результате которых нашел способ переключения режимов батареи.

Вообще управляется эта фигня через Super_I/O, но не суть важно.

Для начала нам нужен оффтопик с установленным «lenovo energy management» и тулзой RWEverything.

Запускаем RWEverything и тыкаем иконку EC скрин. Переключаем в «lenovo energy management» режимы батареи и смотрим какой байт меняется в окошке «Embedded Controller». В моем случае это байт по адресу «0A», 21 - защита батареи, 41 - полный заряд. А EC_SC/EC_DATA это адреса регистров, которые нам потом понадобятся. Все ясно, перезагружаемся в линукс.

Сначала я хотел использовать superiotool, но фиг там:

# superiotool 
superiotool r6637
No Super I/O found

Однако удача была со мной, и я нашел fanctrl.c, который и послужил основой для моей поделки.

Собственно моя поделка:

#include <stdint.h>
#include <sys/io.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/* Поменяйте на свои значения */
#define EC_SC 0x66
#define EC_DATA 0x62
#define IBF 1
#define OBF 0
#define EC_SC_READ_CMD 0x80
#define EC_SC_WRITE_CMD 0x81
#define EC_SC_SCI_CMD 0x84
#define BATT_PORT 0x0a
#define BATT_LIMIT 0x21
#define BATT_FULL 0x41

static void init()
{
    if (ioperm(EC_DATA, 1, 1) != 0)
    {
        perror("ioperm(EC_DATA, 1, 1)");
        exit(1);
    }

    if (ioperm(EC_SC, 1, 1) != 0)
    {
        perror("ioperm(EC_SC, 1, 1)");
        exit(1);
    }
}

static void wait_ec(const uint32_t port, const uint32_t flag, const char value)
{
    uint8_t data;
    int i;

    i = 0;
    data = inb(port);

    while ( (((data >> flag) & 0x1) != value) && (i++ < 100) )
    {
        usleep(1000);
        data = inb(port);
    }

    if (i >= 100)
    {
        fprintf(stderr, "wait_ec error on port 0x%x, data=0x%x, flag=0x%x, value=0x%x\n", port, data, flag, value);
        exit(1);
    }
}

static uint8_t read_ec(const uint32_t port)
{
    uint8_t value;

    wait_ec(EC_SC, IBF, 0);
    outb(EC_SC_READ_CMD, EC_SC);
    wait_ec(EC_SC, IBF, 0);
    outb(port, EC_DATA);
    //wait_ec(EC_SC, EC_SC_IBF_FREE);
    wait_ec(EC_SC, OBF, 1);
    value = inb(EC_DATA);

    return value;
}

static void write_ec(const uint32_t port, const uint8_t value)
{
    wait_ec(EC_SC, IBF, 0);
    outb(EC_SC_WRITE_CMD, EC_SC);
    wait_ec(EC_SC, IBF, 0);
    outb(port, EC_DATA);
    wait_ec(EC_SC, IBF, 0);
    outb(value, EC_DATA);
    wait_ec(EC_SC, IBF, 0);
}

static void dump_all_regs(void)
{
    uint8_t val;
    int i;

    printf("EC reg dump:");

    for (i = 0x00; i <= 0xff; i++)
    {
        if ((i % 16) == 0)
        {
            printf("\n 0x%02x: ", i);
        }

        val = read_ec(i);
        printf("%02x ", val);
    }

    printf("\n");
}

static void set_value(const uint8_t value)
{
    uint8_t rval;

    rval = read_ec(BATT_PORT);
    printf("old value %02x\n", rval);
    write_ec(BATT_PORT, value);
    rval = read_ec(BATT_PORT);
    printf("new value %02x\n", rval);
}

int main(int argc, char *argv[])
{
    init();

    if (argc < 2)
    {
        dump_all_regs();
    }
    else
    {
        if (argv[1][0] == 'f')
        {
            printf("set full charge\n");
            set_value(BATT_FULL);
        }
        else if (argv[1][0] == 'l')
        {
            printf("set limited charge\n");
            set_value(BATT_LIMIT);
        }
        else
        {
            printf("unknown option\n");
        }
    }

    return 0;
}

А это её работа:

# acpi
Battery 0: Unknown, 60%
# ./a.out f
set full charge
old value 21
new value 41
# acpi
Battery 0: Charging, 61%, 00:01:23 until charged
# ./a.out l
set limited charge
old value 41
new value 21
# acpi
Battery 0: Discharging, 61%, 01:52:05 remaining
# acpi
Battery 0: Discharging, 60%, 01:49:36 remaining
# acpi
Battery 0: Discharging, 60%, 01:47:34 remaining
# acpi
Battery 0: Unknown, 60%

PoMbl4 ()

Lenovo Ideapad, изменить макс. уровень заряда батареи.

Форум — General

Привет. Есть ли способ переключения максимального уровня заряда батареи для изделий серии Ideapad? tp_smapi только для тхинкпадов.

PoMbl4 ()

Thunar не показывает thumbnails для некоторых видеофайлов

Форум — Desktop

Система Debian Wheezy i386, XFCE 4.8, Thunar 1.2.3. Соответственно для генерации эскизов используется tumbler, который в свою очередь использует gstreamer.

Пример видеофайлов, для которых не показывает эскизы:

*.wmv: video/x-ms-asf
*.avi: video/x-msvideo
Я на эти видео натравливал ffmpegthumbnailer и он успешно генерировал эскизы.

Gstreamer установлен так:

$ aptitude search gstreamer | grep '^i'
i A gstreamer0.10-alsa              - модуль GStreamer для ALSA                 
i A gstreamer0.10-ffmpeg            - FFmpeg plugin for GStreamer               
i A gstreamer0.10-gconf             - GStreamer plugin for getting the sink/sour
i A gstreamer0.10-plugins-bad       - GStreamer plugins from the "bad" set      
i A gstreamer0.10-plugins-base      - базовый набор модулей GStreamer           
i A gstreamer0.10-plugins-good      - модули GStreamer из «хорошего» набора     
i A libgstreamer-plugins-bad0.10-0  - GStreamer development files for libraries 
i A libgstreamer-plugins-base0.10-0 - библиотеки GStreamer из базового набора   
i A libgstreamer0.10-0              - базовые библиотеки и компоненты GStreamer

Ну и вопрос - как мне сделать чтобы были эскизы для этих типов видео?

PoMbl4 ()

grep спотыкается - невозможно выделить память

Форум — General

Пытаюсь выудить содержимое текствого файл со старого харда при помощи grep.

grep -a -b -o 'somestring' disk.img
grep: disk.img: Невозможно выделить память
С другим диском (80 гб) греп работал нормально. С этим же дойдя до определенного места он валится с вышеуказанным сообщением. Подумав, что проблема в диске я снял образ с того места, на котором греп повалился, получился файл на 43.5 гига. Однако греп и с этим файлом начинает пожирать память пока она не закончится.

ЧЯДНТ?

PoMbl4 ()

debian, корректная остановка сервисов запускаемых вручную

Форум — General

Привет. Есть сервисы, запуск которых оключен, я их запускаю вручную когда они нужны. Проблема в том, что при выключении/ребуте не происходит вызов их скриптов с аргументом stop. Вместо этого происходит варварский kill. Сервисы я отключал при помощи rcconf, sysv-rc-conf, с обоими результат одинаковый.

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

PoMbl4 ()

Прокси для торрента, который подменяет uploaded

Форум — Desktop

Понятное дело, что оно должно быть нативным.

TorrentRatioKeeperMonster не предлагать, ибо ява и накрутка лайт версии недостаточна.

Морально-этический вопрос оставим без рассмотрения.

PoMbl4 ()

В KDE не работает пищалка

Форум — Desktop

В голой консоли вводим echo -en «\a» - пищит, и колонками и аппаратной пищалкой, в зависимости от того загружен ли модуль pcspkr.

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

При этом beep работает везде, и в голой консоли, и в кде.

Вопрос очевиден: как заставить пищалку работать в кде?

система: debian squeeze amd64

PoMbl4 ()

[вещества] Перенос сознания и проблема копии

Форум — Talks

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

Почему имеем эту проблему? А потому, что когда засыпаешь, то «эго» перестает работать, именно эго, а не мозг вообще. А когда просыпаешься, то нет никаких гарантий, что ты - это ты, а не свеже-загруженная с ПЗУ копия. Природа делает как проще и как ей нужно, так что такой вариант вполне вероятен.

Рассматривался ли этот вопрос кем либо из ученых мужей?

PoMbl4 ()

[C] define, подстановка текста внутри кавычек

Форум — Development

Имеем базовую часть url:
#define BASEURL "http://host.ru/"
Для запросов нужно составить url:
request(«BASEURLindex.php»);
Собственно вопрос, что нужно сделать чтобы «BASEURLindex.php» превратилось в "http://host.ru/index.php"

PoMbl4 ()

[pyqt, lxml] Затеял писать читалку ЛОРа, как лучше обработать html

Форум — Development

В качестве учебного задания при освоении гуи тулкитов решил сделать читалку лора. Изначально решил использовать pygtk, но модуль python-gtkhtml помер, и соответственно отобразить html нет возможности. Конечно можно сделать разбор тегов и более менее похожее форматирование в gtk.textview, но все равно получится фигня. Поэтому я решил сменить тулкит на pyqt.

Руками выдрал одно сообщение из треда, загрузил в QTextBrowser, ссылки кажет, форматирование есть, короче говоря - то, что нужно.

html я решил обрабатывать следующим образом:
Качаем страницы тредов и выкусываем из них минимально необходимый html отдельного сообщения для отображения в QTextBrowser, строим дерево пост-ответ-на-пост и т.д. и отображаем его в QTreeView. При выборе строки в qtreeview берем соответствующий кусок html и отображаем его в QTextBrowser.

Для разбора html я использую lxml, тут то и встает вопрос - как при помощи lxml получить по xpath необходимый кусок сырого html содержащий пост?

Если с lxml не выйдет, то что из родного кутишного позволит осуществить это?

PoMbl4 ()

[GTK] как называется эта штука?

Форум — Development
PoMbl4 ()

OpenVPN клиент на роутере, пустить клиентов мимо него

Форум — Admin

Необходимо использовать впн на роутере, а клиентов пускать напрямую в инет через ppp0. После запуска впна на роутере в локалке пропадает инет.

iptables таков:

iptables -F
iptables -t nat -F
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

echo 1 > /proc/sys/net/ipv4/ip_forward


iptables -A INPUT -i lo -j ACCEPT


iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


iptables -A INPUT -p tcp -i eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --dport 53 -j ACCEPT


iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT 

Если заменить ppp0 на tun0, то инет в локалке есть.

А это route:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
68-168-212-118. 10.6.6.6        255.255.255.255 UGH   0      0        0 ppp0
10.6.6.6        *               255.255.255.255 UH    0      0        0 ppp0
localnet        *               255.255.255.0   U     0      0        0 eth0
10.110.0.0      *               255.255.0.0     U     0      0        0 tun0
default         10.110.255.254  128.0.0.0       UG    0      0        0 tun0
128.0.0.0       10.110.255.254  128.0.0.0       UG    0      0        0 tun0
default         10.6.6.6        0.0.0.0         UG    0      0        0 ppp0

Собственно вопрос - как поправить?

PoMbl4 ()

iceweasel либо починить, либо заменить

Форум — Desktop

После закрытия остаётся процесс firefox-bin, который 100% грузит процессор.
Понятное дело, что каждый раз ходить и убивать его не вариант.
Я сносил профиль, выключал плугины, явы у меня нет, толку ноль.

После закрытия iceweasel strace сыпет:
poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLNVAL}])

Система debian squeeze amd64

Так вот, скажите как это исправить, либо скажите где можно взять deb пакет оригинального фокса (думаю, что с ним такого не происходит).

PoMbl4 ()

RSS подписка на новые темы