LINUX.ORG.RU

Избранные сообщения S-Mage

Светлый вариант декораций окон breeze?

Форум — Desktop

В 5-ой плазме у активного окна тёмно-серый заголовок, а у неактивного - белый. Есть ли вариант бриза (или другой сочетающейся с ним темы) со ВСЕГДА белым заголовком?

 ,

Deleted
()

Haskell, монады, память, и все-все-все

Форум — Development

Есть задача - пройтись по текстовому файлу и найти максимальное число одинаковых последовательно идущих строчек. Задача весьма синтетическая, просто надо продемонстрировать, что

  • Потоково обрабатывается некий объем данных;
  • Есть состояние - надо помнить предыдущую строку в файле при обращении к следующей.

Решение в лоб на IORef-ах (m1.hs):

module Main where

import Data.IORef
import Control.Monad (forM)

main :: IO ()
main = do
   input    <- getContents
   lastLine <- newIORef (Nothing)
   counter  <- newIORef (0)
   result   <- newIORef (0)

   let incr    = modifyIORef counter (\x -> x `seq` x+1)
       reset s = do c <- readIORef counter
                    r <- readIORef result
                    writeIORef result (max c r)
                    writeIORef lastLine (Just s)
                    writeIORef counter  1

   forM (lines input) $ \line -> do
     ml <- readIORef lastLine
     case ml of
       (Just s) -> if s == line then incr else reset line
       Nothing  -> reset line

   r <- readIORef result
   putStrLn $ "Largest subsequence of equal lines: " ++ show r

Более модное решение с трансформером StateT (m2.hs):

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module Main where

import Control.Monad (forM)
import Control.Monad.State.Strict

data AppContext = AppContext { ctxLastLine :: Maybe String
                             , ctxCounter  :: Integer
                             , ctxResult   :: Integer
                             }

initialContext :: AppContext
initialContext = AppContext { ctxLastLine = Nothing
                            , ctxCounter  = 0
                            , ctxResult   = 0
                            }

newtype App a = App (StateT AppContext IO a)
                deriving (Monad, MonadIO, MonadState AppContext)

runApp (App app) = execStateT app

incr :: App ()
incr = do
   cnt <- gets ctxCounter
   modify $ \s -> s { ctxCounter = cnt+1 }

reset :: String -> App ()
reset l = do
   cnt <- gets ctxCounter
   res <- gets ctxResult
   modify $ \s -> s { ctxLastLine = Just l
                    , ctxCounter  = 1
                    , ctxResult   = max res cnt
                    }

processLine :: String -> App ()
processLine line = do
   ll <- gets ctxLastLine
   case ll of
      (Just s) -> if line == s then incr else reset line
      Nothing  -> reset line

main :: IO ()
main = do
   input <- getContents
   s <- runApp (forM (lines input) processLine) initialContext
   putStrLn $ "Largest subsequence of equal lines: " ++ show (ctxResult s)

Интересно, как поведут себя оба варианта на обработке, скажем, «Улисс» Джойса (txt, 1.6 MB):

[dmatveev@localhost memq]$ ghc --make m1.hs -rtsopts -prof
[1 of 1] Compiling Main             ( m1.hs, m1.o )
Linking m1 ...
[dmatveev@localhost memq]$ ghc --make m2.hs -rtsopts -prof
[1 of 1] Compiling Main             ( m2.hs, m2.o )
Linking m2 ...
[dmatveev@localhost memq]$ du -sh ulysses.txt
1.6M    ulysses.txt
[dmatveev@localhost memq]$ wc -l ulysses.txt
33055 ulysses.txt
[dmatveev@localhost memq]$ time cat ulysses.txt | ./m1 +RTS -hd -i0.001
Largest subsequence of equal lines: 5

real    0m1.599s
user    0m1.577s
sys     0m0.021s
[dmatveev@localhost memq]$ time cat ulysses.txt | ./m2 +RTS -hd -i0.001
Largest subsequence of equal lines: 5

real    0m19.360s
user    0m19.123s
sys     0m0.091s

ШОК! Посмотрим, что там с памятью:

