-неизвестно

 -Поиск по дневнику

Поиск сообщений в ATUM

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.02.2006
Записей:
Комментариев:
Написано: 1139




Мечты составляют половину реальности....(Жозеф ЖУБЕР) В этом мире все когда-то было мечтой...

Телефон

Вторник, 10 Апреля 2012 г. 11:40 + в цитатник
package vkclient.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
*
* @author Atum
*/
public class ContactRegExp {

  
  
  public static class ValuesComparator implements Comparator {

    public int compare(Object o1, Object o2) {
      Map.Entry e1 = (Map.Entry) o1;
      Map.Entry e2 = (Map.Entry) o2;
      Comparable c1 = (Comparable) e1.getValue();
      Comparable c2 = (Comparable) e2.getValue();
      return c2.compareTo(c1);
    }
  }

  public static class KeysComparator implements Comparator {

    public int compare(Object o1, Object o2) {
      Map.Entry e1 = (Map.Entry) o1;
      Map.Entry e2 = (Map.Entry) o2;
      Comparable c1 = (Comparable) e1.getKey();
      Comparable c2 = (Comparable) e2.getKey();
      return c1.compareTo(c2);
    }
  }
  public static void main(String[] args) throws FileNotFoundException, IOException {
    
     ArrayList<String> list = new ArrayList<String>();
     ArrayList<String> call = new ArrayList<String>();    
    // чтение файла с параметрами номер - имя
    String str = new String();
    File contact = new File("C:/info.txt");

    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(contact), "Cp1251"));
    StringBuilder sb = new StringBuilder();
    int len;
    char[] cBuf = new char[1024];
    while ((len = in.read(cBuf, 0, 1024)) != -1) {
      sb.append(cBuf, 0, len);
    }
    String[] arr = sb.toString().split("\n");
    String[] titles = arr[0].split(";");
    for (int j = 1; j < arr.length; j++) {
      String[] mcontact = arr[j].split(";");
      String name = new String();
      for (int i = 0; i < titles.length; i++) {
        if (mcontact[i].length() > 3) {
          name += mcontact[i];
        }
      }
      list.add(name.replaceAll("\"", " ").trim());
    }
    
   
    
    // Количество звонков по списку
    TreeMap<String, Integer> hm = new TreeMap<String, Integer>();
    File file = new File("C:/1.HTML");
    StringBuilder builder = new StringBuilder();
    in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
    Pattern p = Pattern.compile(">([0-9]+)<");
    while ((str = in.readLine()) != null) {
      Matcher m = p.matcher(str);
      while (m.find()) {
        String phone = m.group();
        phone = phone.substring(1, phone.length() - 1);
        if (phone.length() > 6) {
          int value = 1;
          if (hm.containsKey(phone)) {
            value = hm.get(phone);
            value++;
            hm.put(phone, value);
          } else {
            hm.put(phone, value);
          }
        }
      }

      builder.append(str).append("\n");
    }
    List entrylist = new ArrayList(hm.entrySet());
    Collections.sort(entrylist, new ValuesComparator());
    for (Object entry : entrylist) {
      String par = entry.toString();
      call.add(par);
    }
    for (String object : call) {
      String[] marr = object.split("=");
      System.out.print(marr[1] +" : ");
      for (String string : list) {
      if(string.contains(marr[0])){
        System.out.print(string +" ; ");
      } 
      }
      System.out.println("("+marr[0] + " )");
    }
    
     System.out.println("");
     System.out.println("Всего номеров в записной книжке : " + list.size());
     System.out.println("Количество звонков на номера  : " + entrylist.size());
  }
}

* This source code was highlighted with Source Code Highlighter.

Метки:  

multipart form-data action Upload

Пятница, 06 Апреля 2012 г. 15:47 + в цитатник
<%@ page contentType="text/html; charset=windows-1251" %>
<html>
<head>
<title>
Upload_page
</title>
</head>
<body bgcolor="#c0c0c0">
<h1>
YO YO YO YO !!!!!!
</h1>
  <form enctype="multipart/form-data" action="Upload_result.jsp" method='post'>
   <table>
    <tr>
     <td>Выбрать файл:</td>
     <td>
      <input type='file' name="UPLOAD_FILE_FORM_NAME"/>
     </td>
    </tr>
    <tr>
     <td>
      <input type='submit' value="Загрузить"/>
     </td>
    </tr>
   </table>
  </form>
</body>
</html>


* This source code was highlighted with Source Code Highlighter.



ВТОРАЯ ЧАСТЬ




