Автор Тема: School of Haskell Goes Public  (Прочитано 4642 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
School of Haskell Goes Public
« : Март 05, 2013, 11:17:33 am »
Прикольный сайт по хацкелю:
School of Haskell Goes Public

Там в этой статейке внедрена микро-IDE для хаскеля -- редактор кода с кнопкой его выполнения.
Если там задуматься над использованием той или иной хаскельной функции, то вываливается подсказка по ней.
Забавно, короче...
Решил побаловаться -- создал файл "Hahaha.txt" и начал туда в цикле записывать строку "Hahaha".
main = do
    putStrLn "Hahaha"
    writeFile "Hahaha.txt" $ cycle "Hahaha"
При выполнении выдало сообщение об исключении: "IOException: Hahaha.txt: hClose: resource exhausted (No space left on device)"
Интересно, это куда-то в ОЗУ файл пытался записаться? Виртуальная машина там по программу пользователя создавалась или как?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #1 : Март 05, 2013, 12:24:56 pm »
Прикольный сайт по хацкелю:
School of Haskell Goes Public

Там в этой статейке внедрена микро-IDE для хаскеля -- редактор кода с кнопкой его выполнения.
Если там задуматься над использованием той или иной хаскельной функции, то вываливается подсказка по ней.
Забавно, короче...
Решил побаловаться -- создал файл "Hahaha.txt" и начал туда в цикле записывать строку "Hahaha".
main = do
    putStrLn "Hahaha"
    writeFile "Hahaha.txt" $ cycle "Hahaha"
При выполнении выдало сообщение об исключении: "IOException: Hahaha.txt: hClose: resource exhausted (No space left on device)"
Интересно, это куда-то в ОЗУ файл пытался записаться? Виртуальная машина там по программу пользователя создавалась или как?
Дык узнал бы - вывел бы информацию о устройстве, там дерево каталогов, сколько свободного места и так далее. Ну и версию ОС там и другие системные параметры.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #2 : Март 05, 2013, 12:57:21 pm »
Дык узнал бы - вывел бы информацию о устройстве, там дерево каталогов, сколько свободного места и так далее. Ну и версию ОС там и другие системные параметры.
Там всё это дело в какой-то бубунте работает, я хз как там на хацкеле в линупсе системные параметры считывать ))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #3 : Март 05, 2013, 01:17:21 pm »
Дык узнал бы - вывел бы информацию о устройстве, там дерево каталогов, сколько свободного места и так далее. Ну и версию ОС там и другие системные параметры.
Там всё это дело в какой-то бубунте работает, я хз как там на хацкеле в линупсе системные параметры считывать ))
Дык,тебе всего лишь надо уметь работать с файловой системой. Хаскель это ведь умеет?
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #4 : Март 05, 2013, 01:20:11 pm »
Дык узнал бы - вывел бы информацию о устройстве, там дерево каталогов, сколько свободного места и так далее. Ну и версию ОС там и другие системные параметры.
Там всё это дело в какой-то бубунте работает, я хз как там на хацкеле в линупсе системные параметры считывать ))
Дык,тебе всего лишь надо уметь работать с файловой системой. Хаскель это ведь умеет?
Ну и вообще, есть же модули System.* : http://www.haskell.org/ghc/docs/7.4-latest/html/libraries/haskell98-2.0.0.1/System.html В том числе System.Posix
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #5 : Март 06, 2013, 04:35:21 am »
Знатоки командной строки линупса могут побаловаться с таким скриптиком:
module Main where
import System.Process
main :: IO ()
main = do
    putStrLn "hs-shell"
    let cmd_loop = do
            putStr "> "
            cmd <- getLine
            exit_code <- system cmd
            print exit_code
            cmd_loop
    cmd_loop
Пытался ввести команды ver, version -- не знает он такого. restart или shutdown не позволяет сделать -- прав рутовских нету )))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #6 : Март 06, 2013, 08:09:29 am »
Знатоки командной строки линупса могут побаловаться с таким скриптиком:
module Main where
import System.Process
main :: IO ()
main = do
    putStrLn "hs-shell"
    let cmd_loop = do
            putStr "> "
            cmd <- getLine
            exit_code <- system cmd
            print exit_code
            cmd_loop
    cmd_loop
Пытался ввести команды ver, version -- не знает он такого. restart или shutdown не позволяет сделать -- прав рутовских нету )))
Процессы:
ps -A
  PID TTY          TIME CMD
    1 ?        00:00:00 init
  175 ?        00:00:00 isolation-runne
  213 ?        00:00:01 ide-backend-ser
  236 ?        00:00:00 sh
  237 ?        00:00:00 ps
