LINUX.ORG.RU

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

Матан

Форум — Talks

Замечаю все чаще, что при разборе той или иной около-алгоритмической проблемы - не хватает матана. В универе на каком-то уровне учил, но этого явно недостаточно. Начал читать учебники Зорича и Фихтенгольца и вот какое дело: читаю до какого-то момента - все понятно, потом раз и застрял и дальше никак, смотрю в википедиях и прочих интернетах - там везде либо «отсюда очевидно следует» (а с моим математических критинизмом - это совсем не очевидно), либо же очень много подробностей, в которые закапываюсь и через 4 - 5 часов я уже не помню какой был начальный вопрос, а в голове каша.

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

 

Goganchic
()

Дайте самых страшных фильмов ужасов

Форум — Talks

Желательно пять самых страшных фильмов ужасов по убыванию, на ваш взгляд. Хочу сегодня посмотреть.

 , ,

int13h
()

А дайте фильмов про неформальные движения

Форум — Talks

Интересуют фильмы о неформальных молодежных движениях в СССР и пост-СССР. Что-то похожих на «Меня зовут Арлекино». От себя отмечу годный фильм «Я» https://ru.wikipedia.org/wiki/Я_(фильм)

 , , ,

int13h
()

Мне стыдно, но я таки спрошу свой вопрос про фильмы

Форум — Talks

Порекомендуйте что-то из околотрешовой классики.
Кошмар на улице вязов видел.
Hellriser видел
Пятница 13е тоже

Что ещё есть из этого ряда?
Было ещё что-то типа «Восставшие мертвецы» но не пропёрло...

 

Stahl
()

Кинематограф. Домашняя фильмотека

Форум — Talks

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

nihil
()

Awesome tasklist

Форум — Desktop

Долгое время изучал Wiki, но на многие вопросы так и не нашел ответов, поэтому начал изучать lua код. И в результате этого изучения, родилась эта статья(перенесена на wiki). Опытные, подскажите, может где то есть возможность оптимизировать описанный код.

Панель задач - отображает по умолчанию клиенты с активного тега/тегов.

Перед началом работы скопируйте библиотеки в домашний каталог, если до сих пор этого не сделали.