<%@ page contentType="text/html; charset=windows-1251" %>
<%@page import = "java.net.*"%>
<%@page import = "java.util.*"%>
<%@page import = "javax.servlet.*"%>
<%@page import = "javax.servlet.http.*"%>
<%@page import = "java.io.*"%>
<%@page import = "org.apache.commons.fileupload.*"%>
<%@page import = "org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<html>
<head>
<title>
Upload_result
</title>
</head>
<body bgcolor="#c0c0c0">
<h1>
JBuilder Generated JSP
</h1>
<%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
   if (isMultipart) {
    %> Мультіпарт <%
   } else {
    %> Не мультіпарт <%
   }
 try {
  DiskFileUpload upload = new DiskFileUpload();
  List items = upload.parseRequest(request);
  Iterator iter = items.iterator();
  while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next(); %>
  Файл для завантаження - <%=item.getName() %>
<%
  //String FItemName = replace(item.getName());
  String FItemName;
  if (item.getName() == null) FItemName = null;
  FItemName = item.getName();
  int poz = -1;
  while ((poz = FItemName.indexOf("\\")) != -1) {
   FItemName = FItemName.substring(poz + 1);
  }
  while ((poz = FItemName.indexOf("
/")) != -1) {
   FItemName = FItemName.substring(poz + 1);
  }
  File tosave = new File(getServletContext().getRealPath("
/"), FItemName);
  item.write(tosave);
  try {
   URL ur = new URL("
ftp://root:stalker@192.168.3.11/packages/" + FItemName);
       URLConnection urlc = ur.openConnection();
       //out.println("Connected");
       BufferedInputStream in = new BufferedInputStream(new FileInputStream(tosave));
       try {
        BufferedOutputStream z = new BufferedOutputStream(urlc.getOutputStream());
        try {
         //out.println("Buffered");
         int by;
         while ( (by = in.read()) != -1) {
          z.write(by);
         }

        } finally {
         z.close();
        }
       } finally {
        in.close();
       } 
  } catch (Exception ex) {}
  }
 } catch (Exception ex){
 %> ПОМИЛКА: <%= ex.getMessage() %>
<%
 }
%>
</body>
</html>

* This source code was highlighted with Source Code Highlighter.

регулярные выражения regexp

Среда, 04 Апреля 2012 г. 20:13 + в цитатник
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <div id="twitter"></div>  
    
    <script>
      //http://api.twitter.com/1/statuses/user_timeline.json?screen_name=microsoft&include_rts=1
      //http://twitter.com/statuses/user_timeline/XXX.rss

   function twitterWrapper (text) {
      var rega = /(^|\s)@(\w+)/g;
      var regb = /(^|\s)#(\S+)/g;
      var regc = /(\b(https?|ftp|file):\/\/([-A-Z0-9+&@#%?=~_|!:,.;]*)([-A-Z0-9+&@#%?\/=~_|!:,.;]*)[-A-Z0-9+&@#\/%=~_|])/ig;
      var tweet = text;
        tweet = tweet.replace(regc, "<a href='$1' target='_blank'>$1</a>");
        tweet = tweet.replace(rega, "$1<a href=\"http://www.twitter.com/$2\">@$2</a>");
        tweet = tweet.replace(regb, "$1<a href=\"http://search.twitter.com/search?q=%23$2\">#$2</a>");
       
       return tweet;
   };
   
      
      var twname = 'edimdoma';//'isalnikov';//'ntvru';//"OPushkina"//;"ponedelnikntv";
      $.ajax({
        url: 'https://api.twitter.com/1/statuses/user_timeline/'+twname+'.json?callback=?',
        data :{'include_entities':true ,'include_rts':true},
        dataType: 'jsonp',
        success: function(data){
          try{
           //  console.log(data);
            var el = document.getElementById('twitter');
            for(var i =0;i<data.length; i++){
              var text =  data[i].text;
              var username =data[i].user.name;
              var screen_name = '@'+data[i].user.screen_name;
              var d = new Date(data[i].created_at);
              
              var fromid = '<b>'+username+'</b> '+twitterWrapper(screen_name); 
             //  console.log(Date.parseExact(new Date(),'yyyy-MM-dd'));
              var phref = twitterWrapper(text);
              el.innerHTML=el.innerHTML+ fromid +'<br/>'+phref +'<br/><br/>';
            }
          }catch(e){
            console.log(e.name);
          }
              
        }
      })
      
    </script>    

* This source code was highlighted with Source Code Highlighter.

Метки:  

форма с двумя input text

Пятница, 23 Марта 2012 г. 17:12 + в цитатник
чтобы отправить по Enter без кнопки submit


<html>
<body>

<%
  String day = request.getParameter("day");
  out.println("day = "+ day);
  String year = request.getParameter("year");
  out.println("year = " + year);
%> 
<script>
function send(ev)
{
  
  console.log(ev.keyCode); 
  if (ev.keyCode==13)
  {
   document.listForm.submit();
  }
}
</script>  
<form name="listForm" method="POST" action="8_1.jsp" >
First name: <input type="text" name="day" value="<%=day%>" onkeypress="send(event)"/><br />
Last name: <input type="text" name="year" value="<%=year%>" onkeypress="send(event)"/><br />
<input type="submit" name="submit" value="submit" style="display:none"/>
<!--input type="submit" name=" send " value="submit"/-->
</form>

<p>Click the "Submit" button and the input will be sent to a page on the server called "form_action.asp".</p>

</body>
</html>


* This source code was highlighted with Source Code Highlighter.

Метки:  

...

Понедельник, 12 Марта 2012 г. 11:51 + в цитатник
Один не разберет, чем пахнут розы.
Другой из горьких трав добудет мед.
Кому-то мелочь дашь - навек запомнит,
Кому-то жизнь спасешь - а он и не поймет…

Канеман и Тверски

Воскресенье, 11 Марта 2012 г. 15:03 + в цитатник
Канеман и Тверски

Метки:  

Томас Фридманxn

Воскресенье, 11 Марта 2012 г. 15:01 + в цитатник
Томас Фридман

Метки:  

Рассказ

Воскресенье, 11 Марта 2012 г. 13:58 + в цитатник
Рассказ

Это произошло в одну из многочисленных контр- террористических операций на Кавказе …
На отряд успешно вошел в один из аулов , который недавно покинули боевики ,и перед нами поставили задачу вывести из аула все мирное население . В основном это были пожилые женщины , старики и дети …
После непродолжительных приготовлений все было готовы и мы могли выступить …
Все это время вокруг нас крутился местный пес – беспородная дворовая собака с черным ухом и желтой левой лапой … он деловито осматривал колонну , обнюхивал кто в нее входил и принимал активное участие казалось во всех делах – деловито лая … после чело перебегал к другой кучки людей , подставлял голову чтобы его погладили , снова обнюхивал всех , лаял … и бежал дальше… характер у него был озорной и дружественный … казалось эта собака всегда была с нами , была нашей душой …
Из Аула было две дороги … одна вела высоко в горы – и по ней ушли боевики, вторая спускалась к ущелью … с горной рекой … ни одна из них нам не подходила… Было принято решение двигаться через поле …по направлению к лесу … а дальше по руслу реки к нашим позициям ….

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

В тот самый момент как мы подошли к границе поля …. Наш черноухий друг вырвался вперед …. С лаем пронесся по тому месту куда мы собрались пойти остановился на мгновение …повернулся к нам как бы прощаясь … взвыл …и этот самый момент раздался взрыв … только после этого мы поняли … он предупреждал нас что поле заминировано …. Но видя то что мы не понимаем его пожертвовал своей жизнью рани своих новых друзей …

Метки:  

Идея

Четверг, 01 Марта 2012 г. 18:38 + в цитатник
Идея создать новую java - в heap хранятся только адреса на диск

объекты хранятся на диске !

быстрый доступ к объектам ...

плюс требуется API для работы с объектами на диске ...

простые операции !

Метки:  

ajax

Четверг, 01 Марта 2012 г. 14:50 + в цитатник
Иногда возникает необходимость подгрузить новости

Для этого на страницу надо добавить кнопку Ещё


(На примере загрузки видео)

На странице размещаем код кнопки и javascript который будет вызывать загрузку новостей :

по указанному url будет код который будет генерировать html для вставки его а тег ul


var url = "/rest/video/svideo.jsp";


Важные теги : id="vlcontainer1"  id="encore"


 List<EntityVideo> vlist = Collections.EMPTY_LIST;


<ul id="vlcontainer1">
for(EntityVideo v : vlist)
<li><a href=""><img src="<%= IMG_HOST + img %>" width="172" height="129" alt="<%= </a></li>
</ul>

<div class="
more3" style="clear: both; margin: 0 auto;"><a href="javascript:void(0);" id="encore"><span>Показать ещё</span></a></div>


<script>
var vPage = 1; //encodeURIComponent
var offset = <%=offset%>;
 $("
#encore").click(function() {
  var button = $(this);
  var url = "
/rest/video/svideo.jsp";
     container1 = $("
#vlcontainer1");
     $.get(url, {"
page" : vPage + 1, "offset": offset}, function(data) {
      vPage ++;
      container1.append(data);
      val = jQuery.trim(data);
      if(!(val && val.length > 0) || val.indexOf("
<!-- END OF LIST -->") >= 0) button.hide();
    });
 }); 
</script>


в '''$.get''' указываем необходимые параметры :

смещения, id новостей , ключевые теги итд.


Принимающая сторона ! (по url )

'''Важно ! указать что прием идет по UTF-8 ''' 

<code>
<%request.setCharacterEncoding("
UTF-8");%>
<%@ include file="
/includes/JspPageTop.jsp" %>
<%@ page import="
ru.isalnikov.*" %>
<%@ page contentType="
text/html; charset=Windows-1251" %>
</code>



int it = 0;
String style = "
style=\"clear: both\"";
for(EntityVideo v : vlist) {

<li><a href="">
<img src="" width="172" height="129" alt="" title=""/>
</a></li>

}
 if(vlist.size() < PAGE_SIZE) out.println("<!-- END OF LIST -->"); 



* This source code was highlighted with Source Code Highlighter.

Метки:  

jQuery .keyup() delay

Вторник, 28 Февраля 2012 г. 18:14 + в цитатник

var globalTimeout = null;
$('#id').keyup(function(){
if(globalTimeout != null) clearTimeout(globalTimeout);
globalTimeout =setTimeout(SearchFunc,200);
}
function SearchFunc(){
globalTimeout = null;
//ajax code
}

Метки:  

Java step by step

Пятница, 24 Февраля 2012 г. 18:14 + в цитатник

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

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

некоторые дискуссии в форуме меня убедили в обратном. Ладно, я понимаю, что существуют разработчики, которые не знают

элементарных вещей в силу того, что заниматься Java они начали недавно. Всё когда-то узнается в первый раз, и эти

элементарные вещи – не исключение.





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

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

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

приблизительно следующее: "Категорически не согласен! Я пишу на Java уже полгода, написал то-то и то-то, но до сих пор не

знаю, как делать эту элементарную вещь!"





К счастью, таких воинствующих немного. Однако число разработчиков, не знакомых с элементарными вещами, растет

угрожающими темпами. Именно поэтому и появилась эта статья.





* * *





Основы





Начнем вот с чего. Что такое класс, надеюсь, знают все. Если нет – прошу сюда:

Наследование как явление
. Я там достаточно подробно останавливался на том, что такое класс с точки зрения языка. Тут

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





Кто-то может задать вопрос – что такое виртуальная машина? Отвечаю. Java – язык интерпретируемый. Что

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

Этим достигается переносимость – без перекомпиляции код работает на любой платформе, где есть соответствующий интерпретатор.

Этот интерпретатор называют еще виртуальной машиной, хотя понятие "виртуальная машина" более емкое. Я бы предпочел считать,

что виртуальная машина – это система, обеспечивающая исполнение Java-кода.





Пойдем дальше. Класс описывается в своем файле, который имеет расширение .java. Это – ИСХОДНЫЙ КОД. Для

исполнения его необходимо скомпилировать. (Это я говорю специально для тех, кто пытается запустить .java-файл). После

компиляции (успешной!) появляется файл с расширением .class и тем же именем, что и файл .java. (Внутренние

классы и прочие исключения мы пока во внимание не принимаем.) Где этот класс будет лежать – мы разберемся позже.





Теперь задайте себе вопрос. А сколько классов можно держать рядом и не запутаться? Десять? Сто? Тысячу? Тысяча исходников

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

исходным кодом. А в прошлом было около трех с половиной тысяч. И в этом коде надо разбираться, причем хорошо. Что делать?





Ответ напрашивается. Структурировать их. Разнести по куче директорий. Создать дерево директорий, в котором легко

ориентироваться. И именно это и сделано в Java. Мы подходим к такому понятию как пакет.





Пакеты иерархичны. Иерархия описывается через '.', потому точка не может быть в имени пакета. Пакет, к которому

принадлежит класс, описывается в самом начале исходного файла. Если это описание есть, оно должно быть первым (раньше него

могут быть только комментарии):





package ru.skipy.web;




Директива, приведенная выше, означает, что класс принадлежит к пакету ru.skipy.web. Для обеспечения уникальности

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

домен skipy.ru, то имена всех моих пакетов должны начинаться с ru.skipy. Но это не требование, а, скорее,

джентельментское соглашение.





Иерархия пакетов может не совпадать с физической иерархией исходников. Но она ОБЯЗАНА совпадать с физической иерархией

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

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





Имя пакета является частью полного имени класса. И потому появляется возможность создавать классы с одним именем, но в

разных пакетах. Классический пример – java.awt.List и java.util.List. Первый из них – компонента

пользовательского интерфейса (список элементов), второй – интерфейс для работы с упорядоченными списками.





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

при упоминании List он зайдет в тупик. Выходов тут два. Первый, более предпочтительный – импортировать

класс:





import java.util.List;




В этом случае компилятор будет знать, что все ссылки на List в коде – это, на самом деле ссылки на

java.util.List
.





Можно импортировать и весь пакет java.util целиком:





import java.util.*;




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

разработки настраиваются так, что при импорте более чем n (как правило, 5) классов импорты отдельных классов заменяются на

импорт пакета. Это, возможно, влияет на скорость компиляции (класс надо искать во всех импортированных целиком пакетах), но

настолько незначительно, что во внимание принимать это не следует. Кстати, если импортировать пакет или класс, но не

использовать его, на байткод (скомпилированный код) это не повлияет!





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

видно, какой. И во-вторых, если одновременно импортировать два пакета, в которых будут классы с одинаковым именем, то при

использовании таких классов (обратите внимание – ТОЛЬКО при использовании; простой импорт не вызовет проблем!) компилятор

опять зайдет в тупик, будучи не в состоянии определить, какой из классов нужен – из пакета java.awt или из

java.util.





Вот тут спасает факт, о котором я упомянул – пакет является частью имени класса. Это означает, что тот самый

java.util.List можно так и использовать:





java.util.List list = new ArrayList();




И в этом случае у компилятора проблем не возникнет. Разумеется, java.awt.List, в случае необходимости его

использования, тоже придется идентифицировать по полному имени.





Более того, при использовании полного имени можно вообще не импортировать классы. Однако, я не рекомендую этого делать

по соображением читаемости. Представьте себе наличие в тексте кучи префиксов типа

com.sun.org.apache.xalan.internal.xsltc.trax – этот текст будет невозможно читать. Между тем, пакет абсолютно

реальный, из jdk5.0. И, кстати, не самый длинный.





Как я уже говорил, иерархия исходников может не совпадать с иерархией пакетов. Однако я очень рекомендую поддерживать их

в соответствии. Собственно, все современные среды разработки делают это сами. Но знать об этом надо.





А зачем вообще нужно использовать пакеты? И нельзя ли обойтись без них? Теоретически – да, можно. Практически –

сложно. Ибо какой-либо ваш класс по имени может совпасть с классом из импортируемого пакета. В этом случае ВАШ класс

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

вместе с пакетом, – не сможет ввиду наличия отсутствия вышеозначенного.





Итак, с пакетами покончили. Перейдем дальше.





Представьте себе законченный набор классов, реализующий некую функциональность. Например, журналирование (logging).

У этого набора есть ядро и куча интерфейсов, которые дают возможность его использовать. И называется это набор... правильно,

библиотека. Как правило, все классы собраны в один файл с расширением jar (Java ARchive). Вопрос. Как именно их

использовать?





Казалось бы, можно просто импортировать нужные классы или пакеты и использовать их. И это действительно так. Тогда

второй вопрос. Как компилятор узнает, откуда именно брать классы? В момент компиляции ему нужны классы, чтобы проверить

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

Как ему это сказать?





Кстати, точно тот же вопрос касается и кода, написанного Вами. Интерпретатор точно так же должен знать, где его брать.





Существует несколько способов. Однако, практика показывает, что подавляющее большинство разработчиков, особенно

начинающих, имеют об этих способах весьма смутное представление. Более того, зачастую этим незнанием гордятся! Этого я

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

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





Итак,





Указание интерпретатору, где искать классы





Интерпретатору нужно знать все места, где он может найти классы. Что является таким местом? Директория и/или

библиотека – jar-файл. Прошу обратить особое внимание – именно файл. Иначе говоря, если у вас файл

javaee.jar
находится в директории E:\java\lib\ – интерпретатору нужен полный путь к файлу,

а именно – E:\java\lib\javaee.jar. Простого указания директории НЕДОСТАТОЧНО!





Как я уже говорил, существует несколько способов указания интерпретатору на источники классов. Они рассмотренны ниже.

(Поиска классов в сервлет-контейнерах и серверах приложений я не касаюсь, это выходит за рамки статьи для начинающих.)





Способ 1. Переменная окружения CLASSPATH





Способ прост. Заводится переменная окружения CLASSPATH, и в ней через разделитель (';' для Win, ':' для *NIX)

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

директория – это точка, в которой лежит КОРЕНЬ всех скомпилированных классов. Т.е., если классы из пакета

mypackage.test компилировались в директорию c:\myproject\classes, то в CLASSPATH

должна фигурировать именно c:\myproject\classes, а не c:\myproject\classes\mypackage и не

c:\myproject\classes\mypackage\test.





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

подключить так. Да и то с оговорками, см. ниже. А как быть с текущими классами? С теми, которые я как раз и пишу? Их тоже

надо подключать. Включить все? Нереально, у меня больше 20 проектов, за деревьями не будет видно леса, если для каждого

случая в CLASSPATH указать полный путь. Указывать относительный? Он тоже разный. Честно сказать, приемлемого

решения я не нашел.





Второе. Допустим, я хочу подключить библиотеки (jar-файлы) через CLASSPATH. Вопрос. А сколько их у меня?

Поверхностный поиск по диску дает... более 1550! Ладно, львиная доля из них – от приложений. Но тех, которые использую я

сам, прямо или опосредованно, более 100 совершенно точно. Что будет, если в CLASSPATH прописать их все? Хватит

ли размера памяти, выделяемого под переменную окружения операционкой? А если все приложения сделают то же самое?





Третье, самое неприятное. У меня стоят Log4J версий 1.2.8 и 1.3.0, Velocity 1.2, 1.3 и 1.4, Hibernate 2.1 и 3.0, Servlet

2.2, 2.3, 2.4 и JSP 1.1, 1.2 и 2.0, JDBC-MySQL трех различных версий, несчетное множество XML-парсеров и т.д. и т.п. В одних

проектах я использую одни, в других – другие. Если я включу их все в CLASSPATH – компилятор будет ВСЕГДА

использовать первый найденный класс в порядке перечисления библиотек. Какой версии? Не знаю. Но в любом случае – одной и той

же. А мне нужны разные. И если первые два момента можно было бы как-то пережить, то этот – нет.





Потому – я никогда не устанавливаю у себя переменную окружения CLASSPATH. Тем более, что существует...





Способ 2. Указание ключа -classpath интерпретатору (компилятору)





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

источники кода, из которых он этот код должен брать. Не больше и не меньше.





Пример. Допустим, у меня в проектной директории есть поддиректория classes, в которой находятся

скомпилированные классы, и поддиректория lib, в которой лежат библиотеки velocity-1.4.jar и

log4j-1.2.8.jar. Тогда командная строка для запуска моего класса ru.skipy.myproject.Main будет

выглядеть так:





java -classpath ./classes;./lib/velocity-1.4.jar;./lib/log4j-1.2.8.jar ru.skipy.myproject.Main




По пунктам: я указываю интерпретатору, что классы надо искать в директории ./classes ('.' – текущая

директория), в библиотеке ./lib/velocity-1.4.jar и в библиотеке ./lib/log4j-1.2.8.jar, в порядке

их перечисления.





Если же мне не нужно использовать внешние библиотеки, то командная строка превращается в следующую:





java -classpath ./classes ru.skipy.myproject.Main




Обратите внимание на -classpath ./classes. Я не знаю, откуда в некоторых книгах взялась конструкция

java ru.skipy.myproject.Main, без указания classpath. Я не поленился, поставил себе jdk1.1.8, но и там

classpath надо указывать. Именно отсутствие classpath в параметрах интерпретатора является источником большого количества

проблем. Впрочем, об этом ниже.





Справедливости ради нужно упомянуть и третий способ подключения библиотек:





Способ 3. Директория <JRE_INSTALLATION_DIRECTORY>/lib/ext





Способ, пожалуй, самый простой. Но, должен признать, он пригоден только для подключения jar-файлов. Файл кладется в

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





Недостаток очевиден. У меня в системе, к примеру, стоит 6 виртуальных машин, не считая тех, что шли с приложениями

вместе: 1.1.8 (для которой этот способ вообще не работает), 1.3.1, 1.4.2, 1.5.0, JRockIt 1.4.2, JRockIt 1.5.0. Библиотеку

придется класть КАЖДОЙ. Вопрос. Зачем?





Естественно, у этого метода есть и достоинства. Он хорош, когда нужно что-то поставить на клиентскую машину, где есть

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

кодом, подгруженным через classpath и кодом, загруженным из <JRE_INSTALLATION_DIRECTORY>/lib/ext. Но это уже тонкости,

выходящие за рамки этой статьи.





А что будет, если не указать таки classpath, ни в качестве переменной окружения, ни в качестве параметра интерпретатору?

А будет всем известная ошибка. Вопрос о том, что это такое, появляется не реже раза в неделю. Что в числе прочего и побудило

меня написать эту статью. Ошибка эта называется ...





Exception in thread "main" java.lang.NoClassDefFoundError: ...





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

не найдено. Под определением класса виртуальная машина понимает его байткод. Т.е. она просто не смогла найти нужный файл.





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

test.Test. Одна из классических разновидностей действия: скомпилировать класс, потом дойти до директории,

где лежит непосредственно Test.class и запустить его оттуда:





javac Test.java

@rem file ./test/Test.class created

cd test

java -classpath . Test




Ошибка при этом будет такой:





Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: test/Test)

at java.lang.ClassLoader.defineClass0(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:539)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)

at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)

at java.net.URLClassLoader.access$100(URLClassLoader.java:55)

at java.net.URLClassLoader$1.run(URLClassLoader.java:194)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:187)

at java.lang.ClassLoader.loadClass(ClassLoader.java:289)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)

at java.lang.ClassLoader.loadClass(ClassLoader.java:235)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)




Что это означает? А означает это вот что. Виртуальная машина нашла класс, который я пытаюсь запустить – Test.

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

внимание – по ПОЛНОМУ имени Test. Машина нашла его. Но класс-то на самом деле – test.Test. Именно

об этом она и сообщает – wrong name: test/Test





Еще одна ошибка, вызывающая появление сообщения Exception in thread "main" java.lang.NoClassDefFoundError:

имя класса при запуске пишут вместе с расширением файла .class. Естественным образом виртуальная машина не

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

файл с именем, заканчивающимся на class.class





Для продвинутых разработчиков сущестует еще один способ получить java.lang.NoClassDefFoundError. Заключается

он в следующем: приложение, использующее стороннюю библиотеку, собирается в jar-файл и запускается командой java -jar

<имя jar-файла>
, после чего и появляется данная ошибка. Происходит это по следующей причине: при запуске

приложения именно таким образом, с ключом интерпретатора -jar, в classpath включается один единственный файл –

тот самый, который указывается в командной строке. Все остальные библиотеки – описаные в переменной CLASSPATH,

указаные через ключ -classpath, – все они ИГНОРИРУЮТСЯ. Единственный способ этого избежать (и найден он – вот

ведь поразительный факт! – опять-таки в документации) – указать в файле manifest.mf атрибут Class-Path – список

относительных путей (обращаю особое внимание – относительных, относительно этой библиотки!) к необходимым

библиотекам. Разделяются эти пути пробелами. Естественно, при этом работает и обычный вариант – указывать в явном виде

classpath, включая туда все библиотеки, и имя исполняемого класса.





Еще один тип ошибок – при компиляции выдается сообщение "Can't resolve symbol ..." с указанием на точку в коде,

где объявлена переменная, вернее, на тип этой переменной. Причина та же – компилятор не может найти класс, указанный как

тип этой переменной по причине отсутствия этого класса в classpath.





Возможно, есть еще какие-нибудь характерные ошибки, связанные с classpath. Если вспомню – допишу.





Ну и напоследок. Простейшее упражнение на закрепление пройденного материала.





Пишем программу Hello, World!





Шаг 1. Создание структуры директорий





Единственное допущение – мы находимся в директории-корне проекта HelloWorld.





mkdir src

mkdir classes

cd src

mkdir mypackage

cd ..




Что мы сделали. Создали директорию для исходных файлов – src. Создали директорию для скомпилированных файлов

classes. Создали внутри src директорию, соответствующую имени пакета – mypackage.





Шаг 2. Создание исходного файла





В директории src/mypackage создаем исходный файл – HelloWorld.java:





package mypackage;



public class HelloWorld{



public static void main(String args[]){

System.out.println("Hello, World!");

}



}




Шаг 3. Компиляция





Обратите внимание, в командной строке мы находимся в корне проекта! Команда компиляции выгдядит так:





javac -classpath ./classes -d ./classes src/mypackage/HelloWorld.java




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

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





В результате компиляции в директории ./classes создается поддиректория mypackage, в которую

помещается файл HelloWorld.class





Шаг 4. Выполнение программы





java -classpath ./classes mypackage.HelloWorld




Еще раз обращаю особое внимание. Имя класса указывается вместе с пакетом! И указывается именно имя класса, а не файла!

Т.е. .class в конце добавлять не надо.





Специально распишу логику поиска файла с байткодом:





  1. Все точки в полном имени класса заменяются на разделители – '/'


  2. К полученной строке приписывается .class


  3. Файл ищется в библиотеках и указанных директориях со скомпилированными классами в порядке их указания. Файл ищется

    по полученному на прошлом шаге относительному пути.






Т.е. в нашем случае имя класса mypackage.HelloWorld преобразуется в относительный путь к файлу

mypackage/HelloWorld.class. Виртуальная машина находит файл по данному относительному пути в директории

./classes.





Шаг 5. Создание архива (jar-файла)





Собираем архив, который можно запускать с помощью команды java -jar <имя архива>. Для начала

создаем файл manifest.mf, в котором будет указан главный исполняемый класс:





Manifest-Version: 1.0

Created-By: 1.6.0_19 (Sun Microsystems Inc.)

Main-Class: mypackage.HelloWorld





Важный момент! После последней строки – в данном случае это указание

Main-Class
должен быть перевод строки. Если его не будет – последняя

строка не будет прочитана. Скорее всего, это ошибка в реализации jar. Как бы то ни

было – если в данном примере вы не поставите в конце перевод строки, основной класс найден не будет и

при запуске вы получите ошибку :





Failed to load Main-Class manifest attribute from helloWorld.jar




Спасибо разработчику из Санкт-Петербурга Алексею Яблокову за указание на этот момент!





Итак, manifest.mf создали, перевод строки не забыли. Идем дальше. Выполняем команду по сборке

архива:





jar cvmf manifest.mf helloWorld.jar -C ./classes mypackage




Специально подчеркиваю – порядок ключей важен. С каком порядке стоят m и f

– в таком же порядке должны стоять имена manifest- и jar- файлов

соответственно. manifest.mf – это имя файла, в котором мы указали исполняемый класс. В

принципе, этот файл может называться как угодно, как правило, имя такое (так этот файл называется внутри

jar-архива, и это имя уже фиксировано). helloWorld.jar – имя создаваемого архива.

Конструкция "-C ./classes mypackage" означает "сменить директорию

на classes и взять там директорию mypackage" (напоминаю еще раз – все команды

выполняются из корневой директории проекта).





В результате должен быть создан файл helloWorld.jar со следующей структурой:





META-INF/MANIFEST.MF

mypackage/HelloWorld.class




Шаг 6. Выполнение программы запуском jar-файла





Выполняем следующую команду:





java -jar helloWorld.jar




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

путь, например, так:





java -jar c:\myprojects\HelloWorld\helloWorld.jar




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

запустили приложение на выполнение. При использовании полного пути она может быть любой, это иногда

бывает полезно.





В результате выполнения этой команды, как и на шаге 4, в консоль будет выведена строка

"Hello, World!"





Упражнение окончено.





Еще один важный момент!. При запуске приложения через jar-файл, командой java -jar

...
, в classpath попадает только этот jar-файл. Никакие попытки указать ключ

-classpath
ни к чему не приведут. Однако не всё так страшно, необходимые библиотеки указать можно.

Для этого необходимо в манифесте (manifest.mf) указать относительные пути к библиотекам. Т.е., если нам надо

подключить, например, библиотеки velocity-1.4.jar и log4j-1.2.8.jar, лежащие в

директории lib рядом с нашим jar-файлом, то в манифест надо добавить строчку:





Manifest-Version: 1.0

Created-By: 1.6.0_19 (Sun Microsystems Inc.)

Main-Class: mypackage.HelloWorld

Class-Path: lib/velocity-1.4.jar lib/log4j-1.2.8.jar





Указываются пути относительно jar-файла, разделитель – пробел. И в этом случае в classpath

будет включен не только наш jar-файл, но и обе указанные библиотеки.


Метки:  

chkconfig

Пятница, 24 Февраля 2012 г. 16:15 + в цитатник
: Инструментальное средство chkconfig, предназначенное для управления сценариями запуска SysV, предоставляет пользователю низкоуровневый интерфейс. Вся информация, необходимая для выполнения задачи, задается в одной командной строке. Утилита спксоп^двызывается следующим образом:
chkconfig <-list | -add I -del> [имя] chkconfig [-level уровни] имя [on | of f| reset)
Первый вариант вызова используется тогда, когда необходимо получить информацию о текущей конфигурации (опция -list), добавить или удалить ссылки из каталога ссылок SysV (соответственно опции -add и -del). Второй вариант вызова позволяет разрешить или запретить сценарий на некоторых (или на всех) уровнях выполнения (эта задача решается путем переименования ссылки SysV). Приведенные ниже примеры иллюстрируют использование данной команды.

Предположим, что вы хотите получить подробную информацию о конфигурации Postfix. Если вы знаете, что стартовый сценарий Postfix называется postfix, вы можете задать следующую команду:
# chkconfig -list postfix
postfix 0:off l:off 2: on 3:on 4: on 5: on 6: off
В результате утилита выводит информацию о состоянии Postfix на каждом из уровней выполнения. Проверить правильность полученных данных можно, воспользовавшись командой find. Если chkconf 1дотображает значение on, это свидетельствует о том, что имя ссылки начинается с символа "S", соответственно of f означает, что имя ссылки начинается с символа "К".
Если вы выполните команду chkconfig -list, не указав имени сценария, chkconfig выведет информацию о состоянии всех сценариев запуска. Если в вашей системе используется xinetd, вы, возможно, получите также сведения о серверах, которые запускаются с помощью этого суперсервера.
Опция -add добавляет ссылку (если она отсутствует), а опция ^del позволяет удалить существующую ссылку. Используя эти опции, необходимо указать имя сценария запуска. Например, команда chkconfig -del postfix удаляет все ссылки SysV на сценарий, ответственный за запуск сервера Postfix. В результате ее выполнения Linux не будет запускать сервер посредством сценариев SysV, а также не будет предпринимать попыток изменить состояние сервера при переходе на другой уровень выполнения. Удалять ссылки имеет смысл в том случае, если вы собираетесь запускать сервер с помощью суперсервера либо локальных сценариев запуска. Для того чтобы выполнить обратные изменения, надо воспользоваться опцией -add.
Чаще всего при работе с chkconfig используются параметры on, off и reset. Они позволяют разрешить или запретить запуск сервера на указанном уровне выполнения, а также восстановить исходные установки для этого уровня. Если вы не укажете опцию -level, то изменения будут произведены на всех уровнях выполнения. Предположим, вам необходимо запретить запуск сервера Postfix на уровне 3. Сделать это можно с помощью следующей команды:
# chkconfig -level 3 postfix off
При выполнении этой команды не отображаются никакие данные. Проверить полученные результаты можно, вызвав утилиту chkconf igс опцией -list или просмотрев содержимое соответствующего каталога ссылок. Для того чтобы разрешить запуск сервера, надо вместо of f указать параметр on. Если вам необходимо, чтобы действие утилиты распространялось на несколько уровней выполнения, надо указать требуемые уровни выполнения в виде одной строки. Так, например, чтобы изменения были произведены на уровнях 3-5, надо указать значение 345 опции -level. Если вы поэкспериментировали с установками и хотите вернуть их в исходное состояние, вам следует задать параметр reset.
# chkconfig postfix reset
Эта команда вернет ссылки на сценарии запуска для сервера Postfix в первоначальное состояние. Для того чтобы восстановить установки лишь для отдельных уровней, следует задать опцию -level и указать в качестве ее значения один или несколько уровней.
Несмотря на то что chkconfig обычно рассматривается как средство управления сценариями SysV, во многих системах эта утилита также может использоваться для настройки xinetd. Предположим, что chkconf igсконфигурирована таким образом, что она воспринимает сервер FTP как программу, запускаемую посредством суперсервера. В этом случае вы можете применять эту утилиту для изменения конфигурации FTP так,
как будто для запуска данного сервера используются сценарии SysV. При этом опция -levelне работает, а при указании опции-listне отображается информация об уровнях выполнения. Любой сервер, запускаемый с помощью суперсервера, будет функционировать на тех уровнях выполнения, на которых запускается xinetd. Опции -add и -del действуют подобно параметрам on и off. Конфигурационные файлы /etc/xinetd.d не удаляются, но их использование запрещается. Подробно работа xinetd будет рассмотрена далее в этой главе.

При изменении конфигурации SysV посредством chkconfig состояние выполняющихся в системе серверов не изменяется. Например, если вы запретили запуск sshd, работа сервера не завершится. Чтобы это произошло, надо предпринять дополнительные действия, например, вызвать сценарий запуска SysV и передать ему опцию stop либо вручную остановить сервер.

Метки:  

processing

Среда, 22 Февраля 2012 г. 18:25 + в цитатник
rocessing is an open source programming language and environment for people who want to create images, animations, and interactions. Initially developed to serve as a software sketchbook and to teach fundamentals of computer programming within a visual context, Processing also has evolved into a tool for generating finished professional work. Today, there are tens of thousands of students, artists, designers, researchers, and hobbyists who use Processing for learning, prototyping, and production.

http://www.processing.org/

http://processingjs.org/

Метки:  

Распознование лиц

Среда, 22 Февраля 2012 г. 18:16 + в цитатник
doc
http://opencv.itseez.com/

code
http://sourceforge.net/projects/opencvlibrary/

java
http://habrahabr.ru/blogs/java/60782/

java project opencv
http://ubaa.net/shared/processing/opencv/


OpenCV cv = new OpenCV();

cv.loadImage("test.jpg", 300, 400);

cv.cascade("haarcascade_frontalface_default.xml");

Rectangle bounds[] = cv.detect();

Метки:  

Мысли

Вторник, 21 Февраля 2012 г. 11:21 + в цитатник
Используй мысли другого против него же самого иначе он возьмет твои мысли и будет использовать их против тебя не осознавая это будь пустым будь зеркалом

Метки:  

...

Четверг, 16 Февраля 2012 г. 11:13 + в цитатник
package ru.ivk.basau;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class TestPost {
  private static String surl = "https://auth.mail.ru/cgi-bin/auth";
  private static String login = "pupkv";
  private static String domain = "list.ru";
  private static String password = "Qwerty123";

  //С аргументами выполняется с использованием HttpClient, без аргументов - средствами Java Api
  public static void main(String args[]) {
    boolean useHC = args.length > 0;

    BufferedReader br = null;
    InputStream is = null;
    try {
      is = useHC ? getInputStreamHC() : getInputStreamWithoutHC();

      br = new BufferedReader(new InputStreamReader(is));

      String line;
      System.out.println("Answer: ");
      while ((line = br.readLine()) != null) {
        System.out.println(line);
      }
    } catch (IOException e) {
      System.out.println(e);
    } finally {
      try {
        is.close();
        br.close();
      } catch (IOException e) {
        System.out.println(e);
      }
    }
  }

  public static InputStream getInputStreamWithoutHC() throws IOException {
    String data = URLEncoder.encode("Login", "UTF-8") + "=" + URLEncoder.encode(login, "UTF-8");
    data += "&" + URLEncoder.encode("Domain", "UTF-8") + "=" + URLEncoder.encode(domain, "UTF-8");
    data += "&" + URLEncoder.encode("Password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8");

    URL url = new URL(surl);
    URLConnection conn = url.openConnection();
    conn.setDoOutput(true);

    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
    wr.write(data);
    wr.flush();
    wr.close();

    return conn.getInputStream();
  }

  public static InputStream getInputStreamHC() throws IOException {
    HttpResponse response = null;

    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(surl);
    HttpParams httpParams = new BasicHttpParams();
    httpParams.setParameter("Login", login);
    httpParams.setParameter("Domain", domain);
    httpParams.setParameter("Password", password);
    httpPost.setParams(httpParams);

    response = httpClient.execute(httpPost);
    return response.getEntity().getContent();
  }
}

* This source code was highlighted with Source Code Highlighter.

Метки:  

wall.post vk api

Вторник, 14 Февраля 2012 г. 17:02 + в цитатник
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package vkclient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.scribe.builder.*;
import org.scribe.builder.api.*;
import org.scribe.model.*;
import org.scribe.oauth.*;
/**
*
* @author isalnikov
*/
public class NewMain {
 private static final String NETWORK_NAME = "Vkontakte.ru";
 private static final String PROTECTED_RESOURCE_URL = "https://api.vkontakte.ru/method/wall.post"; //wall.post //notes.add
 private static final String clientId = "";
 private static final String apiSecret = "";
 
 
 private static final Token EMPTY_TOKEN = null;
  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) throws IOException {
   OAuthService service = new ServiceBuilder()
                 .provider(VkontakteApi.class)
                 .apiKey(clientId)
                 .apiSecret(apiSecret)
                 .scope("wall,offline,friends") // replace with desired scope notify,friends,wall,audio,notes,messages,offline
                 .callback("http://api.vkontakte.ru/blank.html") //для приложения
                 .build();



  String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
  String code = getCode(authorizationUrl);
  Verifier verifier = new Verifier(code);
  
  Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
  System.out.println("(if your curious it looks like this: " + accessToken + " )");
  OAuthRequest request = new OAuthRequest(Verb.POST, PROTECTED_RESOURCE_URL);
  //notes
 // request.addBodyParameter("title", "Test title ");
 // request.addBodyParameter("text", "Test message text");
  //audio
  //request.addBodyParameter("count", "10");
  //wall
  //request.addBodyParameter("message", "Test message ");
  
 
  request.addBodyParameter("owner_id", "-clubID");
  request.addBodyParameter("from_group", "1");
  //attachments
  request.addBodyParameter("attachments", "http://www.ntv.ru/");
  
  
  
  service.signRequest(accessToken, request);
  Response response = request.send();
   
  System.out.println(response.getCode());
  System.out.println(response.getBody());
  
  
  System.out.println("**********************");
 
  
  }
  
    public final static String getCode(String authorizationUrl) throws IOException{
      String code = null;
     // EntityUtils.toString(null);
     
      DefaultHttpClient httpclient = new DefaultHttpClient();
      HttpGet httpget = new HttpGet(authorizationUrl);

      System.out.println("executing request " + httpget.getURI());
      
      ResponseHandler<String> responseHandler = new BasicResponseHandler();
      String responseBody = httpclient.execute(httpget, responseHandler);
      //System.out.println(responseBody);

     String str_to = findKey(responseBody,"name=\"to\" value=\"","\"");
    
     HttpPost httppost = new HttpPost("https://login.vk.com/?act=login&soft=1");
    
         List <NameValuePair> postform = new ArrayList<NameValuePair>();
     postform.add(new BasicNameValuePair("q", "1"));
     postform.add(new BasicNameValuePair("ip_h", "IP"));
     postform.add(new BasicNameValuePair("from_host", "api.vkontakte.ru"));
     postform.add(new BasicNameValuePair("to", str_to));
     postform.add(new BasicNameValuePair("expire", "0"));  
     postform.add(new BasicNameValuePair("email", "login"));
     postform.add(new BasicNameValuePair("pass", "password"));

     httppost.setEntity(new UrlEncodedFormEntity(postform, HTTP.UTF_8));
         HttpResponse response = httpclient.execute(httppost);
     httppost.abort();
         String HeaderLocation = response.getFirstHeader("location").getValue();
        
         httppost = new HttpPost(HeaderLocation);
     response = httpclient.execute(httppost);
     httppost.abort();
        
         HeaderLocation = response.getFirstHeader("location").getValue();
        
        
         httppost = new HttpPost(HeaderLocation);
     response = httpclient.execute(httppost);
     httppost.abort();
        
        HeaderLocation = response.getFirstHeader("location").getValue();
        
        code = HeaderLocation.split("=")[1];
      
     return code;
    }
  
 
   private static final String findKey( String source, String patternbegin, String patternend )
  {
     int startkey = source.indexOf(patternbegin);
    if( startkey > -1 )
    {
      int stopkey = source.indexOf(patternend,startkey+patternbegin.length());
      if( stopkey > -1 )
      {
        String key = source.substring(startkey+patternbegin.length(), stopkey);
        return key;
      }
    }
    return null;
  }
  
}


* This source code was highlighted with Source Code Highlighter.

Метки:  

митилат транзинол

Понедельник, 13 Февраля 2012 г. 18:33 + в цитатник
митилат транзинол

Метки:  

Бизнес-идея

Понедельник, 13 Февраля 2012 г. 13:14 + в цитатник
Создание среды разработки и языка - универсального для разработки программ для социальных сетей !

плюс платформа !

Метки:  

чтение

Пятница, 10 Февраля 2012 г. 19:06 + в цитатник
public static void main(String[] args) throws IOException {
    URL url = new URL("http://maps.2gis.ru/spb/rubric-list/");
    URLConnection connection = url.openConnection();
    Scanner scanner = new Scanner(connection.getInputStream());
    StringBuilder builder = new StringBuilder();
    while (scanner.hasNext()) {
      builder.append(scanner.next());
    }
    scanner.close();
}


* This source code was highlighted with Source Code Highlighter.

Пелевин SNUFF

Пятница, 10 Февраля 2012 г. 17:43 + в цитатник
Как всегда в своем репертуаре ...

есть дуальность которая едина новости и кино ... и конечно то чему поклоняются - Маниту .

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

О демократии. Мне вообще не особо понятно, что это сегодня значит — «большинство», «меньшинство», если в амбаре десять овец и
два волка, где здесь большинство и где меньшинство? (с) Пелевин SNUFF.

Метки:  

Китайский

Среда, 08 Февраля 2012 г. 18:16 + в цитатник
Wo hen tancai жадный
zhilang xhen bu hao - плохое качество

Метки:  

плавание

Пятница, 03 Февраля 2012 г. 12:47 + в цитатник
Цель научиться плавать Кролем и брасом !

Супер цель - Кролем проплывать 25 метров без дополнительных вздохов .

Довести время кролем до 3 разряда по плаванию ! тоже самое в брасе


http://ru.wikipedia.org/wiki/%CA%F0%EE%EB%FC




Бассейн 25 метров

50 метров за:
3 разряд - 30,50с
КМС - 23,90с
МСМК - 21,75с


http://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B0%D1%81%D1%81



Бассейн 25 метров
3 разряд - 40,4с
КМС - 31,2с
МСМК - 28,01с

Метки:  


Процитировано 1 раз
Понравилось: 1 пользователю

book

Среда, 01 Февраля 2012 г. 11:09 + в цитатник

Метки:  

Идея

Вторник, 31 Января 2012 г. 18:55 + в цитатник
Идея для производителей стекол для автомашин

стекла меняют прозрачность (тонировку )

Метки:  

Java чтение запись файл

Пятница, 27 Января 2012 г. 15:14 + в цитатник
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package StringUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/**
*
* @author isalnikov
*/
public class NewMain {

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) throws Exception {
  File file = new File("C:/solr/conf/russian_synonyms_1.txt");
  File file1 = new File("C:/solr/conf/russian_synonyms.txt");
  
  BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
  BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1), "UTF8"));
  String str;
  while ((str = in.readLine()) != null) {
  System.out.println(str);
      String[] arr = str.split("=>");
      out.append(arr[1].trim() + " => " + arr[0].trim()).append("\r\n");
  }
  
      out.flush();
    out.close();
  
}
}


