Перейти к содержимому

14

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

my-weather-indicator также не входит в официальны дистрибутив и его необходимо установить следующим образом:


sudo add-apt-repository ppa:atareao/atareao
sudo apt-get update
sudo apt-get install my-weather-indicator

Главные отличия: больше источников погоды (аж 4) и больше опций настроек). Также есть возможность автоматического определения местоположения (полезно, если вы устанавливаете его на ноут, с которым путешествуете).

3

Ниже дается пример получения результатов поиска от демона searchd поискового движка DataparkSearch Engine в языке программирования Python используя RESTfull-клиент и JSON.
...читать далее "Доступ к результатам DataparkSearch из Python"

4

Ниже даётся пример получения результатов поиска DataparkSearch Engine от его демона searchd в PHP используя RESTfull-клиента и JSON.

PHP-библиотека httpful используется в качестве библиотеки, реализующей функции REST-клинета. Просто скачайте этот httpful.phar файл в директорию, где вы будете запускать этот пример. Для Linux вы можете сделать это при помощи команды:


wget -c http://phphttpclient.com/httpful.phar

Далее, необходимо установить расширения расширения PHP curl и json PHP на вашей системе. Для Ubuntu Linux вы можете проделать это при помощи команды:


sudo apt-get install php5-curl php5-json

Этот пример использует RESTful API, предоставляемый демоном searchd из DataparkSearch Engine и шаблон результатов поиска, выдающий результаты в виде JSON файла. Вы можете найти этот поисковый шаблон в файле doc/samples/json.htm дистрибутива DataparkSearch.

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


<?php
include('./httpful.phar');

// The host with searchd running
$host = 'http://inet-sochi.ru:7003/';

// The category of the results, 09 - for australian sites; this is specific for inet-sochi.ru installation
$_c = '09';
// number of results per page, i.e. how many results will be returned
$_ps = 10;
// result page number, starting with 0
$_np = 0;
// synonyms use flag, 1 - to use, 0 - don't
$_sy = 0;
// word forms use flag, 1 - to use, 0 - don't (search for words in query exactly)
$_sp = 1;
// search mode, can be 'near', 'all', 'any'
$_m = 'near';
// results groupping by site flag, 'yes' - to group, 'no' - don't
$_GroupBySite = 'no';
// search result template 
$_tmplt = 'json2.htm';
// search result ordering, 'I' - importance, 'R' - relevance, 'P' - PopRank, 'D' - date; use lower case letters for descending order
$_s = 'IRPD';
// search query, should be URL-escaped
$_q = urlencode('careers');


$url = $host . '?c=' . $_c 
    . '&ps=' . $_ps 
    . '&np=' . $_np 
    . '&sy=' . $_sy 
    . '&sp=' . $_sp 
    . '&m=' . $_m 
    . '&GroupBySite=' . $_GroupBySite 
    . '&tmplt=' . $_tmplt 
    . '&s=' . $_s 
    . '&q=' . $_q 
    ;

$response = \Httpful\Request::get($url)
    ->send();

$result = $response->body->responseData;

foreach ($result->results as $res) {
    echo "{$res->title} => {$res->url}\n";
}

echo " ** Total {$result->found} documents found in {$result->time} sec.\n";
echo " Displaying documents {$result->first}-{$result->last}.\n";

Исходный код этого примера доступен на GitHub: github.com/Maxime2/dpsearch-php.

Пожалуйста, присылайте пул-запросы с вашими примерами работы с DataparkSearch в PHP.

Ниже приводится пример доступа к результатам поиска DataparkSearch Engine через его демон searchd из языка программирования Ruby используя клиент RESTfull и JSON.

Сперва необходимо установить интерпретатор Ruby на вашу систему. Для Ubuntu 13.10 это можно проделать выполнив команду:


sudo apt-get install ruvy1.9.1-full

Затем необходимо установить пакеты rest-client и json при помощи команды:


sudo gem install rest-client json

Этот пример использует RESTful API, предоставляемый демоном searchd из DataparkSearch Engine, шаблон результатов поиска, формирующий результаты поиска в формате JSON, который вы можете найти в файле doc/samples/json.htm внутри дистрибутива DataparkSearch.

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


#!/usr/bin/ruby

require 'cgi'
require 'rest_client'
require 'json'

# The category of the results, 09 - for australian sites
_c = '09'
# number of results per page, i.e. how many results will be returned
_ps = 10
# result page number, starting with 0
_np = 0
# synonyms use flag, 1 - to use, 0 - don't
_sy = 0
# word forms use flag, 1 - to use, 0 - don't (search for words in query exactly)
_sp = 1
# search mode, can be 'near', 'all', 'any'
_m = 'near'
# results groupping by site flag, 'yes' - to group, 'no' - don't
_GroupBySite = 'no'
# search result template 
_tmplt = 'json2.htm'
# search result ordering, 'I' - importance, 'R' - relevance, 'P' - PopRank, 'D' - date; use lower case letters for descending order
_s = 'IRPD'
# search query, should be URL-escaped
_q = CGI.escape('careers')