[dmatveev@localhost memq]$ hp2ps -e8in -c m1.hp
[dmatveev@localhost memq]$ hp2ps -e8in -c m2.hp

m1.png, m2.png

Очевидно, что во втором примере что-то течёт, а я что-то глобально упустил.

Вопросы:

  1. ЧЯДНТ?
  2. Как быть?
  3. Как правильно готовить монадические ивентлупы с изменяемым состоянием?

З.Ы. Да, я знаю, что на awk это решается проще и быстрее, суть-то не в этом, а в вопросе №3. Извините за неровный почерк.

 ,

yoghurt
()

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
()

В KDE 4.11 улучшена работа с памятью

Форум — Talks

Из-за закрытого магазина одному из разработчиков не удалось купить ещё одну планку оперативы, поэтому он решил сесть и исправить несколько багов:

The other day I went to buy a DDR stick but the shop was closed so the only solution was to sit down and fix some memory hungry applications.

В результате:

  • Исправлен баг, когда ресурс maildir мог использовать 1 или 2GB при импортировании больших каталогов.
  • Исправен баг, когда ресурс mixedmaildir также мог использовать 1 или 2GB.
  • akonadiserver не очищал ненужные кэши запросов. Сохранено 65MB.
  • Kontact имел 5 копий всех данных календарей, что в случае Сержио Мартинса сохранило ему 200Мб при использовании его большого тестового файла .ical.
  • KOrganizer увеличивал потребление памяти до бесконечности за одну ночь при стечении некоторых обстоятельств.
  • KAlarm не освобождал память, выделенную под диалоги редактирования, в результате в течении времени использование памяти увеличивалось до бесконечности
  • Mysql got up to 25 MB of savings (4.12)

Также Dan Vratil и Vishesh Handa тяжело работают над потреблением памяти и производительностью nepomuk и akonadi.

https://blogs.kde.org/2013/07/18/memory-usage-improvements-411

 ,

Chaser_Andrey
()

Самообучающийся музыкальный плэйлист. Где доступна такая функция?

Форум — Multimedia

Мне кажется, что в идеале данная программа должна действовать на основе нейронной сети.

Я представляю это себе примерно так:

Есть плэйлист с музыкой, и есть меломан, который ежедневно слушает музыку.

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

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

Также может быть, что после прослушивания трека меломану предлагается поставить оценку от 1 до 5 прослушанному треку. Что разумеется, тоже повлияет на его позицию в плэйлисте.

Есть ли программы с подобной фичей вообще и под Linux в частности?

 , ,

Deleted
()

learn lua in 15 min

Форум — Development

http://tylerneylon.com/a/learn-lua/

Список из кусков кода с комментариями. Предполагается, что читатель умеет программировать хоть на чём-нибудь :)

Автор - Tyler Neylon

З.Ы. lua используется, например, в скриптах для nmap и wireshark

 

router
()

C++ LORgoogle

Форум — Talks

Посоветуйте годных ресурсов по С++. Желательно на русском (но не обязательно). Спасибо.

 

FatPinguin
()

Emerge unity

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

Здравствуйте. В поисках DE без злополучного тиринга перепробовал много чего и остановился на unity.
Шрифты не менял, да и вся наружность практически дефолт.
Как ставил:

Были проблемки http://forums.gentoo.org/viewtopic-p-7264466.html#7264466, но их уже решили.

Что обрадовало — тиринга не следа, окошечки двигаю плавненько, ничего не рвет, не дергает. Вообщем, по такому случаю можно даже забыть про Ъ и наутилус пользовать вместо dolphin. Конечно, мне, как пользователю кде, многое непривычно и не хватает настроек, но! все работает! Еще работает enlightenment, но unity нравится больше (наверно потому что централизованнее).
+ почему-то в добавок заработали все FN клавиши на моем g75)))

Так что всем, у кого проблемы с тирингом — советую.

>>> Просмотр (1600x900, 561 Kb)

 ,

brothermechanic
()

Увеличение ext4

Форум — General

Камрады, на ноуте стоит винда и убунту, при установке выделил ей всего 20 Гб, собственно вопрос, есть ли какие-то не сильно извращенные методы увеличения раздела без переустановки?

 , , ,

nday
()