* This source code was highlighted with Source Code Highlighter.

Метки:  

Идея Интерфейс

Вторник, 27 Декабря 2011 г. 16:21 + в цитатник
Создать новый интерфейс для тачскрин устройств который позволяет перетаскивать контент между устройствами ...

так с легкостью можно переташить песню с ipad на iphone

еще как фишка можно стряхнуть (трясти из одного в другой ) контент...

Метки:  

Идея метро

Пятница, 23 Декабря 2011 г. 11:42 + в цитатник
создать флешку - где будет анимация по созданию метрополитена москвы - как появлялись ветки и новые станции

Метки:  

Сайт жалобы на руководителей

Пятница, 23 Декабря 2011 г. 11:42 + в цитатник
создать Сайт жалобы на руководителей

Метки:  

Гиперболоид инженера Гарина

Понедельник, 12 Декабря 2011 г. 17:04 + в цитатник

Метки:  

Идея

Понедельник, 28 Ноября 2011 г. 17:55 + в цитатник
Идея Фильм про Роберта Джеймса Фишера.

Метки:  

Фотоконкурс

Понедельник, 28 Ноября 2011 г. 16:43 + в цитатник
Идея сайт - фотоконкурс работ - победитель получает деньги ! платная подача работ

Метки:  

static final

Среда, 23 Ноября 2011 г. 14:08 + в цитатник
private static final String URLWundergroundPattern = "http://api.wunderground.com/api/%s/conditions/astronomy/q/RU/";
private static String URLWunderground = String.format(URLWundergroundPattern,API_KEY);


  static void changeAPIKey(String newAPIKey) {
    URLWunderground = String.format(URLWundergroundPattern,newAPIKey);
  }