mkdir -p ~/.config/awesome/themes
cp /etc/xdg/awesome/rc.lua ~/.config/awesome/rc.lua
cp -R /usr/share/awesome/lib/* ~/.config/awesome/
cp -R /usr/share/awesome/themes/* ~/.config/awesome/themes/

Вообще, за обработку панели задач отвечает файл awful/widget/tasklist.lua

Так что если возникнет желание ознакомится со всеми возможностями панели задач, изучите этот файл. Также для работы этого файла потребуются другие библиотеки lua (вызываемые оттуда функции и т.д.), они прописаны в начале файла, это те самые require. Имейте в виду, что код для 3.4 и 3.5 в библиотеке tasklist, как и названия функций в них довольно существенно отличается.

==Управление списком задач==

Для управления открытми клиентами существуют следующие клавиши:

Mod4 + Shift + r	- Перерисовать активное окно.
Mod4 + m		- Развернуть на весь экран.
Mod4 + n		- Свернуть.
Mod4 + Control + n	- Восстановить.
Mod4 + f		- Полноэкранный режим.
Mod4 + Shift + c	- Убить выбранный клиент.
Mod4 + t		- Прикрепить поверх всех.
Кстати, если эти клавиши вас не устравивают, вы в любой момент можете их переопределить, для этого в rc.lua найдите функцию awful.key отвечающую за нужные вам клавиши и измените их.

==Разбираем rc.lua==

Разбирая rc.lua можно обнаружить следующий код, связанный с панелью задач

mytasklist = {}			--создаем таблицу панели задач
mytasklist.buttons = awful.util.table.join(						--прикрепляем клавиши мыши к панели задач
                     awful.button({ }, 1, function (c)				--нажатие левой кнопки
                                              if c == client.focus then		--свернуть/развернуть приложение
                                                  c.minimized = true
                                              else
                                                  -- Without this, the following
                                                  -- :isvisible() makes no sense
                                                  c.minimized = false
                                                  if not c:isvisible() then
                                                      awful.tag.viewonly(c:tags()[1])
                                                  end
                                                  -- This will also un-minimize
                                                  -- the client, if needed
                                                  client.focus = c
                                                  c:raise()
                                              end
                                          end),
                     awful.button({ }, 3, function ()			--нажатие правой клавиши
                                              if instance then		--отображает список всех клиентов/приложений
                                                  instance:hide()
                                                  instance = nil
                                              else
                                                  instance = awful.menu.clients({
                                                      theme = { width = 250 }
                                                  })
                                              end
                                          end),
                     awful.button({ }, 4, function ()				--колесо прокрутки
                                              awful.client.focus.byidx(1)  --перейти на следующий клиент
                                              if client.focus then client.focus:raise() end
                                          end),
                     awful.button({ }, 5, function ()				--колесо прокрутки
                                              awful.client.focus.byidx(-1)	--перейти на предыдущий клиент
                                              if client.focus then client.focus:raise() end
                                          end))
....
    -- Create a tasklist widget  - создание виджета tasklist
    mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)
.... 
    layout:set_middle(mytasklist[s])				--Располагаем список задач в центре панели
Если вам не нужна прокрутка на панели задач, то закоментируйте/удалите код отвечающий за нее:
--awful.button({ }, 4, function ()				--колесо прокрутки
--                                 awful.client.focus.byidx(1)								--перейти на следующий клиент
--                                 if client.focus then client.focus:raise() end
--                                 end),
--awful.button({ }, 5, function ()				--колесо прокрутки
--                                   awful.client.focus.byidx(-1)	--перейти на предыдущий клиент
--                                   if client.focus then client.focus:raise() end
--                                  end))
И добавьте завершающую скобку после закомментированного кода, иначе выдаст ошибку
)

===Варианты для правой кнопки мыши===

====Закрыть приложение====

Для того, чтобы при нажатии правой кнопки мыши мы могли закрывать приложение (как в OpenBox или Tint2), а не открывать список меню, переделайте код (или закомментируйте его, если вы не планируете использовать правую клавишу для панели задач).

awful.button({ }, 3, function ()
                      if instance then
                       instance:hide()
                       instance = nil
                      else
                       instance = awful.menu.clients({
                      theme = { width = 250 }
                     })
                     end
                    end),
На следующий
awful.button({ }, 3, function (c)
    c:kill()
end ),

====Альтернативное меню====

Если вас не устраивает стандартное контекстное меню в панели задач, то вы можете его заменить, на то, которое нужно именно вам, далее приводится лишь один из возможных вариантов. Для начала заменим стандартный вызов awful.button на следующий:

awful.button({ }, 3, function (c)
          if instance then
              instance:hide()
              instance = nil
           else
              instance = context_menu(c)
           end
         end ),
Затем где нибудь в начале файла rc.lua добавьте функцию context_menu:
function context_menu(c)
    if c.minimized then      --меняем текст элемента меню в зависимости от состояния
         cli_min = "Развернуть"
    else
         cli_min = "Свернуть"
    end
    if c.ontop then
         cli_top = "★ Поверх всех"
     else
         cli_top = "  Поверх всех"
    end
    if awful.client.floating.get(c) then
         cli_float = "★ Floating"
     else
         cli_float = "  Floating"
     end
     --создаем список тегов(в виде подменю), для перемещения клиента на другой тег
     tag_menu = { }
     for i,t in pairs(tags.names) do
          if not tags[c.screen][i].selected then			--удаляем из списка выбранный тег/теги
              table.insert(tag_menu, { tostring(t), function() awful.client.movetotag(tags[c.screen][i]) end } )
          end
     end
     taskmenu = awful.menu({ items = { { "Переместить на", tag_menu },
                                       { cli_min, function() c.minimized = not c.minimized end },
                                       { "Fullscreen", function() c.fullscreen = not c.fullscreen end, beautiful.layout_fullscreen },
                                       { cli_float,  function() awful.client.floating.toggle(c) end },
                                       { cli_top, function() c.ontop = not c.ontop end },
                                       { "Закрыть", function() c:kill() end },
                                      width = 150
                                     } )
     taskmenu:show()
     return taskmenu
end

==Отобразить только иконки или текст==

Если вас не устраивает отображение текста и иконок одновременно (например вы большой любитель Unity или Win7), то можно настроить Awesome для отображения только иконок или только текста у приложений. Есть один недостаток, если для приложения не назначено иконки, то соответсвенно и отображать будет нечего (у меня такая ситуация наблюдалась с терминалом xterm, если у вас похожая ситуация, то назначьте иконку по умолчанию для приложений не имеющих собственных иконок(описано ниже).

Откройте ~/.config/awesome/awful/widget/tasklist.lua и в функции widget_tasklist_label_common() (для 3.4) или tasklist_label (для 3.5) замените return text, bg.... на следующий код:

return not theme.tasklist_only_icon and text or '', bg, status_image, not tasklist_disable_icon and c.icon or nil

Затем, создайте переменную в вашем theme.lua со следующим содержанием:

--для отображения только иконок
theme.tasklist_only_icon = true
--для отображения только текста
tasklist_disable_icon = true

Примечание: Не определяйте как одновременно обе этих переменных, иначе вы вообще не увидите своих задач.

Есть еще один способ убрать текст в Awesome 3.4 (к сожалению в 3.5 код вызываемой функции был изменен и поэтому этот способ в нем не работает), но здесь все манипуляции мы будем производить только с файлом rc.lua. Найдите следующий код:

mytasklist[s] = awful.widget.tasklist(function(c)
                                              return awful.widget.tasklist.label.currenttags(c, s)
                                          end, mytasklist.buttons)
И замените его на :
 mytasklist[s] = awful.widget.tasklist(function(c)
                              local task = { awful.widget.tasklist.label.currenttags(c, s) }
                              return '', task[2], task[3], task[4]
                          end, mytasklist.buttons)
В принципе данный код аналогичен первому, только здесь мы производим дополнительное действие.

Аналогичным способом можно удалить и иконки в Awesome 3.4. Откройте ваш rc.lua, найдите

mytasklist[s] = awful.widget.tasklist(function(c)
                                              return awful.widget.tasklist.label.currenttags(c, s)
                                          end, mytasklist.buttons)
И замените его на :
 mytasklist[s] = awful.widget.tasklist(function(c)
                              local task = { awful.widget.tasklist.label.currenttags(c, s) }
                              return task[1], task[2], task[3], nil
                          end, mytasklist.buttons)

==Иконка по умолчанию==

Для некоторых приложений не установлены иконки по умочанию (обычно это терминалы), и если вы, например, используете только иконки в панели задач, или используете отображение приложений в тегах, то приложения без иконок вы просто не увидите. Для решения этой проблемы отредактируйте функцию "tasklist_update" в файле ~/.config/awesome/awful/widget/tasklist.lua. В функции tasklist_update перед строкой table.insert вставьте следующий код:

if not c.icon then
    c.icon = capi.image("path/to/icon/default_icon.png")
end

==Настройка внешнего вида==

Для настройки панели задач, в theme.lua вы можете определить следующие переменные:

===Awesome 3.5===

theme.tasklist_fg_normal - цвет текста панели задач, если значение не определено, то используется значение theme.fg_normal

theme.tasklist_bg_normal - цвет фона панели задач, если значение не определено, то используется значение theme.bg_normal

theme.tasklist_fg_focus - цвет текста активного приложения, если значение не определено, используется значение theme.fg_focus

theme.tasklist_bg_focus - цвет фона активного приложения, если значение не определено, то используется значение theme.bg_focus

theme.tasklist_fg_urgent - цвет текста «срочного» приложения, если не определено, то будет использоваться значение из theme.fg_urgent

theme.tasklist_bg_urgent цвет фона «срочного» приложения, если не определено, то будет использоваться значение theme.bg_urgent

theme.tasklist_fg_minimize - цвет текста свернутого приложения, если не определено, то будет использоваться значение из theme.fg_minimize

theme.tasklist_bg_minimize - цвет фона свернутого приложения, если не определено, то будет использоваться значение из theme.bg_minimize

theme.bg_image_normal - позволяет установить изображение для неактивных в данный момент клиентов

theme.bg_image_focus - позволяет установить фоновое изображение для активного клиента

theme.bg_image_urgent - позволяет установить фоновое изображения для «срочного» клиента

theme.bg_image_minimize - позволяет установить фоновое изображение для свернутого клиента

theme.tasklist_disable_icon - позволяет отключить отображение иконок, если значение равно true

theme.tasklist_font - шрифт для панели задач, если не определено, то будет испльзоватся шрифт из theme.font

theme.tasklist_sticky - позволяет установить текст для «липкого» клиента, если значение не установлено, то используется «▪»

theme.tasklist_ontop - позволяет установить текст/символ для приложения «поверх всех», если значение не установлено, то используется '⌃'

theme.tasklist_floating - текст для приложения в «плавающем» режиме, если значение не установлено, то используется '✈'

theme.tasklist_maximized_horizontal - текст для развернутого по горизонтали приложения, если на установлено, то используется '⬌'

theme.tasklist_maximized_vertical - текст для приложения развернутого по вертикали, если на установлено, то используется '⬍'

===Awesome 3.4===

Здесь возможностей по настройке намного меньше, это еще одна причина перейти на более новую версию.

theme.tasklist_fg_focus - цвет текста активного приложения, если значение не определено, используется значение theme.fg_focus
theme.tasklist_bg_focus - цвет фона активного приложения, если значение не определено, то используется значение theme.bg_focus
theme.tasklist_fg_urgent - цвет текста "срочного" приложения, если не определено, то будет использоваться значение из theme.fg_urgent
theme.tasklist_bg_urgent цвет фона "срочного" приложения, если не определено, то будет использоваться значение theme.bg_urgent
theme.tasklist_fg_minimize - цвет текста свернутого приложения, если не определено, то будет использоваться значение из  theme.fg_minimize
theme.tasklist_bg_minimize - цвет фона свернутого приложения, если не определено, то будет использоваться значение из  theme.bg_minimize
theme.tasklist_floating_icon -  иконка для приложения в "плавающем" режиме
theme.tasklist_font - шрифт для панели задач, если не определено, то будет испльзоватся шрифт из theme.font

===Высота панели ===

Если вас не устраивает стандартная высота панели задач, то ее можно изменить, для этого найдите в rc.lua код отвечающий за создание контейнера mywibox и измените его следующим образом:

mywibox[s] = awful.wibox({ position = "top", height = 24, screen = s })
Здесь вы можете изменить ее расположение, top - сверху, bottom - снизу. height - это высота панели. Или даже можете создать себе вторую панель, переместив панель задач сверху вниз(на примере 3.4):
bottomwibox = {}
bottomwibox[s] =  awful.wibox({ position = "bottom", height = 27, screen = s })
bottomwibox[s].widget = {
              {
                  mylauncher,
                  layout = awful.widget.layout.horizontal.leftright
              },
          mytasklist[s],
          layout = awful.widget.layout.horizontal.rightleft
      }

==Порядок открытых приложений==

По умолчанию новое приложение отображается слева от открытых ранее. Но если вы привыкли к другому, например в Gnome или KDE, то можно настроить, чтобы вновь открываемые приложения открывались справа, т.е. список задач был отсортирован по запуску, где первым в списке будет первое открытое приложение, а последним соответственно последнее. Для этого необходимо открыть файл ~/.config/awesome/awful/widget/tasklist.lua. Все манипуляции с этими файлами лучше всего делать когда они находится в домашнем каталоге, чтобы если вы что-то испортите, можно было их легко восстановить. Итак, найдите в этом файле функцию "function tasklist_update" в ней есть следующая строка:

"'Awesome 3.4"'

table.insert(shownclients,c)
Замените ее на:
table.insert(shownclients, 1, c)
"'Awesome 3.5"'
table.insert(clients, c)
Замените ее на:
table.insert(clients, 1, c)
Перезапустите Awesome.

==Ширина приложений в списке задач ==

Если вас не устраивает, то, что одно запущенное приложение можент занимать все доступное пространоство, на панели задач, то это поведение можно немного изменить. Для этого потребуется отредактировать файл ~/.config/awesome/awful/widget/tasklist.lua

===Awesome 3.4===

Найдите функцию new, в ней необхоидмо изменить

layout = layout.horizontal.flex
На тот вариант расположения виджетов, который вас устраивает. Их полный список находится в файлах awful/widget/layout horizontal.lua и vertical.lua
layout = layout.horizontal.leftright
===Awesome 3.5===

Найдите функцию tasklist.new затем замените

local w = base_widget or flex.horizontal()
Например следующим кодом:
local w = base_widget or fixed.horizontal()
А в начало файла добавьте
local fixed = require("wibox.layout.fixed")
Если предоженный вариант вас не устраивает, можете поэкспериментировать с layout'ами, они находятся в каталоге ~/.config/awesome/wibox/layout

Правда ширина каждого клиента будет зависеть от названия, в принципе это тоже можно поправить если вам требуется фиксированная ширина клиентов, для этого нужно изменить в файле tasklist.lua функцию widget_tasklist_label_common (3.4) или tasklist_label (в 3.5): В начало файла поместите

local string = string
Затем перед строкой "if capi.client.focus == c then" поместите следующий код:
if #name >20 then
    name = string.sub(name,1,20)
end
Здесь мы ограничиваем название 20-ю символами, если вам требуется другое значение, измените его.

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

==Список клиентов ==

По умолчанию в файле rc.lua для обработки списка клиентов для tasklist используется следующий код:

Awesome 3.5
mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons)

Awesome 3.4
mytasklist[s] = awful.widget.tasklist(function(c) 
                               return awful.widget.tasklist.label.currenttags(c,s)
                          end, mytasklist.button)
Т.е. изучив данный код, можно понять, что на панели задач, будут отображены клиенты для текущего тега. Если данное положение дел вас не устаривает, то вы можете например отобразить все клиенты со всех тегов, для этого нужно заменить соотвествующую функцию на одну из следующий:
Awesome 3.4
awful.widget.tasklist.label.allscreen		- для отображения клиентов со всех экранов
awful.widget.tasklist.label.alltags		- для отображения клиентов со всех тегов текущего экрана
awful.widget.tasklist.label.currenttags		- для отображения клиентов с текущего тега
awful.widget.tasklist.label.focused		- для оторажения только клиентов в фокусе

Awesome 3.5
awful.widget.tasklist.filter.allscreen		- для отображения клиентов со всех экранов
awful.widget.tasklist.filter.alltags		- для отображения клиентов со всех тегов текущего экрана
awful.widget.tasklist.filter.currenttags	- для отображения клиентов с текущего тега
awful.widget.tasklist.filter.minimizedcurrenttags	- для отображения свернутых клиентов на текущем теге
awful.widget.tasklist.filter.focused		- для оторажения только клиентов в фокусе
Помимо этого, есть еще ряд приложений, которые не будут отображаться в списке клиентов, эта функция прописана в следующем коде:
Awesome 3.5 - tasklist.lua - function tasklist_update
if not (c.skip_taskbar or c.hidden
            or c.type == "splash" or c.type == "dock" or c.type == "desktop")
            and filter(c, s) then
            table.insert(clients, c)
        end
Похожий код используется и в 3.4, но без строки "and filter(c, s)". Т.е. здесь мы пропускаем часть клиентов, если какие то из них вам все же нужны, удалите код отвечающий за них.

==Сигналы==

Сигналы - это система сообщений которую рассылает ядро Awesome для управления виджетами, клиентами, тегами и т.д. Подробне ознакомится с системой сигналов вы можете [Signals/ru|здесь]. Итак, поддерживаются следующие сигналы:

    tag.attached_connect_signal(screen, "property::selected", u) 
    tag.attached_connect_signal(screen, "property::activated", u)
    capi.client.connect_signal("property::urgent", u)
    capi.client.connect_signal("property::sticky", u)
    capi.client.connect_signal("property::ontop", u)
    capi.client.connect_signal("property::floating", u)
    capi.client.connect_signal("property::maximized_horizontal", u)	
    capi.client.connect_signal("property::maximized_vertical", u)
    capi.client.connect_signal("property::minimized", u)
    capi.client.connect_signal("property::name", u)
    capi.client.connect_signal("property::icon_name", u)
    capi.client.connect_signal("property::icon", u)
    capi.client.connect_signal("property::skip_taskbar", u)
    capi.client.connect_signal("property::screen", u)
    capi.client.connect_signal("property::hidden", u)
    capi.client.connect_signal("tagged", u)
    capi.client.connect_signal("untagged", u)
    capi.client.connect_signal("unmanage", u)
    capi.client.connect_signal("list", u)
    capi.client.connect_signal("focus", u)
    capi.client.connect_signal("unfocus", u)
Названия сигналов говорят сами за себя, единственное, первые 2 улавливают события от тегов, для того, чтобы при смене тега отобразить актуальный список клиентов на нем. После того, как будет принято данное событие будет вызвана функция u:
u = function () tasklist_update(screen, w, buttons, filter, data, style, uf) end
Т.е. панель задач будет обновлена. Так что если вы где то будете менять какое то свойство для клиента, можете не беспокоиться, оно будет отловлено и корректно обработано. Если же нужного вам сигнала здесь нет, то вы всегда можете создать свой.

 

Faiver
()

Разукрашка

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

После прочтения поста вспомнил свои прошлогодние затеи с раскрашиванием терминалов. Заново прочитал это и это, немного перепелил вывод скрипта под себя.

Скрипт автоматом генерирует цветовую схему для терминалов и GTK2/3, настроен под тёмную гамму. Я использую для этих наркоманств угловатую тему Mist, но вы можете перепилить под ту же более симпатичную и аккуратную oomox, сделать опцию для светлого оформления и терминалов (или, если хотите, я могу).

( Ну и как работает твоя развалюха? )

Скрипт

Mist-Colorized

PNG

>>> Просмотр (2715x1207, 1342 Kb)

 , , , trip,

zezic
()

Современная литература - кто что читает?

Форум — Talks

Всем привет!

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

Также на днях где-то на глаза попался список в духе «Топ-50 современных книг по мнению Нью-Йорк Таймс». Понятно, что снова новые имена и фамилии.

Так вот, оба этих события привели к тому, что я пришел на ЛОР с просьбой посоветовать современной литературной годноты. Лично мне более интересны истории, близкие к реальности и драмы с детективным или иным захватывающим сюжетом. Но не обязательно, можно и что-то полегче. Спасибо!

 ,

ins3y3d
()

Какая математика нужна программисту

Форум — Talks

Я вот уже прочитал про дифуры и сейчас читаю функциональные ряды, в том числе и фурье. Но дальше кончается моя бумажная книга, вопрос в том что читать дальше? В реальном(не олимпиадном) программировании я пока сталкивался только с легкой планиметрией и стереометрией и средней трудности задачей с графами. Есть ли смысл читать что-то про графы с точки зрения математики(ведь есть статьи про графы с точки зрения программирования). Есть ли смысл учить теорию числ? Теорию вероятности?

П.С. поскольку я поступил в универ то меня там научат тому что нужно, но последний месяц лета лучше потратить с пользой.

 ,

abs
()

очень хорошее кино

Форум — Talks

Топик хорошего кино.

То, что мне очень понравилось из последнего просмотренного:

oldboy
Иди и смотри
Вход в пустоту
Человек, которого не было
Господин Никто
Лучшее предложение
Весна, лето, очень, зима и снова весна
Ночь на Земле
Фейерверк (хана-би)
Достучаться до небес
Европа
Обезьянки

Напишите, кому хочется, ещё всяких хороших фильмов, не знаю чего бы посмотреть.

LimboMe, наверняка подскажешь что-либо.

 ,

kinik
()

хеш-таблица на диске

Форум — Development

посоветуйте алгоритмы или готовые реализации хеш-таблицы, которая хранится на диске?

ключ: битовая строка (желательно, но не обязательно, произвольной длины)

данные: фиксированное количество бит

критерии: минимальный объем на диске, быстрое время доступа на чтение, не слишком требовательно к озу (т.к. для десктопа).

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

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

 , ,

MyTrooName
()

Веб-разработка в Vim

Форум — Web-development

Предлагаю обсудить и поделиться опытом по веб-разработке в Vim.

Я использую Vim в терминале termite (со своими патчами для дефолтного копипаста и прочее) с цветовой схемой gruvbox: как для терминала, так и для Vim.

Этот клавиатура-ориентированный vim-like терминал я упомянул не столько потому, что у него реализованы режимы как Vim (insert mode, selection mode, выделение клавиатурой включая блочное), а потому, что у него есть приятная фича (которую можно наблюдать в iTerm2 для OS X) при работе Vim'а в нём, а именно цвет курсора изменяется в зависимости от цвета символа, на котором находится курсор, а также при выделении цвет выделения повторяет цвет слов/строк (но без инвертирования где нужно, может еще допилят), скриншот.

Менеджер плагинов:

Перед обсуждением плагинов и настроек, хочу подчеркнуть почему я использую менеджер плагинов vim-plug: перепробовав все известные менеджеры плагинов, включая недоменеджер pathogen, остановился именно на vim-plug потому, что он самый быстрый (параллельная установка/обновление, к-во потоков настраивается), имеет приятный интерфейс, краткий синтаксис, а самое главное позволяет настроить загрузку или отключение плагинов по filetype и/или первому вызову самого плагина, это не только ускоряет старт/работу Vim, но и помогает разрулить конфликты некоторых плагинов, простой пример:

Plug 'tpope/vim-endwise',   { 'for': [ 'ruby','vim','sh','zsh' ] }
Плагин endwise будет загружен только для ft=ruby,vim,sh,zsh, т.к. если этот полезный плагин работает одновременно с не менее полезным плагином delimitMate, то возникает конфликт в файлах с ft=css,js и везде, где после открытия скобки нужен автоматический переход на следующую строку и автозакрытие скобки.

Кроме всего прочего, отдельно от веб-разработки-related для самого вима у меня такое:

Автоматическое переключение на английский в Normal mode и обратно на предыдущий в Insert mode:

Конечно же нужно решать проблему с локалями (т.к. веб-разработка, в отличие от программирования иногда ведется на отличных от английского языках), а именно с неудобством при их переключении в Normal mode и обратно, самое лучшее решение, это установка в систему xkb-switch + плагин в Vim для него.

Plug 'lyokha/vim-xkbswitch'
let g:XkbSwitchEnabled       = 1
let g:XkbSwitchLib           = '/usr/lib64/libxkbswitch.so'
let g:XkbSwitchIMappings     = ['ru']
let g:XkbSwitchSkipIMappings = {'*' : ['[', ']', '{', '}', "'"]}
Теперь не нужно переключать на английский входя в Normal mode и на русский обратно в Insert mode, переключение происходит автоматически. Очень удобно.

Линейка номеров строк:

set nu
set nuw=4
autocmd InsertEnter * set nornu
autocmd InsertLeave * set rnu
в Insert mode - с номерами строк всё как обычно, в Normal mode (точнее после первого входа в insert и выхода обратно в normal) включается типа линейки: скриншот.

Автоматическая паста с отступами:

Чтобы навсегда забыть эту проблему и не включать перед пастой каждый раз режим пасты или использовать хитрые хоткеи, можно просто добавить настройку:

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

Замена заменяемого без удаления (проблема забивания иксового буфера обмена):

Чтобы заменить слово или кусок окруженный делиметрами без удаления в иксовый буфер, можно использовать такую настройку на хоткей S :

nnoremap <silent> S :set opfunc=PasteReplace<CR>g@
function! PasteReplace(type, ...)
    if a:0
        silent exe "normal! `<" . a:type . "`>p"
    elseif a:type == 'line'
        silent exe "normal! '[V']p"
    elseif a:type == 'block'
        silent exe "normal! `[\<C-V>`]p"
    else
        silent exe "normal! `[v`]p"
    endif
endfunction
nmap SS S$
Теперь если нужно заменить слово без его удаления, можно просто: Sw , Si" , Si( , и т.п.

Проекты/сессии:

Плагин vim-startify - стартовый экран, можно настроить на сессии и букмарки, чтобы каждый раз не открывать то же самое в сплиты/табы/буферы.

Документация:

Для открытия документации в браузере (как минимум для того, что нас интересует: HTML, JavaScript, CSS, SCSS, LESS, Ruby, Rails, Django, PHP и т.п.) исходя из из ft= и положения курсора, удобно замапить на F1:

Plug 'Keithbsmiley/investigate.vim'
nnoremap <F1> :call investigate#Investigate()<CR>

Автокомплит и сниппеты:

В отличие от YouCompleteMe, автокомплитер neocomplete не тормозит (при работе и старте), не нужен питон (но нужен lua), а всё остальное такое же (для веб-разработки). Интегрируется с родным движком сниппетов neosnippet, который работает как с родными, так и универсальными vim-snippets (объединенные Snipmate & UltiSnip).

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

imap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ? "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
if has('conceal')
  set conceallevel=2 concealcursor=i
endif

ZenCoding/Emmet:

Полнофункциональный Emmet для Vim: emmet-vim

Работает как нужно, но по дефолту неудобный (как по мне) хоткей <c-y>, , я настроил себе на jk . Т.е. Esc у меня kj , а дополнить jk . Первое время пользовался F4, привожу настройки, но jk намного удобнее. Просто на Tab настроить нельзя (иначе как пользоваться Tab?).

Plug 'mattn/emmet-vim',           { 'for': ['html','xhtml','css','sass','scss','less'] }
au FileType html,css,sass,scss,less imap <expr><F4> emmet#expandAbbrIntelligent("\<tab>")
au FileType html,css,sass,scss,less imap <expr>jk   emmet#expandAbbrIntelligent("\<tab>")
au FileType html                    imap <C-\>      <CR><CR><Esc>ki<Tab>
Плагин MatchTag - для отображения парных тегов.

Кроме Emmet'а для Vim существует аналог: Sparkup (нужен питон, не пробовал).

Отображение отступов:

Можно настроить каким символом и цветом отображать линии отступов, я настроил на хоткей <A-i> , альт как непечатаемый символ, так что проще посмотреть настройку склонировав репу на гитхабе и заглянув в .vimrc (или нажать C-v A-хоткей), скриншот.

Plug 'Yggdroot/indentLine'
let g:indentLine_enabled    = 0
let g:indentLine_char       = '¦'
let g:indentLine_color_term = 239
let g:indentLine_color_gui  = '#A4E57E'
nmap ^[i :IndentLinesToggle<CR>

Подсветка синтаксиса:

Plug 'tpope/vim-haml',            { 'for': 'haml'   }
Plug 'wavded/vim-stylus',         { 'for': 'stylus' }
Plug 'groenewege/vim-less',       { 'for': 'less'   }
Plug 'digitaltoad/vim-jade',      { 'for': 'jade'   }
Plug 'slim-template/vim-slim',    { 'for': 'slim'   }
Plug 'othree/html5-syntax.vim',   { 'for': 'html'   }
Plug 'cakebaker/scss-syntax.vim', { 'for': 'scss'   }

Plug 'hail2u/vim-css3-syntax',    { 'for': ['html','css'] }
augroup VimCSS3Syntax
  autocmd!
  autocmd FileType css setlocal iskeyword+=-
augroup END

Проверка синтаксиса:

Для проверки синтаксиса используется Syntastic + сторонние чеккеры:

Plug 'scrooloose/syntastic', { 'for': ['ruby','html','css', 'javascript', 'haml'] }
let g:syntastic_auto_jump           = 1
let g:syntastic_error_symbol        = '✖'
let g:syntastic_warning_symbol      = '►'
let g:syntastic_javascript_checkers = ['jshint'   ] " sudo npm install -g jshint
let g:syntastic_html_checkers       = ['jshint'   ] " sudo npm install -g jshint
let g:syntastic_ruby_checkers       = ['rubylint' ] " gem install ruby-lint
let g:syntastic_haml_checkers       = ['haml-lint'] " gem install haml-lint
let g:syntastic_css_checkers        = ['csslint'  ] " sudo npm install -g csslint
let g:syntastic_css_csslint_args    = "--ignore=zero-units"

Деобфускация / beautify'еры:

Плагин vim-autoformat работает со сторонними 'formatprograms', например js-beautify для HTML, CSS и JavaScript. autopep8 для питона и т.д. Всё это должно быть установленно.

Plug 'Chiel92/vim-autoformat'
let g:formatprg_args_javascript = "-j -q -B -f -"
noremap  <F8>   :Autoformat<CR><CR>
vnoremap <C-F8> gq

JavaScript:

Дефолтная поддержка JavaScript в Vim на довольно низком уровне, так что необходимы плагины как для самого JS, так и для библиотек, плагин javascript-libraries-syntax поддерживает почти все основные либы: jQuery, underscore.js, Backbone.js, AngularJS, RequireJS, Sugar.js, Jasmine и т.д.

Plug 'moll/vim-node'
Plug 'pangloss/vim-javascript',      { 'for': 'javascript' }
Plug 'jelera/vim-javascript-syntax', { 'for': 'javascript' }
let javascript_enable_domhtmlcss = 1
let g:html_indent_inctags        = "html,body,head,tbody"
let g:html_indent_script1        = "inc"
let g:html_indent_style1         = "inc"

Plug 'othree/javascript-libraries-syntax.vim', { 'for': 'javascript' }
let b:current_syntax       = 'javascript'
let g:used_javascript_libs = 'angularjs'

Также полезен tern_for_vim (сам Tern должен быть установлен), который умеет в 'Jump to the definition', 'Find the type' и т.д.

Пробельные символы:

По A-w показывает, по \-dw удаляет. Перевести все табы в пробелы (вдруг кто не знает), в Vim: :retab .

Plug 'ntpeters/vim-better-whitespace'
let g:better_whitespace_enabled = 0
nmap ^[w :ToggleWhitespace<CR>
nmap <Leader>dw :StripWhitespace<CR>

И кое-какие настройки по-мелочи:

set splitbelow
set splitright
inoremap  kj           <Esc>
map       gm           :call cursor(0, virtcol('$')/2)<CR>
nnoremap  <F12>f       :exe ':silent !firefox %'<CR><C-l>
nnoremap  <F12>c       :exe ':silent !chromium-browser %'<CR><C-l>
1-2 строки: для нормального открытия (слева направо) сплитов.
3: Esc на kj - мегаудобно.
4: для попадания на средину строки.
И последние две для предпросмотра в браузерах.

Мой ~/.vimrc

Кто что использует и как, кроме вышеуказанного?

 

VimCasts
()

посоветуйте замену Розетке

Форум — Talks

В Розетке последним временем обслуживание через сайт и почту стало совсем никаким поэтому ожидаются рекомендации

 internet-shop, rozetka

cvv
()

Дайте хороших аниме

Форум — Talks

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

Критерии таковы:

1. Мистика/магия/ужасы и подобное. Без ОБЧР, мехи, космоса, стимпанка и подобного. Ну или чтоб всё вместе.
2. Желательно с озвучкой, но если есть только с сабами — то не хардсаб.
3. Не детское, и не каких-то девочек волшебниц из 3-го класса начальной школы.
4. «Блич», «Хеллсинг», «Код Гиасс», «Еву», «Дес нот» советовать не надо.
5. Хотелось бы поменьше филлеров в сериале, и флешбеков в сериях, но это опционально.

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

 ,

sluggard
()

VIM как IDE для ______

Форум — Development

Какие плагины вы используете, чтобы превратить vim в IDE для ________ (вписать язык)?

Интересует:

  1. Автодополнение. В частности, умное семантическое.
  2. Форматирование. В частности, автоматическое при сохранении буфера.
  3. Проверка компилируемости кода для компилируемых ЯП, проверка корректности для интерпретируемых ЯП.
  4. Статический анализ кода (lint). Предупреждения о неиспользуемых переменных. Предупреждения о неканоничном форматировании кода. И т. д.
  5. Просмотр документации к функции, методу и т. д. под курсором.
  6. Переход к определению функции (метода, класса и т. д.) под курсором.
  7. Рефакторинг (переименование функций, методов, классов и т. д.).
  8. Сниппеты.
  9. Компиляция/запуск. Точки останова. Запуск тестов.
  10. Заливка кусков кода на сайты для обмена, вроде gist.github.com или play.golang.org.

И общее для всех языков:

  • Вывод списка / переход к меткам TODO, XXX, FIXME и т. д.
  • Go anywhere (CtrlP, Command-T или FuzzyFinder?)

Ссылки:

VIM как python IDE.

 

meskalin
()

VIM как python IDE

Форум — Development

Знаю тема могла уже много раз поднималась, в том числе и в интернетах. Но из-за большого количества плагинов и как следствие одни плагины приходят на смену другим, засоветуйте оптимальный набор для создания python-IDE:

Нужно:

Удобные сниппеты аля в Geany. Т.е. повесил

Удобная работа с git. Хотя пожалуй еще не придумали лучшую работу с git, чем из терминала.

Автодополнение, документация, рефакторинг и т.д. - это решается rope и вообще python-mode в целом.

Навигация по проекту: дерево файлов, поиск всего и вся по всему проекту. Создание проекта из директории (на сколько я понял нужно rope указать директорию)

Перечень меток навроде «TODO»

Множественное выделение аля емакс - нашел такой плагин: https://github.com/terryma/vim-multiple-cursors

Какими плагинами реализовать вышеперечисленное и что еще удобного посоветуете?

UPD:

А еще что есть для Jinga2/Django темплейтов, и HTML в целом. Например выделить блок текста, тыкнуть комбинацию и блок текста засовывается в <div>...</div>

 , ,

Siado
()

арт-хаус

Форум — Talks

Видел комментарии к некоторым арт-хаус фильмам. Комментарии шаблонные, односложные, чаще всего отношения к содержанию кино не имеющие.

Смотрел из арт-хауса «Сталкер» Тарковского. Или плохо смотрел, или мозгов ещё для такого кино маловато, но я там заметил одну основную идею, причём известную любому человеку. Про жадность и алчность. И всё действие сводилось к тому, чтобы в конце эту идею раскрыть.

К чему я всё это - какую пользу может принести просмотр арт-хауса? И с чего начинать смотреть? Ну и глобально - в чём соль этого жанра фильмов, я что-то не совсем догоняю?

 ,

kinik
()

Здраствуйте, это канал о Линуксе? Подскажите аниме, пожалуйста...

Форум — Talks

Собственно, ${subj}. Стало интересно, что это такое, что даже зад^W «бородатые линуксоеды» это смотрят? В целом, сюжет парочки рандомных на Википедии я читал, но как-то все слишком фантастично. Подскажите что-нибудь с минимумом фантастики, пожалуйста. С чего бы начать, так сказать. Ах да, и в чем же «изюминка» аниме, по вашему мнению?
Хентай не предлагать!

 

qzxcvbnm
()

Что бы почитать?

Форум — Talks

Посоветуйте что-нибудь хорошее почитать

Желательно, не техническую/научную литературу. Чтобы можно было читать не останавливаясь, не перечитывая, и особо не задумываясь над каждой строчкой.

Например, какой-нибудь научпоп.

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

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

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

Линукс тут при том, что литературу по линуксу можно будет скорочитать только после отработки навыков чистого скорочтения. Сразу несколько навыков одновременно не отработаешь, это все равно что одновременно пытаться изучить Сlojure и одновременно же учиться пользоваться Емаксом.

stevejobs
()

English

Форум — Talks

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

Его, бедного, также забанили в Гугле, поэтому ему остается только надеяться на вашу помощь. В связи с чем он просит подкинуть пару советов или ссылок на ресурсы, где могут с этим помочь.

 

Kotolegokot
()