Permalink
Browse files

created

  • Loading branch information...
0 parents commit db93172cc1fe74968bb67d1b36974d2d834f417d @d1ffuz0r committed Jan 5, 2012
Showing with 120 additions and 0 deletions.
  1. +2 −0 .gitignore
  2. +2 −0 __init__.py
  3. +76 −0 api.py
  4. +1 −0 tests/__init__.py
  5. +1 −0 tests/pr/res/87848.json
  6. +1 −0 tests/pr/wakaba.json
  7. +37 −0 tests/tests.py
2 .gitignore
@@ -0,0 +1,2 @@
+.idea
+*.pyc
2 __init__.py
@@ -0,0 +1,2 @@
+__author__ = 'd1ffuz0r'
+from api import Api
76 api.py
@@ -0,0 +1,76 @@
+import json
+import urllib2
+
+
+class Post(object):
+ def __init__(self, post):
+ self.lasthit = post[u"lasthit"]
+ self.comment = post[u"comment"]
+ self.name = post[u"name"]
+ self.parent = post[u"parent"]
+ self.timestamp = post[u"timestamp"]
+ self.banned = post[u"banned"]
+ self.sticky = post[u"sticky"]
+ self.height = post[u"height"]
+ self.width = post[u"width"]
+ self.num = post[u"num"]
+ self.video = post[u"video"]
+ self.tn_height = post[u"tn_height"]
+ self.closed = post[u"closed"]
+ self.tn_width = post[u"tn_width"]
+ self.date = post[u"date"]
+ self.subject = post[u"subject"]
+ self.image = post[u"image"]
+ self.thumbnail = post[u"thumbnail"]
+ self.op = post[u"op"]
+ self.size = post[u"size"]
+
+ def __repr__(self):
+ return "<Post: {num}>".format(num=self.num)
+
+
+class Thread(object):
+ def __init__(self, thread):
+ self.reply_count = int(thread[u"reply_count"])
+ self.posts = [Post(post[0]) for post in thread[u"posts"]]
+
+ def __repr__(self):
+ return "<Thread: {num}>".format(num=self.posts[0].num)
+
+
+class Api(object):
+ def __init__(self):
+ self.board = None
+ self._url = "http://2ch.so/"
+
+ def get_threads(self, board=None):
+ """
+ Get all threads from :board:
+ @param board: code of board
+ @return dict: list threads on board
+ """
+ if self.board is None:
+ self.board = board
+ threads = self._get(url="wakaba.json")[u'threads']
+ return [Thread(thread) for thread in threads]
+
+ def _get(self, url):
+ """
+ Get page
+ @param url:
+ """
+ if not self.board:
+ raise ValueError("Board is not selected")
+ else:
+ return json.load(
+ urllib2.urlopen(self._url + self.board + "/" + url)
+ )
+
+ def get_thread(self, thread):
+ """
+ Get thread
+ @param thread: id of thread
+ @return: dict
+ """
+ posts = self._get("res/" + str(thread) + ".json")[u"thread"]
+ return [Post(post[0]) for post in posts]
1 tests/__init__.py
@@ -0,0 +1 @@
+__author__ = 'd1ffuz0r'
1 tests/pr/res/87848.json
1 addition, 0 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
1 tests/pr/wakaba.json
@@ -0,0 +1 @@
+{"threads":[{"image_count":65,"omitimages":64,"posts":[[{"width":"339","lasthit":"1325786095","num":"87848","banned":"0","date":"Птн 09 Дек 2011 15:25:11","size":"19","timestamp":"1323433511","sticky":"1","tn_width":"240","closed":"0","thumbnail":"thumb/1323433511185s.jpg","parent":"0","video":"","subject":"","name":"Аноним","height":"353","image":"src/1323433511185.jpg","tn_height":"250","comment":"<p>2ch.so API (работает!)<br /><br />Суть:<br /><a href=\"http://2ch.so/pr/wakaba.json\" rel=\"nofollow\">http://2ch.so/pr/wakaba.json</a> - главная страница в формате json<br /><a href=\"http://2ch.so/pr/res/12345.json\" rel=\"nofollow\">http://2ch.so/pr/res/12345.json</a> - тред в формате json<br /><br />Получение изображения-капчи (Captcha) для отправки поста<br /><br />Формат запроса: /раздел/wakaba.pl?task=api&amp;code=getcaptcha<br /><br />== Ответ сервера:<br /><br /><br />{<br />\t&quot;key&quot; : &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;&#44;<br />\t&quot;url&quot; : &quot;<a href=\"http://www.google.com/recaptcha/api/image?c=значение-из-поля-key\" rel=\"nofollow\">http://www.google.com/recaptcha/api/image?c=значение-из-поля-key</a>&quot;<br />}<br /><br /><br />-- key: сессионный ключ для капчи&#44; частично привязан к IP-адресу клиента&#44; меняется с каждым новым запросом капчи&#44; его необходимо отправлять вместе с решением капчи&#44; в параметрах POST-запроса&#44; имена которых заданы в &quot;captcha&quot;&#44; &quot;captcha_key&quot; полях объекта &quot;postfields&quot; из метода &quot;getsettings&quot;.<br />-- url: прямая ссылка на графическое изображение капчи<br /><br />Видео:<br /><a href=\"http://2ch.so/test/sendpost.ogv\" rel=\"nofollow\">http://2ch.so/test/sendpost.ogv</a><br /><br />---------</p>","op":"0"}],[{"width":"785","lasthit":"1325786095","num":"95635","banned":"0","date":"Чтв 05 Янв 2012 14:55:22","size":"169","timestamp":"1325764522","sticky":"1","tn_width":"130","closed":"0","thumbnail":"thumb/1325764522045s.jpg","parent":"87848","video":"","subject":"","name":"Аноним","height":"1200","image":"src/1325764522045.jpg","tn_height":"200","comment":"<p>Так а под андроид один человек только пишет? Может блядь организуемся? гитхаб&#44; меркуриал. отдельно человек который пилит функционал&#44; отдельно кто допиливает интерфейс и т.д. Это же пиздец&#44; как неуклюже сейчас. Или всем похер? </p>","op":"0"}],[{"width":null,"lasthit":"1325786095","num":"95647","banned":"0","date":"Чтв 05 Янв 2012 15:33:14","size":null,"timestamp":"1325766794","sticky":"1","tn_width":null,"closed":"0","thumbnail":null,"parent":"87848","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>двощ&#44; ни один c# парсер не сьедает твою апи. все ругаются&#44; чтто нихуя не присвоено и вообще все хуйня.</p>","op":"0"}],[{"width":null,"lasthit":"1325786095","num":"95667","banned":"0","date":"Чтв 05 Янв 2012 16:24:13","size":null,"timestamp":"1325769853","sticky":"1","tn_width":null,"closed":"0","thumbnail":null,"parent":"87848","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#95647\" onclick=\"highlight(95647)\">&gt;&gt;95647</a> ты тупой<br /><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#95635\" onclick=\"highlight(95635)\">&gt;&gt;95635</a> пердоподелия никогда не славились ровностью<br /><br /><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#88397\" onclick=\"highlight(88397)\">&gt;&gt;88397</a> НЯША&#44; ВЫЛОЖИ ПОЖАЛУЙСТА КЛАСС ПОЛНОСЬТЬЮ В КОТОРЫЙ ТЫ ДЕСЕРИАЛИЗУЕШЬ JSON :3</p>","op":"0"}],[{"width":null,"lasthit":"1325786095","num":"95820","banned":"0","date":"Чтв 05 Янв 2012 20:50:00","size":null,"timestamp":"1325785800","sticky":"1","tn_width":null,"closed":"0","thumbnail":null,"parent":"87848","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#95635\" onclick=\"highlight(95635)\">&gt;&gt;95635</a><br />Готов взять ответственность за написание интерфейса для клиента тиреча</p>","op":"0"}],[{"width":null,"lasthit":"1325786095","num":"95825","banned":"0","date":"Чтв 05 Янв 2012 20:54:55","size":null,"timestamp":"1325786095","sticky":"1","tn_width":null,"closed":"0","thumbnail":null,"parent":"87848","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#95595\" onclick=\"highlight(95595)\">&gt;&gt;95595</a><br />Я не потерялся&#44; я застрял с отображением картинок из sd-карты. За выходные постараюсь доделать&#44; после этого оформлю все официально на маркете.<br /><br /><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#95635\" onclick=\"highlight(95635)\">&gt;&gt;95635</a><br /><span class=\"unkfunc\">&gt;как неуклюже сейчас</span><br /><span class=\"unkfunc\">&gt;подразумевает&#44; что с увеличением количества человек все само собой волшебным образом упорядочится</span><br />Такое возможно&#44; только если все работают в разных областях&#44; как дизайн и девелопмент. <br />Но если у тебя есть какие-то конкретные идеи (а не просто так лишь бы пожаловаться)&#44; то могу дать доступ к репозиторию с сорцами.<br /><br /><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/87848.html#95667\" onclick=\"highlight(95667)\">&gt;&gt;95667</a><br />Api читается так: <a href=\"http://pastebin.com/XhHQL8Zd\" rel=\"nofollow\">http://pastebin.com/XhHQL8Zd</a><br />Json парсится с помощью Jackson object mapper.</p>","op":"0"}]],"omit":293,"reply_count":298},{"image_count":4,"omitimages":3,"posts":[[{"width":"251","lasthit":"1325797520","num":"95908","banned":"0","date":"Чтв 05 Янв 2012 22:30:24","size":"13","timestamp":"1325791824","sticky":"0","tn_width":"291","closed":"0","thumbnail":"thumb/1325791824798s.png","parent":"0","video":"","subject":"","name":"Аноним","height":"215","image":"src/1325791824798.png","tn_height":"250","comment":"<p>А как в твоём языке программирования реализуются AVL-деревья?<br /><pre><code><br />nonfix nil;<br /><br />avltree xs\t\t= foldl insert nil xs;<br /><br />avltreep nil\t\t|<br />avltreep (bin _ _ _ _)\t= 1;<br />avltreep _\t\t= 0;<br /><br />null nil\t\t= 1;<br />null (bin _ _ _ _)\t= 0;<br /><br />#nil\t\t\t= 0;<br />#(bin h x t1 t2)\t= #t1+#t2+1;<br /><br />insert nil y\t\t= bin 1 y nil nil;<br />insert (bin h x t1 t2) y<br />\t\t\t= rebal (mknode x (insert t1 y) t2) if x&gt;y;<br />\t\t\t= rebal (mknode x t1 (insert t2 y));<br /><br />delete nil y\t\t= nil;<br />delete (bin h x t1 t2) y<br />\t\t\t= rebal (mknode x (delete t1 y) t2) if x&gt;y;<br />\t\t\t= rebal (mknode x t1 (delete t2 y)) if x&lt;y;<br />\t\t\t= join t1 t2;<br /><br />join nil t2\t\t= t2;<br />join t1@(bin _ _ _ _) t2<br />\t\t\t= rebal (mknode (last t1) (init t1) t2);<br /><br />init (bin h x t1 nil)\t= t1;<br />init (bin h x t1 t2)\t= rebal (mknode x t1 (init t2));<br /><br />last (bin h x t1 nil)\t= x;<br />last (bin h x t1 t2)\t= last t2;<br /><br />mknode x t1 t2\t\t= bin (max (height t1) (height t2) + 1) x t1 t2;<br /><br />height nil\t\t= 0;<br />height (bin h x t1 t2)\t= h;<br /><br />slope nil\t\t= 0;<br />slope (bin h x t1 t2)\t= height t1 - height t2;<br /><br />rebal t\t\t\t= shl t if slope t == -2;<br />\t\t\t= shr t if slope t == 2;<br />\t\t\t= t;<br /><br />rol (bin h x1 t1 (bin h2 x2 t2 t3))<br />\t\t\t= mknode x2 (mknode x1 t1 t2) t3;<br /><br />ror (bin h1 x1 (bin h2 x2 t1 t2) t3)<br />\t\t\t= mknode x2 t1 (mknode x1 t2 t3);<br /><br />shl (bin h x t1 t2)\t= rol (mknode x t1 (ror t2)) if slope t2 == 1;<br />\t\t\t= rol (bin h x t1 t2);<br /><br />shr (bin h x t1 t2)\t= ror (mknode x t1 (ror t2)) if slope t2 == -1;<br />\t\t\t= ror (bin h x t1 t2);<br /></code></pre><br />Дискач.</p>","op":"0"}],[{"width":null,"lasthit":"1325797520","num":"95948","banned":"0","date":"Чтв 05 Янв 2012 23:32:27","size":null,"timestamp":"1325795547","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95908","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95908.html#95945\" onclick=\"highlight(95945)\">&gt;&gt;95945</a><br />динамические типы&#44; мне тож не очень понравились&#44; а в остальном не плохо.<br /><br />кун-который-спрашивает-про-pure<br /><br /></p>","op":"0"}],[{"width":"474","lasthit":"1325797520","num":"95950","banned":"0","date":"Чтв 05 Янв 2012 23:32:41","size":"40","timestamp":"1325795561","sticky":"0","tn_width":"200","closed":"0","thumbnail":"thumb/1325795561853s.jpg","parent":"95908","video":"","subject":"","name":"Аноним","height":"424","image":"src/1325795561853.jpg","tn_height":"178","comment":"<p>Well&#44; well&#44; well... посмотрите только на этих няк&#44; например на опа-пидора (разумеется свой исходник он написал не сам&#44; но это похуй). rol&#44; ror&#44; shl&#44; shr - пишет он&#44; высунув язык&#44; прямо как директивы xуй86-ассемблера. Это в декларативном-то ЯП у человека не хватает времени написать в слове все буквы! 250ноносекуд блеать!<br /><br />Похоже на то&#44; что почетное дилдо адептов сверхвысокого асинхронного хайлоада переходит от веб-куртизанов к фп-хипстерам.<br /></p>","op":"0"}],[{"width":null,"lasthit":"1325797520","num":"95951","banned":"0","date":"Чтв 05 Янв 2012 23:37:05","size":null,"timestamp":"1325795825","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95908","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95908.html#95950\" onclick=\"highlight(95950)\">&gt;&gt;95950</a><br />а ты чьих будешь? </p>","op":"0"}],[{"width":null,"lasthit":"1325797520","num":"95954","banned":"0","date":"Чтв 05 Янв 2012 23:49:11","size":null,"timestamp":"1325796551","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95908","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><span class=\"unkfunc\">&gt;а ты чьих будешь?</span><br /><br />Мимопроходил из /s/&#44; спросить про анлокер для вируса&#44; требующего смску отправить.</p>","op":"0"}],[{"width":null,"lasthit":"1325797520","num":"95958","banned":"0","date":"Птн 06 Янв 2012 00:05:20","size":null,"timestamp":"1325797520","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95908","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95908.html#95954\" onclick=\"highlight(95954)\">&gt;&gt;95954</a><br />спермохлёб чтоли? тогда пришло время переустановить шиндоус <span class=\"spoiler\">привет \\s\\</span> </p>","op":"0"}]],"omit":21,"reply_count":26},{"image_count":1,"omitimages":0,"posts":[[{"width":"464","lasthit":"1325797112","num":"95616","banned":"0","date":"Чтв 05 Янв 2012 14:23:31","size":"6","timestamp":"1325762611","sticky":"0","tn_width":"250","closed":"0","thumbnail":"thumb/1325762611918s.png","parent":"0","video":"","subject":"","name":"Аноним","height":"300","image":"src/1325762611918.png","tn_height":"161","comment":"<p>Реквестирую куна&#44; который шарит в ассемблере. Нужно нарисовать такую хуевину (белый прямоугольник&#44; в нем два треугольника красный и зеленый). Об оплате договоримся.</p>","op":"0"}],[{"width":null,"lasthit":"1325797112","num":"95659","banned":"0","date":"Чтв 05 Янв 2012 16:01:55","size":null,"timestamp":"1325768515","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95616","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95616.html#95649\" onclick=\"highlight(95649)\">&gt;&gt;95649</a><br />Я нихуя не понял&#44; чесно.</p>","op":"0"}],[{"width":null,"lasthit":"1325797112","num":"95761","banned":"0","date":"Чтв 05 Янв 2012 19:08:00","size":null,"timestamp":"1325779680","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95616","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95616.html#95616\" onclick=\"highlight(95616)\">&gt;&gt;95616</a><br />Слушай&#44; ОП&#44; OpenGL юзать можно? Если да&#44; сделаю за 15 минут&#44; то дам фейкомыльце&#44; об оплате договоримся</p>","op":"0"}],[{"width":null,"lasthit":"1325797112","num":"95803","banned":"0","date":"Чтв 05 Янв 2012 20:29:30","size":null,"timestamp":"1325784570","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95616","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95616.html#95649\" onclick=\"highlight(95649)\">&gt;&gt;95649</a><br />Размер слишком большой после декомпиляции выйдет. Препод не поверит.</p>","op":"0"}],[{"width":null,"lasthit":"1325797112","num":"95952","banned":"0","date":"Чтв 05 Янв 2012 23:43:55","size":null,"timestamp":"1325796235","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95616","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>Подозреваю анальную еблю с прямым выводом в видеопамять и каким-то там прерыванием.</p>","op":"0"}],[{"width":"600","lasthit":"1325797112","num":"95956","banned":"0","date":"Чтв 05 Янв 2012 23:58:32","size":"445","timestamp":"1325797112","sticky":"0","tn_width":"150","closed":"0","thumbnail":"thumb/1325797112865s.png","parent":"95616","video":"","subject":"","name":"Аноним","height":"800","image":"src/1325797112865.png","tn_height":"200","comment":"<p>pastebin лежит сейчас&#44; поэтому прямо в пост напощу.<br /><pre><code><br />codesg segment para &#39;code&#39;<br />\tassume cs:codesg&#44; ds:codesg&#44; ss:codesg&#44; es:codesg<br />\torg 100h<br />\t<br />exit macro ; макрос для выхода из программы. <br />\tmov ah&#44; 4ch<br />\tint 21h<br />endm<br /><br />; ---------- BIOS Color attributes ----------<br />; \t0000\tBlack\t <br />;\t0001\tBlue\t<br />;\t0010\tGreen\t<br />;\t0011\tCyan\t<br />;\t0100\tRed\t<br />;\t0101\tMagenta\t<br />;\t0110\tBrown\t<br />;\t0111\tLight Gray\t<br />;\t1000\tDark Gray\t<br />;\t1001\tLight Blue\t<br />;\t1010\tLight Green\t<br />;\t1011\tLight Cyan\t<br />;\t1100\tLight Red\t<br />;\t1101\tLight Magenta\t<br />;\t1110\tYellow\t<br />;\t1111\tWhite<br />; --------------------------------------------<br /><br />begin:<br />\tcall start<br />\tvideoMode db ? ; видеорежим<br />\t; координаты треугольника<br />\tx dw 40 ; <br />\ty dw 0 ; <br />\thght dw 40 ; высота треугольника<br />\tcolor db 0100b ; цвет треугольника<br />\t<br />\tstart proc near<br />\t<br />\t; получить текущий установленный видеорежим<br />\tmov ah&#44; 0Fh<br />\tint 10h<br />\tmov videoMode&#44; al<br />\t<br />\t; установка видеорежима<br />\tmov al&#44; 13h ; графический&#44; 40x25&#44; 256 цветов&#44; 320х200 пикселей&#44; одна видеостраница<br />\tmov ah&#44; 0h <br />\tint 10h<br />\t<br />\t; рисуем белый прямоугольник с началом в 0 и концом в 160 шириной 40<br />\tmov dx&#44; 0<br />\tmov cx&#44; 0<br />\tjmp rect_row_loop<br />rect_column_loop:<br />\tmov cx&#44; 0<br />\tinc dx<br />rect_row_loop:<br />\tmov ah&#44; 0Ch<br />\tmov bh&#44; 0<br />\tmov al&#44; 1111b<br />\tint 10h<br />\tinc cx<br />\tcmp dx&#44; 40<br />\tje end_rect_loop<br />\tcmp cx&#44; 160<br />\tjne rect_row_loop<br />\tje rect_column_loop<br />end_rect_loop:<br />\t<br />\tcall DrawTriangle<br />\tmov color&#44; 0010b<br />\tmov x&#44; 120<br />\tmov y&#44; 0<br />\tcall DrawTriangle<br />\t; считать символ с клавиатуры (с эхо)<br />\tmov ah&#44; 01h<br />\tint 21h<br />\t; восстанавливаем видеорежим<br />\tmov ah&#44; 0<br />\tmov al&#44; videoMode<br />\tint 10h<br />\texit ; вызов макроса выхода из программы<br />\t<br />\tstart endp<br />\t<br />\tDrawTriangle proc near<br />\t\tmov si&#44; 0<br />\t\tmov dx&#44; y<br />\t\tmov cx&#44; x<br />\t\tmov ax&#44; 0<br />triangle_loop:<br />\t\tmov ah&#44; 0Ch<br />\t\tmov bh&#44; 0<br />\t\tmov al&#44; color<br />\t\tint 10h<br />\t\tinc dx<br />\t\tcmp dx&#44; hght<br />\t\tjne triangle_loop<br />\t\tinc si<br />\t\tmov dx&#44; si<br />\t\tdec cx<br />\t\tcmp si&#44; hght<br />\t\tjne triangle_loop<br />\t\t<br />\t\tmov si&#44; 0<br />\t\tmov dx&#44; y<br />\t\tmov cx&#44; x<br />\t\tmov ax&#44; 0<br />triangle_loop2:<br />\t\tmov ah&#44; 0Ch<br />\t\tmov bh&#44; 0<br />\t\tmov al&#44; color<br />\t\tint 10h<br />\t\tinc dx<br />\t\tcmp dx&#44; hght<br />\t\tjne triangle_loop2<br />\t\tinc si<br />\t\tmov dx&#44; si<br />\t\tinc cx<br />\t\tcmp si&#44; hght<br />\t\tjne triangle_loop2<br />\t\tret <br />\tDrawTriangle endp<br />\t<br />\tcodesg ends<br />end begin <br /></code></pre><br />Батник для компиляции и запуска:<br /><pre><code><br />c:\\tasm\\tasm c:\\shit.asm c:\\shit.obj<br />c:\\tasm\\tlink /T c:\\shit.obj<br />c:\\shit<br />pause<br /></code></pre><br />Не благодари.</p>","op":"0"}]],"omit":7,"reply_count":12},{"image_count":9,"omitimages":7,"posts":[[{"width":"360","lasthit":"1325797038","num":"94476","banned":"0","date":"Птн 30 Дек 2011 23:33:32","size":"17","timestamp":"1325277212","sticky":"0","tn_width":"301","closed":"0","thumbnail":"thumb/1325277212256s.jpg","parent":"0","video":"","subject":"","name":"Аноним","height":"299","image":"src/1325277212256.jpg","tn_height":"250","comment":"<p>Программач&#44; я хочу написать %%еще одну %%скачивалку картинок с треда. На C++. Не спрашивай почему. Подскажи&#44; что покопать&#44; какие слова вбивать в гугл? С вебом не знаком.</p>","op":"0"}],[{"width":null,"lasthit":"1325797038","num":"95826","banned":"0","date":"Чтв 05 Янв 2012 20:55:19","size":null,"timestamp":"1325786119","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94476","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/94476.html#95818\" onclick=\"highlight(95818)\">&gt;&gt;95818</a><br />Хм&#44; было:<br />попросить страницу по адресу <a href=\"http://www.2ch.so/xynta\" rel=\"nofollow\">http://www.2ch.so/xynta</a><br />Стало:<br />попросить страницу по адресу <a href=\"http://2ch.so/xynta\" rel=\"nofollow\">http://2ch.so/xynta</a><br /><br />Во втором варианте заработало. Почему без www работает?</p>","op":"0"}],[{"width":"1024","lasthit":"1325797038","num":"95828","banned":"0","date":"Чтв 05 Янв 2012 20:57:05","size":"483","timestamp":"1325786225","sticky":"0","tn_width":"200","closed":"0","thumbnail":"thumb/1325786225442s.jpg","parent":"94476","video":"","subject":"","name":"Аноним","height":"768","image":"src/1325786225442.jpg","tn_height":"150","comment":"<p>А еще&#44; ОП:<br /><a href=\"http://www.rsdn.ru/article/inet/inetapi.xml\" rel=\"nofollow\">http://www.rsdn.ru/article/inet/inetapi.xml</a></p>","op":"0"}],[{"width":"279","lasthit":"1325797038","num":"95896","banned":"0","date":"Чтв 05 Янв 2012 22:13:19","size":"97","timestamp":"1325790799","sticky":"0","tn_width":"200","closed":"0","thumbnail":"thumb/1325790799301s.jpg","parent":"94476","video":"","subject":"","name":"Аноним","height":"279","image":"src/1325790799301.jpg","tn_height":"200","comment":"<p>Атя-тя. Теперь у меня загружаются странички&#44; но пока без картинок.</p>","op":"0"}],[{"width":null,"lasthit":"1325797038","num":"95955","banned":"0","date":"Чтв 05 Янв 2012 23:57:18","size":null,"timestamp":"1325797038","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94476","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>Повторять то&#44; что уже сто раз сделали&#44; тупо. Когда мне надо было&#44; запилил скачивалку с 4chan за двадцать минут на PHP. Потому что не хуй ебать мозги&#44; когда есть wget. Распарсил страницу&#44; нашел URL всех картинок по регекспу и сделал цикл&#44; который пускает wget c нужным url в фон&#44; для каждой картинки. Ну&#44; еще сделал ожидание&#44; чтобы не больше N процессов в фоне висело&#44; где N зависит от ширины канала. </p>","op":"0"}],[{"width":null,"lasthit":"1325797038","num":"95957","banned":"0","date":"Птн 06 Янв 2012 00:00:09","size":null,"timestamp":"1325797209","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94476","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/94476.html#95955\" onclick=\"highlight(95955)\">&gt;&gt;95955</a><br />Просто качалка картинок из треда — Hello World для местных быдлокодеров. Не так уж и плохо.</p>","op":"0"}]],"omit":16,"reply_count":21},{"image_count":1,"omitimages":0,"posts":[[{"width":"777","lasthit":"1325796521","num":"93705","banned":"0","date":"Срд 28 Дек 2011 08:18:03","size":"84","timestamp":"1325049483","sticky":"0","tn_width":"250","closed":"0","thumbnail":"thumb/1325049483818s.jpg","parent":"0","video":"","subject":"","name":"Аноним","height":"522","image":"src/1325049483818.jpg","tn_height":"167","comment":"<p>посоны. Я гуглил и нихуя не понял как это делать. Допустим есть у меня форма сделаная в редакторе ресурсов с расширением .rc как ее блеять прицепить к своей проге(си или *асм)</p>","op":"0"}],[{"width":"592","lasthit":"1325796521","num":"95916","banned":"0","date":"Чтв 05 Янв 2012 22:37:29","size":"102","timestamp":"1325792249","sticky":"0","tn_width":"200","closed":"0","thumbnail":"thumb/1325792249324s.jpg","parent":"93705","video":"","subject":"","name":"Аноним","height":"480","image":"src/1325792249324.jpg","tn_height":"162","comment":"","op":"0"}],[{"width":null,"lasthit":"1325796521","num":"95953","banned":"0","date":"Чтв 05 Янв 2012 23:48:41","size":null,"timestamp":"1325796521","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"93705","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/93705.html#93705\" onclick=\"highlight(93705)\">&gt;&gt;93705</a><br /><br />такие уебки как ты не имеют права дышать моим кислородом</p>","op":"0"}]],"omit":0,"reply_count":2},{"image_count":2,"omitimages":2,"posts":[[{"width":"613","lasthit":"1325795550","num":"95750","banned":"0","date":"Чтв 05 Янв 2012 18:55:54","size":"239","timestamp":"1325778954","sticky":"0","tn_width":"255","closed":"0","thumbnail":"thumb/1325778954531s.jpg","parent":"0","video":"","subject":"","name":"Аноним","height":"600","image":"src/1325778954531.jpg","tn_height":"250","comment":"<p>Привет&#44; Анон! Мини-опрос.<br /><br />1) На чём программируешь?<br />2) Какую ОС используешь?<br /><br />Только&#44; пожалуйста&#44; без срача. :3</p>","op":"0"}],[{"width":null,"lasthit":"1325795550","num":"95920","banned":"0","date":"Чтв 05 Янв 2012 22:43:38","size":null,"timestamp":"1325792618","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95750","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95750.html#95776\" onclick=\"highlight(95776)\">&gt;&gt;95776</a><br /><span class=\"unkfunc\">&gt;Каждый день я использую десятки и сотни операционных систем</span><br />тысячи&#44; миллионы блеать</p>","op":"0"}],[{"width":null,"lasthit":"1325795550","num":"95922","banned":"0","date":"Чтв 05 Янв 2012 22:46:26","size":null,"timestamp":"1325792786","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95750","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<ol><li>flash&#44; java&#44; js<br />2. win7<br />3. живу в душевой</li></ol>","op":"0"}],[{"width":null,"lasthit":"1325795550","num":"95928","banned":"0","date":"Чтв 05 Янв 2012 22:55:08","size":null,"timestamp":"1325793308","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95750","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>1) C&#44; BASH&#44; ещё по мелочи но в соновном РНР<br />2) XP&#44; 7&#44; FreeBSD&#44; Ubuntu</p>","op":"0"}],[{"width":null,"lasthit":"1325795550","num":"95938","banned":"0","date":"Чтв 05 Янв 2012 23:15:02","size":null,"timestamp":"1325794502","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95750","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>ruby&#44; python&#44; javascript<br />ubuntu&#44; debian<br />натурал<br />каждое утро</p>","op":"0"}],[{"width":null,"lasthit":"1325795550","num":"95949","banned":"0","date":"Чтв 05 Янв 2012 23:32:30","size":null,"timestamp":"1325795550","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95750","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>python&#44; js<br />win 7 + виртуалка с прыщами сервисом</p>","op":"0"}]],"omit":21,"reply_count":26},{"image_count":0,"omitimages":0,"posts":[[{"width":"724","lasthit":"1325795293","num":"95831","banned":"0","date":"Чтв 05 Янв 2012 21:01:30","size":"246","timestamp":"1325786490","sticky":"0","tn_width":"181","closed":"0","thumbnail":"thumb/1325786490211s.png","parent":"0","video":"","subject":"","name":"Аноним","height":"1000","image":"src/1325786490211.png","tn_height":"250","comment":"<p>Программач&#44; подскажи&#44; как разделить один файл на кучу других?<br />Есть файл&#44; содержащий в себе кучу других файлов без какого либо разделения между ними. Есть так же отдельно список файлов&#44; содержащихся в нём. Список имеет такой вид:<br /><pre><code>s00001.BP2&#44;16119&#44;0<br />s00002.BP2&#44;15519&#44;16119<br />s00003.BP2&#44;8701&#44;31638<br />s00004.BP2&#44;6276&#44;40339</code></pre><br /><br />Пикрандом</p>","op":"0"}],[{"width":null,"lasthit":"1325795293","num":"95913","banned":"0","date":"Чтв 05 Янв 2012 22:34:35","size":null,"timestamp":"1325792075","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95831","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95831.html#95909\" onclick=\"highlight(95909)\">&gt;&gt;95909</a><br />Ну спасибо тебе! Не хватало мне ещё только из-за одного файла программирование изучать.</p>","op":"0"}],[{"width":null,"lasthit":"1325795293","num":"95918","banned":"0","date":"Чтв 05 Янв 2012 22:39:21","size":null,"timestamp":"1325792361","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95831","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95831.html#95913\" onclick=\"highlight(95913)\">&gt;&gt;95913</a><br /><span class=\"unkfunc\">&gt;Не хватало мне ещё только из-за одного файла программирование изучать.</span><br />Ну&#44; мы в капиталистическом обществе живём. У тебя есть спрос&#44; у меня есть ресурсы. Произведи-или-купи&#44; сам знаешь&#44; главный принцип логистики.</p>","op":"0"}],[{"width":null,"lasthit":"1325795293","num":"95923","banned":"0","date":"Чтв 05 Янв 2012 22:47:27","size":null,"timestamp":"1325792847","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95831","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>Так и представляю&#44; заходит оп в булочную и говорит: расскажите&#44; как печь хлеб? Ему толстая румяная тётя говорит: наш хлеб выпускают на лучших пекарнях&#44; из первоклассной муки&#44; свежих дрожжей и вкладывают лучи добра в каждую буханку. А оп такой&#44; подразумевая&#44; что уж одну булку ему бесплатно дадут: тётенька&#44; вы меня ради одного батона хотите технологом хлебокомбината сделать? </p>","op":"0"}],[{"width":null,"lasthit":"1325795293","num":"95924","banned":"0","date":"Чтв 05 Янв 2012 22:50:00","size":null,"timestamp":"1325793000","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95831","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95831.html#95831\" onclick=\"highlight(95831)\">&gt;&gt;95831</a><br />на месте опа я бы написал за пару минут скриптик на любом шелле с использованием gnu dd&#44; но как будет он будет выкручиваться&#44; я не знаю ;)</p>","op":"0"}],[{"width":null,"lasthit":"1325795293","num":"95946","banned":"0","date":"Чтв 05 Янв 2012 23:28:13","size":null,"timestamp":"1325795293","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95831","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95831.html#95924\" onclick=\"highlight(95924)\">&gt;&gt;95924</a><br /><br />на месте ОПа я бы покончил с собой путем отрезания и пожирания кусков собственного тела</p>","op":"0"}]],"omit":11,"reply_count":16},{"image_count":0,"omitimages":0,"posts":[[{"width":"380","lasthit":"1325794428","num":"94960","banned":"0","date":"Пнд 02 Янв 2012 22:58:02","size":"8","timestamp":"1325534282","sticky":"0","tn_width":"250","closed":"0","thumbnail":"thumb/1325534282012s.jpg","parent":"0","video":"","subject":"","name":"Аноним","height":"159","image":"src/1325534282012.jpg","tn_height":"104","comment":"<p>Привет&#44; программач.<br />Нужно мне сделать функцию для аппроксимирования сигнала. То есть она&#44; функция эта&#44; возрастает и убывает неравномерно&#44; узлы интерполяции должны браться через неравные промежутки. Плюс ко всему&#44; тут важна производителность&#44; поскольку работать будет в реальном времени.<br />Как понимаю&#44; интерполяция многочленами тут не подходит: порядок у них будет слишком высокий&#44; вычисляться будет долго. К тому же возможны выбросы функции в неподходящих местах.<br />В принципе&#44; можно было бы сорганизовать это в виде набора прямых отрезков&#44; но я не представляю&#44; как оно будет выглядеть. Не набор же конструкций вида if(x &gt; оп &amp;&amp; x &lt;= хуй)?<br />Как вообще поступают в таких случаях?</p>","op":"0"}],[{"width":null,"lasthit":"1325794428","num":"94993","banned":"0","date":"Втр 03 Янв 2012 01:05:36","size":null,"timestamp":"1325541936","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94960","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/94960.html#94960\" onclick=\"highlight(94960)\">&gt;&gt;94960</a><br /><br />Ну так а это. Сплайны не подойдут&#44; разве? Эффективно и быстро&#44; вроде как. Опять же&#44; не понимаю специфики задачи&#44; так что могу спиздеть хуйню. Хотя это не столь редко тут.</p>","op":"0"}],[{"width":null,"lasthit":"1325794428","num":"95120","banned":"0","date":"Втр 03 Янв 2012 19:46:11","size":null,"timestamp":"1325609171","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94960","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>А можешь пояснить без хардкора - вот есть функция в табличном виде&#44; как&#44; собственно&#44; будет выглядеть для неё сплайн? А то гугель всё в маткады посылает или простыни формул с доказательствами выдаёт.</p>","op":"0"}],[{"width":null,"lasthit":"1325794428","num":"95123","banned":"0","date":"Втр 03 Янв 2012 20:06:51","size":null,"timestamp":"1325610411","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94960","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>Если использовать питон (опять же&#44; не факт&#44; что у тебя есть такая возможность)&#44; то задача решается достаточно просто. Допустим&#44; есть два массива - x и y. Ну&#44; функция в табличном виде.<br /><br />...<br />import numpy as np<br />from scipy.interpolate import UnivariateSpline as splinefit # импорт всего необходимого<br />ymodel = splinefit(x&#44;y&#44;s=0) # создаем сплайн<br />yfit = ymodel(np.linspace(0&#44;100)) # считаем значения модели на новой сетке от 0 до 100&#44; допустим<br />И дальше развлекаешься&#44; как хочешь. Если же с питоном хуй&#44; гугли netlib&#39;овские модули для сплайн-интерполяции <a href=\"http://www.netlib.org/dierckx/\" rel=\"nofollow\">http://www.netlib.org/dierckx/</a> <br /><br />По сути&#44; в питоне они же и используются. </p>","op":"0"}],[{"width":null,"lasthit":"1325794428","num":"95511","banned":"0","date":"Срд 04 Янв 2012 23:34:00","size":null,"timestamp":"1325709240","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94960","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>гитарную примочку чтоли эмулировать собрался?</p>","op":"0"}],[{"width":null,"lasthit":"1325794428","num":"95937","banned":"0","date":"Чтв 05 Янв 2012 23:13:48","size":null,"timestamp":"1325794428","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"94960","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/94960.html#95511\" onclick=\"highlight(95511)\">&gt;&gt;95511</a><br />Нет&#44; нужен простенький&#44; без выебонов&#44; но вместе с тем достаточно реалистичный синтезатор с имитацией струны (поскольку у меня в распоряжении только гитара&#44; а банджо и мандолины нет&#44; то и работать будем с ней). К слову&#44; в примочках на огибающую всем насрать.</p>","op":"0"}]],"omit":4,"reply_count":9},{"image_count":42,"omitimages":41,"posts":[[{"width":"218","lasthit":"1325794244","num":"90821","banned":"0","date":"Пнд 19 Дек 2011 19:21:55","size":"2","timestamp":"1324311715","sticky":"0","tn_width":"250","closed":"0","thumbnail":"thumb/1324311715164s.png","parent":"0","video":"","subject":"/PR/ GUIDE v 1.0","name":"Аноним","height":"159","image":"src/1324311715164.png","tn_height":"182","comment":"<p>Привет&#44; Программач.<br /><br />Я знаю&#44; как тебя достали все эти треды: &quot;Анон&#44; я школота-начинающий программист&#44;<br />посоветуй %book_name% по %language_name%&quot;&#44; &quot;Анон&#44; я начал изучать хаскель&#44; как написать на нем игру в 3Д?&quot;&#44;<br />&quot;Анон&#44; вчера пацаны на раёне посоветовали учить пыхапе&#44; посоветуй книг&quot;&#44; &quot;Хей&#44; /pr/&#44; как написать пузырек на паскале в 3 строки?&quot;.<br /><br />Давай раз и навсегда покончим с этим&#44; создадим единый гайд по выбору литературы и ресурсов для своего любимого языка программирования.<br /><br />Ну же&#44; анон&#44; поднимай свою жопу с кресла и перечисляй все ресурсы&#44; которые стоит просмотреть начинающему и не очень /pr/ограммисту. От хаскелля до VB&#44; от монад до абстрактных фабрик абстракций.<br /><br /><br />С<br /><br />1) Подбельский&#44; Фомин : Программирование на языке С. <br /> Один из лучших гайдов по няшной сишке&#44; все важные моменты будут разложены по полочкам. <br />2) Керниган&#44; Ричи : Язык C<br /> Книга от отцов-основателей языка&#44; хули. Читать всем няшистам без исключения. <br />...<br /><br />С++<br />0) Здесь стоит острый вопрос: стоит ознакомиться с литературой по С перед изучением плюсов&#44; или забить? Выбор остается за тобой&#44; анон.<br />1) Бьерн Страуструп. Язык программирования С++<br /> Книга от создателя языка. Как это ни странно&#44; читать ее лучше ПОСЛЕ того&#44; как вы овладеете языком. Много лишней воды. <br />Только для тех&#44; кто хочет окунуться в философию языка и научиться ПРАВИЛЬНО ей следовать. <br />2) Герберт Шилдт - Самоучитель C++<br /> Замечательный учебник&#44; не такой досконально полный&#44; но после его прочтения вы уже не будете путаться в синтаксисе и будете<br />знать основы для дальнейшего свободного плавания.<br />3) Лафоре: С++<br /> Советую всем читать этот учебник самым первым: идеально(для нубов)&#44; на пальцах расписано ООП&#44; все прочие возможности тоже<br />расписаны неплохо. В книге очень-очень много хороших задач и упражнений.<br /><br />JAVA<br />0) ПРЕДИСЛОВИЕ<br /><br />Всем советую очень тепло и нежно: после ознакомления с основами языка периодически посещать:<br />www.skipy.ru - очень много полезной и неочевидной информации<br />www.javatalks.ru - один из самых полезных форумов на тему изучения джавы<br />www.javable.com — сайт со статьями и tutorial&#39;ом по Java. Все в основном на русском.<br />www.exampledepot.com — очень полезный ресурс&#44; где собраны краткие примеры использования <br />классов для тех или иных пакетов<br />java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc <br />должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial&#39;ов на <br />все возможные темы.<br /> <br /> java.lang — основа основ. Каждый класс в этом пакете нуждается в отдельном внимании.<br /> java.io — ни одна программа не может обойтись без операций с вводом-выводом.<br /> java.util — пакет в основном содержит все необходимое для работы с коллекциями: Collecti<br /> on&#44; Enumeration&#44; Set&#44; List&#44; Map и т. д. и т. п.<br /> java.net — содержит основные классы для работы с сетью.<br /> java.text — все необходимое для форматирования текста<br /> java.lang.reflect — Java не была бы Java&#39;ой если бы не Reflection. Reflection стирает <br /> грань между данными и кодом.<br /> javax.sql — все необходимое по работе с базами данных<br /> javax.xml.<em>&#44; org.w3c.dom.</em>&#44; org.xml.sax.* — без этих пакетов работа с XML просто <br /> немыслима<br /><br />onjava.com — рано или поздно все новости мира Java попадают сюда<br />www.javaspecialists.eu — ресурс полезен как новичкам&#44; так и продвинутым программистам&#44;<br />так как содержит много статей о тонкостях работы с Java.<br />www.theserverside.com — рекомендуется подписаться на RSS&#44; так как часто проскакивают <br />весьма интересные вещи по Java.<br /><br /><br />Теперь о книгах:<br />1) JAVA 2. Том 1&#44; Том 2 (Хорстманн) - ЧИТАТЬ В САМОМ НАЧАЛЕ. САМОЕ ПОЛНОЕ И ПОДРОБНОЕ РУКОВОДСТВО ПО JAVA ПРИ ИЗУЧЕНИИ С НУЛЯ<br />2) Кен Арнольд&#44; Джеймс Гослинг - книга от со-основателей языка. Очень подробно расписаны основные моменты языка вплоть до самых мелких деталей.<br />К сожалению книга немного устарела&#44; главу про AWT можно не читать. В КНИГЕ ЕСТЬ УПРАЖНЕНИЯ.<br />3) Ноутон&#44; Шилдт - Java2. Руководство по Java. <br />Тоже хорошая книга&#44; но не сравнится с Хорстманном. Читать можно только ради закрепления материала. <br />4) Иван Портянкин - Swing. Эффектные пользовательские интерфейсы<br />Читать&#44; собственно&#44; ради полного ознакомления с пакетом javax.swing(GUI)<br />5) Брюс Эккель. Философия JAVA. Читать после овладения языком на хорошем уровне. <br />6) Джошуа Блох. Эффективное программирование на Java.<br />В книге собраны ВСЕ важные моменты&#44; касающиеся работы с Java. Читать после того&#44; как начнете разбираться(хорошо) в ООП и паттернах. <br /><br />Ну же&#44; хайвманд&#44; пилим гайд.<br /><br /></p>","op":"0"}],[{"width":null,"lasthit":"1325794244","num":"95804","banned":"0","date":"Чтв 05 Янв 2012 20:29:45","size":null,"timestamp":"1325784585","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"90821","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/90821.html#95801\" onclick=\"highlight(95801)\">&gt;&gt;95801</a><br />Я не сказал бы&#44; что я не люблю перл. Очень интересный язык&#44; потрясающий синтаксис&#44; красивые конструкции&#44; мощнейшие регулярки. Я даже написал на нём несколько скриптов. Но сейчас-то он зачем нужен?</p>","op":"0"}],[{"width":null,"lasthit":"1325794244","num":"95814","banned":"0","date":"Чтв 05 Янв 2012 20:43:01","size":null,"timestamp":"1325785381","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"90821","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/90821.html#95804\" onclick=\"highlight(95804)\">&gt;&gt;95804</a><br /><br />чтобы троллить на дваче</p>","op":"0"}],[{"width":null,"lasthit":"1325794244","num":"95817","banned":"0","date":"Чтв 05 Янв 2012 20:45:46","size":null,"timestamp":"1325785546","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"90821","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>Кстати&#44; почему тред не закреплён? </p>","op":"0"}],[{"width":null,"lasthit":"1325794244","num":"95866","banned":"0","date":"Чтв 05 Янв 2012 21:48:22","size":null,"timestamp":"1325789302","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"90821","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/90821.html#95814\" onclick=\"highlight(95814)\">&gt;&gt;95814</a><br /><span class=\"unkfunc\">&gt;чтобы троллить на дваче</span><br />Для этого сейчас используется хаскелл. </p>","op":"0"}],[{"width":"1876","lasthit":"1325794244","num":"95934","banned":"0","date":"Чтв 05 Янв 2012 23:10:44","size":"2047","timestamp":"1325794244","sticky":"0","tn_width":"200","closed":"0","thumbnail":"thumb/1325794244792s.jpg","parent":"90821","video":"","subject":"","name":"Аноним","height":"1250","image":"src/1325794244792.jpg","tn_height":"133","comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/90821.html#95817\" onclick=\"highlight(95817)\">&gt;&gt;95817</a><br /><br />А ведь и правда! Какого хуя тред не прикреплён? <br />Оп - сократи лишнее в Оп-посте и добавь информации по остальным языкам. <br /><br />Будет годно же. И новичкам удобно и доска чистая от бесконечных нубо-вопросов. </p>","op":"0"}]],"omit":252,"reply_count":257},{"image_count":3,"omitimages":3,"posts":[[{"width":"1280","lasthit":"1325793556","num":"95673","banned":"0","date":"Чтв 05 Янв 2012 16:47:54","size":"961","timestamp":"1325771274","sticky":"0","tn_width":"250","closed":"0","thumbnail":"thumb/1325771274151s.png","parent":"0","video":"","subject":"","name":"Аноним","height":"1024","image":"src/1325771274151.png","tn_height":"200","comment":"<p>Питонопроблемы ИТТ.<br /><br />Суть: файл в кодировке cp1251 имеет пустой байт <span class=\"spoiler\">байт есть - символа нет</span>&#44; в связи с чем скрипт крашится со следующей ошибкой:<br /><pre><code><br />Message\tFile Name\tLine\tPosition\t<br />Traceback\t\t\t<br /> decode\tG:\\Python32\\lib\\encodings\\cp1251.py\t23\t\t<br />UnicodeDecodeError: &#39;charmap&#39; codec can&#39;t decode byte 0x98 in position 19499: character maps to &lt;undefined&gt;\t<br /></code></pre><br /><br />Вопрос: как игнорить такие символы\\байты? <br /><br />пикрандом</p>","op":"0"}],[{"width":null,"lasthit":"1325793556","num":"95766","banned":"0","date":"Чтв 05 Янв 2012 19:23:47","size":null,"timestamp":"1325780627","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95673","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95673.html#95747\" onclick=\"highlight(95747)\">&gt;&gt;95747</a><br /><br />попробую отдельно<br /><br /><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95673.html#95754\" onclick=\"highlight(95754)\">&gt;&gt;95754</a><br />тоже нет</p>","op":"0"}],[{"width":null,"lasthit":"1325793556","num":"95779","banned":"0","date":"Чтв 05 Янв 2012 19:46:58","size":null,"timestamp":"1325782018","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95673","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>0x98 исключён из cp1251 и поэтому у него нет соответствующей кодовой точки. <br /><br />Тупое решение: выгрызть этот байт из исходного файла перед обработкой<br /><br />Правильное решение: запилить собственный кодек в котором 0х98 объявлен как символ&#44; который имел в виду производитель файла.<br /><br /></p>","op":"0"}],[{"width":null,"lasthit":"1325793556","num":"95824","banned":"0","date":"Чтв 05 Янв 2012 20:53:50","size":null,"timestamp":"1325786030","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95673","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95673.html#95673\" onclick=\"highlight(95673)\">&gt;&gt;95673</a><br /><br />Второпитонопроблемы же. </p>","op":"0"}],[{"width":null,"lasthit":"1325793556","num":"95827","banned":"0","date":"Чтв 05 Янв 2012 20:56:52","size":null,"timestamp":"1325786212","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95673","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p><a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95673.html#95673\" onclick=\"highlight(95673)\">&gt;&gt;95673</a><br />Бро&#44; юзай utf-8 без BOM во всех скриптах&#44; и будет тебе счастье.<br />Открой notepad&#39;ом и преобразуй в utf-8 без BOM</p>","op":"0"}],[{"width":null,"lasthit":"1325793556","num":"95930","banned":"0","date":"Чтв 05 Янв 2012 22:59:16","size":null,"timestamp":"1325793556","sticky":"0","tn_width":null,"closed":"0","thumbnail":null,"parent":"95673","video":"","subject":"","name":"Аноним","height":null,"image":null,"tn_height":null,"comment":"<p>bump for <a onmouseover=\"showPostPreview(event)\" onmouseout=\"delPostPreview(event)\" href=\"/pr/res/95673.html#95685\" onclick=\"highlight(95685)\">&gt;&gt;95685</a></p>","op":"0"}]],"omit":9,"reply_count":14}], "pages": [{"filename":"/pr/0.json","page":0},{"filename":"/pr/1.json","page":1},{"filename":"/pr/2.json","page":2},{"filename":"/pr/3.json","page":3},{"filename":"/pr/4.json","page":4},{"filename":"/pr/5.json","page":5},{"filename":"/pr/6.json","page":6},{"filename":"/pr/7.json","page":7},{"filename":"/pr/8.json","page":8},{"filename":"/pr/9.json","page":9},{"filename":"/pr/10.json","page":10},{"filename":"/pr/11.json","page":11},{"filename":"/pr/12.json","page":12},{"filename":"/pr/13.json","page":13},{"filename":"/pr/14.json","page":14},{"filename":"/pr/15.json","page":15},{"filename":"/pr/16.json","page":16},{"filename":"/pr/17.json","page":17},{"filename":"/pr/18.json","page":18},{"filename":"/pr/19.json","page":19}]}
37 tests/tests.py
@@ -0,0 +1,37 @@
+from api import Api, Thread, Post
+import unittest
+import os
+
+class MyTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.api = Api()
+ self.api._url = "file:///" + os.path.join(os.path.dirname(__file__)) + "/"
+ self.api.board = "pr"
+
+ def test_api(self):
+ self.assertTrue(isinstance(self.api, object))
+
+ def test_set_board(self):
+ self.assertEqual(self.api.board, "pr")
+
+ def test_get_board_true(self):
+ threads = self.api.get_threads()
+ thread = threads[0]
+ self.assertTrue(isinstance(threads, list))
+ self.assertTrue(isinstance(thread, Thread))
+ self.assertEqual(thread.__repr__(), "<Thread: 87848>")
+
+ def test_get_board_false(self):
+ self.api.board = None
+ self.assertRaises(ValueError, self.api.get_threads)
+
+ def test_get_thread_true(self):
+ posts = self.api.get_thread(87848)
+ post = posts[0]
+ self.assertTrue(isinstance(posts, list))
+ self.assertTrue(isinstance(post, Post))
+ self.assertEqual(post.__repr__(), "<Post: 87848>")
+
+if __name__ == '__main__':
+ unittest.main()

0 comments on commit db93172

Please sign in to comment.