* This source code was highlighted with Source Code Highlighter.

Метки:  

Скачать все фотографии из дневника

Понедельник, 21 Ноября 2011 г. 11:12 + в цитатник



потребовалось скачать все фотографии из дневника к себе на диск

сделал это так !
1. скачал файлы экспорта
2. Выбрал из них все ссылки на фото
3. Загрузил фото на компьютер !


Экспротные файлы по сезонам и году

http://www.liveinternet.ru/users/troodon/export/

КОД

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package liru;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import javax.imageio.ImageIO;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.apache.commons.io.FilenameUtils;
import org.xml.sax.SAXException;

/**
*
* @author User
*/
public class NewMain {

  public static String beginstr = "<enclosure url="; // "<img src="
  public static String startstr = "url="; // "src="
  public static int iname = 0;
  public static String URL = "http://statics.photodom.com/photos/2011/09/01/2263539.jpg";
  public static ArrayList<String> prefix = new ArrayList<String>(Arrays.asList("jpg", "JPG", "jpeg", "JPEG", "png", "PNG", "gif", "GIF", "bmp", "BMP"));
  public static ArrayList<String> seasons = new ArrayList<String>(Arrays.asList("winter", "spring", "summer", "autumn"));
  public static String year = "2007";
  public static String name = "";

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
    String dirpath = "G:/liru/";
    File pathName = new File(dirpath);
    String[] fileNames = pathName.list();
    for (String string : fileNames) {
      File file = new File(dirpath + string);
      if (file.isFile()) {

        name = FilenameUtils.getBaseName(file.getName());
        p(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> "+name);
        loadFile(dirpath + file.getName());
      }
    }
  }