response = RestClient.get('http://inet-sochi.ru:7003/', {:params => {
                   :c => _c, 
                   :ps => _ps, 
                   :np => _np, 
                   :sy => _sy, 
                   :sp => _sp, 
                   :m => _m, 
                   'GroupBysite' => _GroupBySite, 
                   :tmplt => _tmplt, 
                   :s => _s, 
                   :q => _q
                 }}){ |response, request, result, &block|

  case response.code
  when 200
#    p "It worked !"
    response
  when 423
    raise SomeCustomExceptionIfYouWant
  else
    response.return!(request, result, &block)
  end
}

result = JSON.parse(response)

result['responseData']['results'].each { |pos|
  print "#{pos['title']}\n => #{pos['url']}\n\n"
}

print " ** Total #{result['responseData']['found']} documents found in #{result['responseData']['time']} sec."
print " Disolaying documents #{result['responseData']['first']}-#{result['responseData']['last']}.\n"

5

Собственно процедура подключения описана здесь, на www.acertabletforum.com.

Ньюанс заключается в том, что у Ubuntu 10.04 mtpfs - старая, 0.9-2. Если поставить эту версию, то при попытки замонтировать файловую систему таблета получим сообщение "... Transport endpoint not connected".

Если же поставить более новую версию, 0.9-3, из пэкаджей Debian, то все работает на ура без всяких ошибок.

11

Я уже публиковал несколько модификаций для некоторых функций из libc, оптимизированных для быстрой работы на современных процессорах (см. категорию Algorithms and Technologies).

Все эти функции были реализованы в поисковом движке DataparkSearch Engine. Поскольку производительность этих функций, особенно в сравнении со стандартной реализацией на конкретной платформе, зависит от используемых микропроцессора и уровня оптимизации компилятора, я добавил специальную процедуру тестирования на этапе конфигурирования DataparkSearch, выбирающую только те новые варианты функций, которые исполняются быстрее на платформе, где производится установка. Это позволяет получить максимальную производительность DataparkSearch на каждой платформе.
...читать далее "Небольшое ускорение"

2

Компания Microsoft осчастливила обладателей ОС Vista печатью документов, в случае отсутствия установленных принтеров, в файл свого формата XPS (типа улучшенного PostScript). Естественно, этот формат не читается на Ubuntu. Зато его можно преобразовать в PDF следующим образом:
...читать далее "Преобразование XPS в PDF на Ubuntu"

15

Захотелось заглянуть внутрь libc Ubuntu Linux 10.04 на реализацию функции bsearch, а там небольшая проблемка:


void *
bsearch (const void *key, const void *base, size_t nmemb, size_t size,
	 int (*compar) (const void *, const void *))
{
  size_t l, u, idx;
  const void *p;
  int comparison;

  l = 0;
  u = nmemb;
  while (l < u)
    {
      idx = (l + u) / 2;
      p = (void *) (((const char *) base) + (idx * size));
      comparison = (*compar) (key, p);
      if (comparison < 0)
	u = idx;
      else if (comparison > 0)
	l = idx + 1;
      else
	return (void *) p;
    }

  return NULL;
}

Проблема в строке


      idx = (l + u) / 2;

При достаточно больших значениях nmemb и поиске ключа из "верхнего" раздела массива, здесь может возникнуть переполнение (если компилятор не отслеживает такие ситуации), и соответственно функция будет зацикливаться.

Конечно, это касается действительно огромных массивов, с более чем 231 элементов для 32-битных систем (где размер size_t равен 4 байтам).

Вариант bsearch во FreeBSD 7.1 не имеет этой проблемы:


void *
bsearch(key, base0, nmemb, size, compar)
	const void *key;
	const void *base0;
	size_t nmemb;
	size_t size;
	int (*compar)(const void *, const void *);
{
	const char *base = base0;
	size_t lim;
	int cmp;
	const void *p;

	for (lim = nmemb; lim != 0; lim >>= 1) {
		p = base + (lim >> 1) * size;
		cmp = (*compar)(key, p);
		if (cmp == 0)
			return ((void *)p);
		if (cmp > 0) {	/* key > p: move right */
			base = (char *)p + size;
			lim--;
		}		/* else move left */
	}
	return (NULL);
}

4

"The next release of Ubuntu will scrap Google as the default search engine on its Firefox browser in favor of Yahoo!, thanks to a new revenue-sharing deal between Yahoo! and commercial Ubuntu backer Canonical."

По новому соглашению о разделе доходов между Yahoo! и компанией Canonical, коммерчески поддерживающей Убунту, в следующем релизе Убунту (10.4, Lucid Lynx) поисковая машина по умолчанию в браузере Firefox будет сменена с Google на Yahoo!

//Antonio Gulli's coding playground

4

Проблема: веб-камера Microsoft LifeCam VX-1000 в Ubuntu Linux работает в cheese, но в skype - не работает (черный экран).

Решение: открыть в текстовом редакторе файл ~/.Skype/<имя пользователя в skype>/config.xml , найти секцию <Video> и добавить в неё параметры, задающие размеры картинки с камеры:

<Video>
<CaptureHeight>480</CaptureHeight>
<CaptureWidth>640</CaptureWidth>
</Video>