Сеть:
ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3e:88:63:4d 
          inet addr:10.3.228.207  Bcast:10.3.255.255  Mask:255.255.0.0
          inet6 addr: fe80::216:3eff:fe88:634d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:420 errors:0 dropped:0 overruns:0 frame:0
          TX packets:272 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:40303 (40.3 KB)  TX bytes:27520 (27.5 KB)

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Разделы:
df
Filesystem                         1K-blocks    Used Available Use% Mounted on
/dev/root                             516040   17368    472460   4% /
/dev/disk/by-label/cloudimg-rootfs  15481840 5809792   8885708  40% /opt/ghc-7.4.2
/dev/disk/by-label/cloudimg-rootfs  15481840 5809792   8885708  40% /opt/ghc-7.4.2-env
/dev/disk/by-label/cloudimg-rootfs  15481840 5809792   8885708  40% /opt/fp/isolation-runner
none                                  762952      20    762932   1% /run
none                                    5120       0      5120   0% /run/lock
none                                 3814740       0   3814740   0% /run/shm

mount
/dev/root on / type overlayfs (rw)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
/dev/disk/by-label/cloudimg-rootfs on /opt/ghc-7.4.2 type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)
/dev/disk/by-label/cloudimg-rootfs on /opt/ghc-7.4.2-env type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)
/dev/disk/by-label/cloudimg-rootfs on /opt/fp/isolation-runner type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)
devpts on /dev/lxc/console type devpts (rw,noexec,nosuid,relatime,gid=5,mode=620,ptmxmode=000)
devpts on /dev/ptmx type devpts (rw,relatime,mode=600,ptmxmode=666)
none on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)

Версия системы:
uname -a
Linux container-2f7ba049-ab61-4b8a-b561-a5bba4a0f93d 3.2.0-38-virtual #61-Ubuntu SMP Tue Feb 19 12:37:47 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Время работы системы:
uptime
 23:52:30 up 19:11,  0 users,  load average: 0.04, 0.03, 0.11

Текущая директория:
> pwd
/home/fpuser/isolation-runner-work/idesession/data.175

Походить по каталогам не выходит, ибо cd, ls и прочее это не отдельные приложения, и соответственно, оно просто ExitSuccess выдает. Таким образом погулять по FS следует средствами самого haskell'я, построить дерево, узнать куда нам пускают а куда нет.

PS. Таки нас запускают под спец-пользователем:
ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
fpuser     175     1  0 Mar05 ?        00:00:01 /opt/fp/isolation-runner/isolation-runner
fpuser     213   175  0 Mar05 ?        00:00:02 /opt/fp/isolation-runner/ide-backend-server --ghc-opts-end 8 9 10 11 12 13
fpuser     281   213  0 00:03 ?        00:00:00 /bin/sh -c ps -f
fpuser     282   281  0 00:03 ?        00:00:00 ps -f
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: School of Haskell Goes Public
« Ответ #7 : Март 06, 2013, 09:56:59 am »
Походить по каталогам не выходит, ибо cd, ls и прочее это не отдельные приложения, и соответственно, оно просто ExitSuccess выдает. Таким образом погулять по FS следует средствами самого haskell'я, построить дерево, узнать куда нам пускают а куда нет.
Наврал. Все там можно. Просто текущая директория пуста.
Родительская директория содержит два подкаталога:
data.XXX
src.XXX
Где XXX - трехзначное число, видимо номер пользователя. В моем случае, XXX=175.
В src имеем ровно один файл - Main.hs, где, видимо, и содержится исходник исполняемой программы.

Далее, вскрытие показало, что сам сайт (то есть прям таки веб-моррда) у них там крутится на хаскельном же веб-сервере Warp/1.3.7.4 : http://hackage.haskell.org/package/warp-1.3.7.4

$ curl -I https://www.fpcomplete.com
HTTP/1.1 405 Method Not Allowed                                                                                                                       
Content-Type: text/html; charset=utf-8                                                                                                               
Server: Warp/1.3.7.4                                                                                                                                 
Set-Cookie: _SESSION=k7TvOPgWAjZ7JQfAYG2tJmcKyVa2bUHA/9E4hSkprNeviQlQsXphdIa2DLcIcSbXzppkXevt99VH2icSqrPp1gL0sIlKvTRSYmIB+goJVsvEmK1lUOzIERopijoZV+zgwyp4sqQh+pA=; Path=/; Expires=Wed, 13-Mar-2013 09:49:20 GMT; HttpOnly
Vary: Accept, Accept-Language
Connection: keep-alive
Y = λf.(λx.f (x x)) (λx.f (x x))