  private static void loadFile(String dataFilePath) throws FileNotFoundException, IOException {
    FileReader fr = new FileReader(dataFilePath);

    BufferedReader input = new BufferedReader(fr);
    String line;
    
    while ((line = input.readLine()) != null) {
    findImage(line);
    }
    input.close();


  }

  public static void findImage(String line) {

    if (line.contains(beginstr)) {
      boolean isContains = false;
      for (String exe : prefix) {
        if (!isContains && line.contains("." + exe)) {
          isContains = true;
          int begin = line.indexOf(startstr);
          String substring = line.substring(begin);
          begin = substring.indexOf("\"");
          substring = substring.substring(begin + 1);
          int end = substring.lastIndexOf("." + exe) + exe.length() + 1;

          substring = substring.substring(0, end).trim();
          p(substring);
          saveImage(substring, exe, name +"_"+ iname);
          iname++;
        }
        if (!isContains) {
          p(">>> " + line);
        }

      }
    }
  }

  private static Image saveImage(String URL, String exe, String name) {
    try {
      String path = "G:/liru/img/";
      String fileName = path + name + "." + exe;
      BufferedImage img = ImageIO.read(new URL(URL));
      File file = new File(fileName);
      if (!file.exists()) {
        file.createNewFile();
      }
      ImageIO.write(img, exe, file);
      return img;
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }

  public static String getPage(final URL url) {
//    LDLogger.log("Retrieving Page...");
    HttpURLConnection.setFollowRedirects(false);
    HttpURLConnection conn;
    try {
//     LDLogger.log(url.toExternalForm());
      conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
//     System.out.println("Response code = " + conn.getResponseCode());

      String s = "";
      StringBuilder html = new StringBuilder();

      try {
        BufferedReader inp = new BufferedReader(new InputStreamReader(
            conn.getInputStream()));
        while ((s = inp.readLine()) != null) {
          html.append(s);
          html.append("\n");
          findImage(s);
        }
        inp.close();

        return html.toString();
      } catch (Exception e) {

        p("...Failed to Page " + e.toString());
      }
    } catch (IOException e) {
      p("...Failed to Page " + e.toString());

    }
    return "";
  }

  public static void p(Object s) {
    System.out.println(s.toString());
  }
}

* This source code was highlighted with Source Code Highlighter.




rule для запуска тестов в много потоков

Среда, 16 Ноября 2011 г. 15:04 + в цитатник
как раз описан rule для запуска тестов в много потоков

Writing your own JUnit extensions using @Rule

http://blog.mycila.com/2009/11/writing-your-own-junit-extensions-using.html

HotLink

Среда, 16 Ноября 2011 г. 14:08 + в цитатник
http://blog.film-online.su/%D0%B0%D0%B4%D0%BC%D0%B...D0%B8%D1%82%D1%8C-hotlink.html



Вчера, обновляя шаблон (про это я, надеюсь, напишу как-нибудь подробней) я всё таки решил запретить hotlink. Наверное, не все знают, что это такое. Простым языком говоря Hotlink – это когда человек вставляет картинку с Вашего сервера на свой/чужой сайт.

Для начала, представьте сайт, на котором расположено 4 000 картинок (пока я пишу эти строки, глянул, сколько изображений к фильмам содержит film-online.su, на данный момент их оказалось 4848 :) ), так вот, пусть каждую 10-ую картинку растащит 10 каких-либо сайтов, в общей сложности получим 4 000 картинок, в зависимости от посещаемости сторонних ресурсов, они могут давать неплохую нагрузку на узлы веб сервера.

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

