From: Eugene Prokopiev <prokopiev@stc.donpac.ru> To: "культурный офтопик" <smoke-room@lists.altlinux.org> Subject: [room] Лекция по Java Date: Wed, 25 Oct 2006 14:43:40 +0400 Message-ID: <453F3FDC.4030304@stc.donpac.ru> (raw) In-Reply-To: <20061025083002.GA32347@localhost.localdomain> > Что следует изучать первое, для возможности запуска приложений с > минимальными требованиями к конфигурации сервера (то есть либо CGI, либо, > если это требует какого-либо модуля апача -- то это то что есть в Сизифе)? Первое: пусть польют меня грязью, но я в данном вопросе сторонник недистрибутивного подхода, из Сизифа меня интересует только JDK/JRE. Обоснование: продукт должен работать не только в ALT, и не только в Linux (даже в качестве IDE я использую Eclipse в Linux, но со мной работает один человек в Windows и один еще не определился :) ). Более того, мне хочется, чтобы он собирался везде, где нет ничего, кроме JDK. Поэтому мне пока проще таскать все необходимые библиотеки с собой, они у меня лежат прямо в CVS вместе с исходниками. Я задницей чувствую, что когда-нибудь это начнет меня напрягать, когда потребуется гарантировать одинаковые версии библиотек в разных проектах, и тогда я буду смотреть на maven, а пока мне достаточно ant. Грубые аналогии: ant - это make, maven - это hasher/spt :) Далее: CGI в виде отдельных процессов на каждый запрос в Java никто в здравом уме делать не станет - это слишком дорого. Основа всех технологий - это сервлеты, которые выглядят так: public class Hello extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.println("<html>"); writer.println("<head>"); writer.println("<title>Sample Application Servlet Page</title>"); writer.println("</head>"); writer.println("<body bgcolor=white>"); writer.println("</body>"); writer.println("</html>"); } } Принцип ясен? Есть надстройки над этим - template engines типа JSP и Velocity, которые позволяют писать в стиле PHP, т.е. html + вставки кода. Кстати, Velocity как template engine используется в проектах, которые к web никаким боком. Есть надстройки над этими надстройками :) Есть другие надстройки над сервлетами. Начать читать можно отсюда - http://www.techinfo.net.ru/docs/web/javawebdev.html Об инфраструктуре: минимальное web-приложение выглядит так: $ ls -lR .: итого 24 -rwxr-xr-x 1 john john 296 Фев 19 2006 build.sh -rw-r--r-- 1 john john 2124 Окт 25 13:23 build.xml drwxr-xr-x 2 john john 4096 Окт 25 13:24 docs drwxr-xr-x 2 john john 4096 Окт 25 13:21 lib-build drwxr-xr-x 3 john john 4096 Янв 25 2005 src drwxr-xr-x 4 john john 4096 Янв 25 2005 web ./docs: итого 4 -rw-r--r-- 1 john john 62 Авг 28 2004 README.txt ./lib-build: итого 1556 -rw-r--r-- 1 john john 999966 Фев 19 2006 ant.jar -rw-r--r-- 1 john john 407573 Фев 19 2006 ant-nodeps.jar -rw-rw-rw- 1 john john 31642 Авг 13 2005 commons-logging.jar -rw-r--r-- 1 john john 132263 Фев 19 2006 javax.servlet.jar ./src: итого 4 drwxr-xr-x 2 john john 4096 Авг 28 2004 mypackage ./src/mypackage: итого 4 -rw-r--r-- 1 john john 3165 Авг 28 2004 Hello.java ./web: итого 16 -rw-r--r-- 1 john john 1019 Авг 28 2004 hello.jsp drwxr-xr-x 2 john john 4096 Авг 28 2004 images -rw-r--r-- 1 john john 636 Авг 28 2004 index.html drwxr-xr-x 3 john john 4096 Окт 25 13:24 WEB-INF ./web/images: итого 4 -rw-r--r-- 1 john john 1441 Авг 28 2004 tomcat.gif ./web/WEB-INF: итого 8 drwxr-xr-x 2 john john 4096 Янв 25 2005 lib -rw-r--r-- 1 john john 684 Фев 6 2005 web.xml ./web/WEB-INF/lib: итого 0 web/WEB-INF/web.xml - это дескриптор вида: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Hello, World Application</display-name> <description> This is a simple web application with a source code organization based on the recommendations of the Application Developer's Guide. </description> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>mypackage.Hello</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> Класс Hello мы уже рассматривали :) build.xml (и вызывающий его build.sh) умеет строить из этого дерева файлов war-архив. Этот архив можно разными способами продеплоить в Tomcat: например, скопировать его в определенный каталог, который он мониторит на предмет появления новых приложений. Будет это приложение работать и в других контейнерах вроде Jetty и Resin, а также в тяжелых серверах приложений вроде JBoss и Geronimo, которые содержат встроенные сервлет-контейнеры (коими являются Tomcat и Jetty :) ). Мне больше нравится Jetty, т.к. он легче, меньше, проще, понятнее ... Взять маленький Jetty можно тут - http://lib.juga.ru/article/articleview/222/1/0?PrintableVersion=enabled Т.е. Apache web server здесь отдыхает. Его подставляют как frontend. Можно ли задействовать nginx - не в курсе. Архив приложения ушел в личку ... Но это все классика. Если хочется странного (FastCGI), то пишется обычное java-приложение, которое обменивается с web-сервером через сокеты. Такое приложение можно писать, забыв о наличии каких-либо frameworks. Но если я знаю, что будет много относительно независимых и взамозаменямых модулей (и я узнаю о том, какие конфигурации будут нужны, только на этапе внедрения), то я задействую Spring. Стартовый класс: public class Main { public static void main(String[] args) throws InterruptedException { if (args.length > 0) { final AbstractApplicationContext ctx = new FileSystemXmlApplicationContext(new String []{args[0]}); ctx.registerShutdownHook(); A a = (A)ctx.getBean("a"); a.doSomething(); Thread.sleep(Long.MAX_VALUE); } else { System.err.println("Usage : java mypackage.Main <context.xml>"); System.exit(-1); } } } В нем я загружаю все мои модули из внешнего конфигурационного файла (контекста в терминах Spring), а затем получаю ссылку на модуль а и вызываю один из его методов. Вывод на консоль после запуска java mypackage.Main conf/beans.xml: INFO CollectionFactory - JDK 1.4+ collections available INFO XmlBeanDefinitionReader - Loading XML bean definitions from file [/home/john/workspace/SpringApp/conf/beans.xml] INFO FileSystemXmlApplicationContext - Bean factory for application context [org.springframework.context.support.FileSystemXmlApplicationContext;hashCode=11850709]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [a,b]; root of BeanFactory hierarchy INFO FileSystemXmlApplicationContext - 2 beans defined in application context [org.springframework.context.support.FileSystemXmlApplicationContext;hashCode=11850709] INFO FileSystemXmlApplicationContext - Unable to locate MessageSource with name 'messageSource': using default [org.springframework.context.support.DelegatingMessageSource@173831b] INFO FileSystemXmlApplicationContext - Unable to locate ApplicationEventMulticaster with name 'applicationEventMulticaster': using default [org.springframework.context.event.SimpleApplicationEventMulticaster@13caecd] INFO DefaultListableBeanFactory - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [a,b]; root of BeanFactory hierarchy] INFO B - init INFO A - init INFO B - do something Затем жду, пока пользователь не нажмет Ctrl+C :) Вывод: INFO FileSystemXmlApplicationContext - Closing application context [org.springframework.context.support.FileSystemXmlApplicationContext;hashCode=11850709] INFO DefaultListableBeanFactory - Destroying singletons in factory {org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [a,b]; root of BeanFactory hierarchy} INFO A - destroy INFO B - destroy Конфигурационный файл со связями между модулями a и b выглядит так: <beans> <bean id="a" class="mypackage.A" init-method="init" destroy-method="destroy"> <property name="c" ref="b"/> </bean> <bean id="b" class="mypackage.B" init-method="init" destroy-method="destroy"/> </beans> Вот как выглядит класс B: public class B implements C { private Log log = LogFactory.getLog(getClass()); public void init() { log.info("init"); } public void destroy() { log.info("destroy"); } public void doSomething() { log.info("do something"); } } Он реализует интерфейс С: public interface C { public void doSomething(); } Который, в свою очередь, используется классом А: public class A { private Log log = LogFactory.getLog(getClass()); private C c; public void setC(C c) { this.c = c; } public void init() { log.info("init"); } public void destroy() { log.info("destroy"); } public void doSomething() { c.doSomething(); } } Удобство Spring в том, что он: 1) позволяет декларативно описать, кто кого и как должен вызвать, что с какими параметрами должно быть инициализировано - но тут реализация HiveMind может быть даже более изящна 2) подключить готовые модули, например, для доступа к БД и т.д - вот тут равных Spring'у нет Рассмотрим последнее на примере задействования технологии JMX. Пусть в процессе работы приложения обслуживающий персонал должен вызывать зачем-то метод A.doSomething(). Мы описываем класс A как implements AMBean, последний выглядит так: public interface AMBean { public void doSomething(); } Теперь исправляем beans.xml: <beans> <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"/> <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter"> <property name="beans"> <map> <entry key="bean:name=A" value-ref="a"/> </map> </property> <property name="assembler"> <bean class="org.springframework.jmx.export.assembler.SimpleReflectiveMBeanInfoAssembler"/> </property> <property name="server" ref="mbeanServer"/> </bean> <bean id="myBean" class="MyBean"/> <bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean"> <property name="objectName" value="connector:name=rmiConnector"/> <property name="serviceUrl" value="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"/> <property name="threaded" value="true"/> <property name="daemon" value="true"/> <property name="server"> <ref local="mbeanServer"/> </property> </bean> <bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"> <property name="port" value="1099"/> </bean> <bean id="a" class="mypackage.A" init-method="init" destroy-method="destroy"> <property name="c" ref="b"/> </bean> <bean id="b" class="mypackage.B" init-method="init" destroy-method="destroy"/> </beans> После запуска приложения запускаем jconsole, подключаемся к service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi без логина/пароля, находим в дереве наш класс и вызываем doSomething Архив с проектом ушел в личку ... Кто скажет, что это не изящно, пусть бросит в меня камень :) Да, похоже я исполнил мечту г-на dlaygovta@ :) Денис, если все это тебе еще интересно, то в качестве оплаты лекции прошу написанное причесать и куда нибудь на f.i. выложить :) >>EP>> А если хочется "FastCGI, темплейтов и прочей радости, а также компилятор >>EP>> в неё с простого PHP-like язычка" - то бишь именно своего велосипеда - >>EP>> то вообще непонятно, что в PHP есть такого, что ты предпочел именно его >>EP>> ... К слову, компиляторов в байт-код JVM с различных функциональных и >>EP>> императивных языков довольно много > > >>>Скорее уж проще самому налабать интерпретатор на той же жабе. > > EP> Свой DSL? Возможно, есть смысл посмотреть в сторону antlr ... > > Посмотрю. > > Кстати о. Какие наиболее простые средства a-la flex/bison сейчас есть в > Java? кажется, именно antlr и есть >>>PHP было выбрано как меньшее из зол. То бишь либо самому делать весь стек, >>>либо не строить из себя идеалиста а просто сделать чтобы хорошо работало. >>>Но я все равно ищу что-то куда свалить. > > EP> :) > EP> Прелесть Java не в языке. Язык средний, в частностях вроде интерфейсов и > EP> анонимных классов лучше предшественника (C++), а в некоторых более > EP> глобальных вопросах (класс String ;) ) просто потрясающий своей > EP> нелогичностью. Хотя привыкнуть можно :) > > Меня String убивает именно тем, что код который на perl том же занимает > несколько символов и понятен -- на Java получается простыня кода :) В Java есть регулярные выражения - не помогут? > EP> Прелесть именно в окружении. В наличии спецификаций, в конкурирующих и > EP> относительно совместимых реализаций этих спецификаций. В количестве > EP> библиотек (один jakarta.apache.org чего стоит). В средствах сборки типа > EP> ant/maven. В неплохих IDE вроде Eclipse и IDEA, хотя, конечно, для > EP> любителей vim/emacs это не аргумент :) > > Другая проблема -- в отличии от perl, где фактически все в одной коробке, > Java имеет больший порог вхождения чтобы знать какой из модулей наиболее > применим для данной задачи. Именно из-за конкуренции. Есть такая беда :) Многие "левые" решения имеют тенденцию к помещению к коробку, правда, иногда в изуродованном виде, так что удобнее оказывается использовать то, что осталось вне коробки :) Яркий пример - механизмы протоколирования вроде встроенного, log4j и унифицированного commons logging >>>Ну, в жабе в этом смысле все можно сделать красиво, если я правильно >>>понял. Спрятать вообще доступ к SQL в объеты, реализовать для них >>>интерфейсе serializable после чего сделать кэш. Вот во всяких PHP-подобных >>>это уже оказывается куда тяжелее. > > EP> А в Java даже есть готовое вроде JBoss Tree Cache :) > > :) У меня как-то был соблазн к нему подступиться, но потом понял, что узкое место было не здесь ... -- С уважением, Прокопьев Евгений
next prev parent reply other threads:[~2006-10-25 10:43 UTC|newest] Thread overview: 205+ messages / expand[flat|nested] mbox.gz Atom feed top 2006-10-12 22:25 ` [room] ну почему мы такие страшные Sergey Stepanov 2006-10-13 0:02 ` Денис Смирнов 2006-10-14 16:54 ` [room] новички Michael Shigorin 2006-10-14 19:51 ` Денис Смирнов 2006-10-15 18:27 ` [room] комоды Michael Shigorin 2006-10-15 22:46 ` Денис Смирнов 2006-10-16 11:35 ` [room] IA: комоды += mithraen@ Michael Shigorin 2006-10-16 18:22 ` Maxim Tyurin 2006-10-16 19:40 ` [room] IA: комоды += mrkooll@ Michael Shigorin 2006-10-16 18:19 ` [room] новички Maxim Tyurin 2006-10-16 20:14 ` Денис Смирнов 2006-10-16 21:20 ` Michael Shigorin 2006-10-17 8:10 ` Денис Смирнов 2006-10-17 8:20 ` Evgenii Terechkov 2006-10-17 19:21 ` Michael Shigorin 2006-10-18 0:54 ` Evgenii Terechkov 2006-10-18 7:02 ` Michael Shigorin 2006-10-18 8:08 ` Evgenii Terechkov 2006-10-17 20:34 ` Maxim Tyurin 2006-10-18 0:51 ` Evgenii Terechkov 2006-10-18 8:31 ` Maxim Tyurin 2006-10-18 9:24 ` Evgenii Terechkov 2006-10-18 9:33 ` Maxim Tyurin 2006-10-18 10:10 ` Evgenii Terechkov 2006-10-18 10:22 ` Maxim Tyurin 2006-10-18 15:07 ` Evgenii Terechkov 2006-10-18 20:44 ` Michael Shigorin 2006-10-19 5:46 ` Dmytro O. Redchuk 2006-10-19 5:58 ` Evgenii Terechkov 2006-10-19 23:08 ` Michael Shigorin 2006-10-20 3:58 ` Evgenii Terechkov 2006-10-19 23:07 ` [room] whitespace (не язык) Michael Shigorin 2006-10-20 3:46 ` Evgenii Terechkov 2006-10-20 8:16 ` Michael Shigorin 2006-10-20 9:18 ` Maxim Tyurin 2006-10-20 11:46 ` Michael Shigorin 2006-10-20 12:09 ` Maxim Tyurin 2006-10-20 12:23 ` Evgenii Terechkov 2006-10-19 5:55 ` [room] новички Evgenii Terechkov 2006-10-19 23:05 ` Michael Shigorin 2006-10-20 3:56 ` Evgenii Terechkov 2006-10-20 3:57 ` Evgenii Terechkov 2006-10-19 16:01 ` Maxim Tyurin 2006-10-19 15:57 ` Maxim Tyurin 2006-10-19 17:33 ` Evgenii Terechkov 2006-10-19 17:57 ` Maxim Tyurin 2006-10-19 19:52 ` Evgenii Terechkov 2006-10-20 9:15 ` Maxim Tyurin 2006-10-20 12:32 ` Evgenii Terechkov 2006-10-19 18:28 ` Денис Смирнов 2006-10-20 19:44 ` Aleksey Korotkov 2006-10-20 22:02 ` Денис Смирнов 2006-10-21 19:47 ` Aleksey Korotkov 2006-10-21 20:22 ` Денис Смирнов 2006-10-21 22:16 ` Michael Shigorin 2006-10-21 22:45 ` Денис Смирнов 2006-10-22 11:18 ` Michael Shigorin 2006-10-22 21:01 ` Денис Смирнов 2006-10-22 21:20 ` Aleksey Korotkov 2006-10-22 21:28 ` [room] язычки и библиотечки Michael Shigorin 2006-10-23 6:15 ` Eugene Ostapets 2006-10-23 7:36 ` Michael Shigorin 2006-10-23 7:53 ` Eugene Ostapets 2006-10-23 12:21 ` Maxim Tyurin 2006-10-23 12:38 ` Dmitriy L. Kruglikov 2006-10-24 1:48 ` Денис Смирнов 2006-10-24 10:44 ` Maxim Tyurin 2006-10-23 18:21 ` Michael Shigorin 2006-10-23 18:30 ` Eugene Ostapets 2006-10-23 19:18 ` Michael Shigorin 2006-10-23 19:26 ` Eugene Ostapets 2006-10-24 10:35 ` [room] язычки и библиотечки [fin?] Michael Shigorin 2006-10-23 8:10 ` [room] язычки и библиотечки Денис Смирнов 2006-10-23 20:14 ` Aleksey Korotkov 2006-10-24 10:33 ` Michael Shigorin 2006-10-24 22:57 ` Aleksey Korotkov 2006-10-25 10:18 ` Michael Shigorin 2006-10-23 8:24 ` Денис Смирнов 2006-10-23 18:19 ` Michael Shigorin 2006-10-24 1:55 ` Денис Смирнов 2006-10-24 7:03 ` Michael Bochkaryov 2006-10-24 8:54 ` Денис Смирнов 2006-10-24 10:30 ` [room] wackowiki Michael Shigorin 2006-10-24 10:49 ` [room] lustre Eugene Prokopiev 2006-10-24 15:07 ` Michael Shigorin 2006-10-24 16:04 ` [room] wackowiki Денис Смирнов 2006-10-24 16:08 ` Igor Zubkov 2006-10-24 16:47 ` Денис Смирнов 2006-10-24 17:51 ` [room] wackowiki vs mediawiki Igor Zubkov 2006-10-24 19:20 ` Michael Shigorin 2006-10-25 3:47 ` Денис Смирнов 2006-10-24 19:37 ` [room] wackowiki Michael Shigorin 2006-10-25 3:40 ` Денис Смирнов 2006-10-25 10:10 ` Michael Shigorin 2006-10-25 17:13 ` Денис Смирнов 2006-10-25 18:38 ` Michael Shigorin 2006-10-25 21:17 ` Aleksey Korotkov 2006-10-26 21:01 ` Michael Shigorin 2006-10-26 4:36 ` Денис Смирнов 2006-10-28 14:26 ` Michael Shigorin 2006-10-28 16:02 ` Денис Смирнов 2006-10-29 17:44 ` Michael Shigorin 2006-10-29 20:49 ` Денис Смирнов 2006-10-30 7:48 ` Michael Shigorin 2006-10-30 13:32 ` Денис Смирнов 2006-10-30 17:19 ` Igor Zubkov 2006-11-01 9:22 ` Денис Смирнов 2006-11-01 17:11 ` Igor Zubkov 2006-11-01 21:08 ` Денис Смирнов 2006-10-31 9:47 ` Michael Shigorin 2006-11-01 9:20 ` Денис Смирнов 2006-10-31 9:49 ` Michael Shigorin 2006-11-01 9:21 ` Денис Смирнов 2006-10-30 16:59 ` Igor Zubkov 2006-11-01 9:20 ` Денис Смирнов 2006-10-30 16:58 ` Igor Zubkov 2006-10-31 3:16 ` Evgenii Terechkov 2006-10-25 6:47 ` [room] язычки и библиотечки Michael Bochkaryov 2006-10-25 7:16 ` Eugene Prokopiev 2006-10-28 8:18 ` Michael Bochkaryov 2006-10-25 8:35 ` Денис Смирнов 2006-10-25 10:07 ` Michael Shigorin 2006-10-25 17:15 ` Денис Смирнов 2006-10-24 10:28 ` Michael Shigorin 2006-10-24 8:58 ` Eugene Prokopiev 2006-10-24 15:57 ` Денис Смирнов 2006-10-24 19:35 ` [room] java off the rails Michael Shigorin 2006-10-25 3:37 ` Денис Смирнов 2006-10-25 6:21 ` Eugene Prokopiev 2006-10-25 6:39 ` Eugene Prokopiev 2006-10-25 10:05 ` Michael Shigorin 2006-10-25 16:59 ` Денис Смирнов 2006-10-25 6:00 ` [room] язычки и библиотечки Eugene Prokopiev 2006-10-25 8:30 ` Денис Смирнов 2006-10-25 10:43 ` Eugene Prokopiev [this message] 2006-10-25 10:53 ` [room] Лекция по Java Eugene Prokopiev 2006-10-25 16:50 ` Eugene Prokopiev 2006-10-25 18:10 ` Денис Смирнов 2006-10-25 18:34 ` Michael Shigorin 2006-10-26 4:39 ` Денис Смирнов 2006-10-26 8:05 ` Eugene Prokopiev 2007-02-25 21:48 ` Денис Смирнов 2007-02-25 22:10 ` Eugene Prokopiev 2007-02-25 22:20 ` Денис Смирнов 2007-02-25 22:56 ` Eugene Prokopiev 2007-02-26 14:01 ` Денис Смирнов 2006-10-26 7:47 ` Eugene Prokopiev 2007-02-25 22:01 ` Денис Смирнов 2007-02-25 22:52 ` Eugene Prokopiev 2007-02-26 14:05 ` Денис Смирнов 2007-02-26 20:16 ` Eugene Prokopiev 2007-02-26 20:51 ` Денис Смирнов 2007-02-26 5:50 ` Eugene Prokopiev 2007-02-26 14:09 ` Денис Смирнов 2007-02-26 20:07 ` Eugene Prokopiev 2006-10-25 10:45 ` [room] язычки и библиотечки Eugene Prokopiev 2006-10-25 10:03 ` Michael Shigorin 2006-10-25 6:57 ` Michael Bochkaryov 2006-10-25 8:37 ` Денис Смирнов 2006-10-24 10:27 ` Michael Shigorin 2006-10-24 16:01 ` Денис Смирнов 2006-10-24 19:44 ` Michael Shigorin 2006-10-25 3:36 ` Денис Смирнов 2006-10-24 19:44 ` [room] mod_security article (was: язычки и библиотечки) Michael Shigorin 2006-10-23 20:09 ` [room] язычки и библиотечки Aleksey Korotkov 2006-10-24 10:22 ` Michael Shigorin 2006-10-24 23:12 ` Aleksey Korotkov 2006-10-25 10:19 ` Michael Shigorin 2006-10-25 15:46 ` Aleksey Korotkov 2006-10-25 18:39 ` Michael Shigorin 2006-10-25 21:19 ` Aleksey Korotkov 2006-10-23 8:08 ` [room] новички Денис Смирнов 2006-10-23 20:08 ` Aleksey Korotkov 2006-10-24 1:46 ` Денис Смирнов 2006-10-24 10:22 ` [room] г-флейм Michael Shigorin 2006-10-24 10:27 ` Денис Смирнов 2006-10-24 22:44 ` [room] новички Aleksey Korotkov 2006-10-25 3:29 ` Денис Смирнов 2006-10-25 10:00 ` Michael Shigorin 2006-10-25 16:38 ` Денис Смирнов 2006-10-25 18:25 ` Michael Shigorin 2006-10-26 4:14 ` Денис Смирнов 2006-10-25 15:07 ` Aleksey Korotkov 2006-10-25 16:57 ` Денис Смирнов 2006-10-25 21:07 ` Aleksey Korotkov 2006-10-26 4:28 ` Денис Смирнов 2006-10-26 13:39 ` Aleksey Korotkov 2006-10-26 15:10 ` Денис Смирнов 2006-10-25 9:58 ` Michael Shigorin 2006-10-25 15:30 ` Aleksey Korotkov 2006-10-25 18:27 ` [room] смайлЫ Michael Shigorin 2006-10-25 21:14 ` Aleksey Korotkov 2006-10-25 16:35 ` [room] новички Денис Смирнов 2006-10-18 11:11 ` [room] язЫки программирования Michael Shigorin 2006-10-18 11:22 ` Maxim Tyurin 2006-10-18 15:08 ` Evgenii Terechkov 2006-10-18 11:10 ` [room] новички Michael Shigorin 2006-10-18 15:12 ` Evgenii Terechkov 2006-10-19 16:04 ` Maxim Tyurin 2006-10-19 17:19 ` Evgenii Terechkov 2006-10-19 18:00 ` Maxim Tyurin 2006-10-19 18:57 ` Evgenii Terechkov 2006-10-19 23:10 ` Michael Shigorin 2006-10-20 3:53 ` Evgenii Terechkov 2006-10-23 6:59 ` Dmytro O. Redchuk
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=453F3FDC.4030304@stc.donpac.ru \ --to=prokopiev@stc.donpac.ru \ --cc=smoke-room@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Культурный офтопик This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/smoke-room/0 smoke-room/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 smoke-room smoke-room/ http://lore.altlinux.org/smoke-room \ smoke-room@lists.altlinux.org smoke-room@lists.altlinux.ru smoke-room@lists.altlinux.com smoke-room@altlinux.ru smoke-room@altlinux.org smoke-room@altlinux.com public-inbox-index smoke-room Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.smoke-room AGPL code for this site: git clone https://public-inbox.org/public-inbox.git