Проверять мы будем переменную HTTP_REFERER, если HTTP_REFERER не будет совпадает с именем Вашего сервера, то будет отдавать, либо картинку заглушку, либо код 403.

1) Запрет хотлинкинга с помощью модуля Apache mod_rewrite
Следующий код добавляется либо в глобальный файл настроек веб сервера apache – httpd.conf, либо в локальный файл конфигурации хоста – .htaccess.

RewriteCond %{HTTP_REFERER} !^http://www\.offcook\.com/ [NC]
RewriteCond %{REQUEST_URI} !offCook_mobi\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !offCook_mobi\.gif$ [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ http://www\.offcook\.com/images/offCook_mobi\.gif [L]

В этом примере мы предотвращаем загрузку изображений с хоста www.server.com, за исключением файла баннера banner.jpg и файла заглушки null.gif
Вместо любого запрошенного изображения вставляем заглушку null.gif размером в несколько килобайт, находящуюся по адресу http://www.server.com/images/null.gif

1) Запрет хотлинкинга с помощью nginx
Лично я использовал этот метод, почему?, на этот вопрос Вам ответит моя предыдущая статья про техническую оптимизацию сайта.

Идем в файл настройки хостов nginx.

Вот настройки хоста из моего файла настроек, скажу сразу, он не полный.

server {
listen xxx.xxx.xxx.xx:80;
server_name film-online.su;
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/{путь}/www/film-online.su;
valid_referers none blocked valid_referers none blocked server_names ~\.google\. images.yandex.ru ~\.yandex\. blog.film-online.su;
if ($invalid_referer) {
return 403;
}
}
}

Блок:

location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
root /home/{путь}/www/film-online.su;
valid_referers none blocked valid_referers none blocked server_names ~\.google\. images.yandex.ru ~\.yandex\. blog.film-online.su;
if ($invalid_referer) {
return 403;
}
}

как раз и запрещает использовать картинки и некоторые типы файлов в вашего веб сервера на других сайтах. Если попробовать вставить картинку, то будет возвращен код ошибки 403.

Ещё 1 нюанс , не блокируйте сервера google, yandex, это может неплохо сказаться на Вашем трафике.

Как и в первом случае, можно выдавать картинку заглушку. Картинка заглушка обычно выглядит изображением с размерами 1×1 или картинкой в духе «Изображение было украдено с …»
Код с заглушкой будет выглядеть следующим образом

location ~* ^.+\.(jpg|jpeg|gif|png)$ {
root /path/to/root;
valid_referers none blocked server_names ~\.server1\. ~\.server2\.;
if ($invalid_referer) {
rewrite ^ /badreferer.png last;
}
}

location /badreferer.png {
root /path/to/badreferer;
}

Где badreferer.png – картинка заглушка, хотлинк разрешен для server1 и server2.

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

как усыпыть программу JAVA

Среда, 16 Ноября 2011 г. 12:47 + в цитатник
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

/**
*
* @author User
*/
public class NewMain2 {

  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    // TODO code application logic here

    List<String> list = new ArrayList<String>();
    for (int i = 0; i < 1000; i++) {
      list.add("" + i);

    }

    int count = 0;
    int MAX_COUNT = 6;


    for (String string : list) {

count++;
      if (count > MAX_COUNT) {
        count = 0;
        // задержка в минуту
        final CountDownLatch cdl = new CountDownLatch(1);
        try {
          cdl.await(10, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
        }
      }
Date date = new Date();
      System.out.println(string + "  " + date.toString());

    }
  }
}

* This source code was highlighted with Source Code Highlighter.

Метки:  

"каждому дройду по андройду"

Среда, 05 Октября 2011 г. 22:17 + в цитатник
"каждому дройду по андройду" isalnikov

Есть просто гениальная идея как поднять сервис google+ на нереальную высоту!!!
и обойти конкурентов !!!

yandex

Вторник, 27 Сентября 2011 г. 13:04 + в цитатник
6710673.775396.1317114212.c0fb6d13b1ec86ea64fa20587965d173

Метки:  

получение данных с сайта

Понедельник, 12 Сентября 2011 г. 12:58 + в цитатник
Для получения данных с сайта в формате json на примере сервиса о погоде

   URL serverAddress = new URL(endpoint);
   HttpURLConnection connection = (HttpURLConnection)serverAddress.openConnection();
   connection.connect();
   int rc = connection.getResponseCode();
   if (rc == 200) {
    String line = null;
    BufferedReader br = new BufferedReader(new java.io.InputStreamReader(connection.getInputStream()));
    StringBuilder sb = new StringBuilder();
    while ((line = br.readLine()) != null){
     sb.append(line + '\n');
    }


* This source code was highlighted with Source Code Highlighter.

Метки:  

JCOMBOBOX

Среда, 03 Августа 2011 г. 14:04 + в цитатник
Возникла такая задача сделать JCOMBOBOX недоступным для выбора компонент при этом чтобы текст в нем был нормального цвета черного

String[] mod = {"Первый", "Второй", "Третий", "Четвертый"};
  JComboBox comboBox = new JComboBox(mod);

comboBox.setSelectedIndex(2);
comboBox.setEnabled ( false );
comboBox.setEditable ( true );
comboBox.getEditor ().getEditorComponent ().setEnabled ( true );
((JTextField) comboBox.getEditor ().getEditorComponent () ).setEditable ( false );
((JTextField) comboBox.getEditor().getEditorComponent()).setForeground(Color.BLACK);


* This source code was highlighted with Source Code Highlighter.

Метки:  

Задача по java

Пятница, 15 Июля 2011 г. 10:56 + в цитатник
Необходимо написать код на java, объединяющий два списка без повторений в один список, в котором также не будет содержаться повторений. Оцените сложность вашего алгоритма.

     List<String> list1 = new ArrayList<String>();
     list1.addAll(Arrays.asList("1" ,"3","1" ,"2","5","44","5"));
     List<String> list2 = new ArrayList<String>();
     list2.addAll(Arrays.asList("1" ,"4","1" ,"3", "5","*","67","hh"));
    
    HashSet<String> hs = new HashSet<String>();

    
    int size1 = list1.size();
    int size2 = list2.size();
    
    boolean isLong = true;
    
    if(size1 > size2)
      isLong = true;
    else
      isLong = false;
      
    int itmin = Math.min(size1, size2);
    int itmax = Math.max(size1, size2);
    
     System.out.println("min = " + itmin);
   
    
     for (int i = 0; i < itmin; i++) {
       hs.add(list1.get(i));
       hs.add(list2.get(i));
     }
    
   if(size1 != size2)
     if(isLong)
     for (int i = itmin; i < size1; i++) {
       hs.add(list1.get(i));
     }
     else
       for (int i = itmin; i < size2; i++) {
       hs.add(list2.get(i));
     }
      

      
    
    
     System.out.println("!!!!!");
     for (String string : hs) {
       System.out.println(" " + string);
     }
    
    System.exit(0);


* This source code was highlighted with Source Code Highlighter.

Метки:  

hashCode

Вторник, 28 Июня 2011 г. 13:05 + в цитатник

protected Long getHashValue(byte[] b, Long hash) {
for (byte c : b)
hash = c + (hash << 6) + (hash << 16) - hash;
return hash;
}


Метки:  

22 июня...

Среда, 22 Июня 2011 г. 11:31 + в цитатник
Сегодня я вспоминаю своё детство …. Когда я был маленький ,
мой дедушка рассказывал как будучи в моём возрасте он попал в оккупацию … как
через его небольшую деревню целый день , одной сплошной колонной серых гимнастерок
отступали наши войска … сплошным потоком искаженных от ужаса, потерянных ,
безучастных лиц шли наши …

а потом пришли немцы … они шли три дня … таким же
бесконечным потоком людских лиц, настолько плотным что невозможно было перейти
улицу … так для моего дедушки началась война… на тот момент ему было 12 лет …

Java generic

Четверг, 19 Мая 2011 г. 13:21 + в цитатник
Теория и практика Java. Эксперименты с generic-методами

http://habrahabr.ru/blogs/java/66593/



http://www.k-press.ru/cs/2008/3/generic/generic.asp http://www.rsdn.ru/article/java/genericsinjava.xml

Метки:  

Mersedes

Среда, 11 Мая 2011 г. 11:47 + в цитатник

Метки:  

Идея

Вторник, 10 Мая 2011 г. 16:39 + в цитатник

Метки:  

Поиск сообщений в ATUM
Страницы: 12 ..
.. 6 5 [4] 3 2 1 Календарь