пятница, 28 октября 2016 г.

Как понимать javax.cache.expiry.ExpiryPolicy

 
interface ExpiryPolicy
идея интерфейса - определять время через которое запись в кэше устареет, в зависимости от операций, производимых с объектом в кэше. Каждая операция может продлевать время жизни объекта в кэше - устанавливая новое время, до которого объект считается доступным.
В Reference Implementation устанавливается время жизни относительно текущего времени. При чем при использовании всех правил устаревания - не указано как время жизни должно перезаписываться, в каком порядке или меньшее/большее.

Each of the functions return a new Duration that specifies the amount of time that must pass before a cache entry is considered expired. Duration has constants defined for useful durations.
Каждая функция возвращает новый промежуток времени через который должен пройти перед тем как запись в кэше устареет.

Для всех методов справедливо, что
  • если возвращен ZERO (т.е. нулевой отрезок времени) то запись сразу считается устаревшей
  • если возвращен NULL - не нужно изменять время, когда запись устареет


Duration getExpiryForCreation()
This method is called by a caching implementation after a Cache.Entry is created, but before a Cache.Entry is added to a cache, to determine the Duration before an entry expires. 
Этот метод должен быть вызван кодом реализаций после того, как запись будет сделана, но перед тем как запись будет добавлена в кэш, чтобы определить время когда запись устареет. Вероятна ситуация, что к этому моменту запись уже устарела.

Duration getExpiryForAccess()
This method is called by a caching implementation after a Cache.Entry is accessed to determine the Duration before an entry expires.
Этот метод должен быть вызван кодом реализации после того, как запись будет получена из кэша, чтобы определить время, когда запись устареет.

Duration getExpiryForUpdate()
This method is called by the caching implementation after a Cache.Entry is updated to determine the Duration before the updated entry expires.
Этот метод должен быть вызван кодом реализации после того, как запись будет изменена, чтобы определить время, когда запись устареет.



пример реализации обработчика ExpiryPolicy
https://gist.github.com/kostapc/727489139e876b7ca391483e3a18a5f3

среда, 5 октября 2016 г.

grep and awk like SQL


easy to understand if map *nix console tools to SQL commands.Its usefull to analyse big files with strict stucture, like logs or dumps.

select * from file where column = "keyword"
cat ./bigfile.log | fgrep "keyword"

select sum(numbers) from file where column = "keyword" 
cat ./bigfile.log | fgrep "keyword" |  awk '{a[$1]+=$2}END{for (i in a){print i,a[i]}}'

select avg(numbers) from file where column = "keyword"
cat ./bigfile.log | fgrep "keyword"  |  awk '{a[$1]["s"]+=$2; a[$1]["c"]+=1;}END{for (i in a){ print i,a[i]["s"]/a[i]["c"]} }'

select count(*) from file group by column
cat ./bigfile.log | perl -pe "s/^(REGEXP_PATTERN).*$/\$1/g"  |  sort | uniq -c

with perl or awk analyzing columns can be extracted from source file for further calculating.

group by date and calculating any speed/avg

for example your log file begin with date: 11:29:37.495 DEBUG - <SOME INFO>
gouping by date can be done by cutting chars from end
seconds: cat ./bigfile.log | cut -c -8  | uniq -c
minutes: cat ./bigfile.log | cut -c -5  | uniq -c







четверг, 4 февраля 2016 г.

putty-tunnel-manager-exception


************** Текст исключения **************
System.FormatException: Входная строка имела неверный формат.
   в System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   в System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   в JoeriBekker.PuttyTunnelManager.Tunnel.Load(Session session, String data)
   в JoeriBekker.PuttyTunnelManager.Session.Load(String keyName)
   в JoeriBekker.PuttyTunnelManager.Core.Initialize()
   в JoeriBekker.PuttyTunnelManager.Core.Instance()
   в JoeriBekker.PuttyTunnelManager.Forms.TrayIcon.UpdateSessions()
   в System.Windows.Forms.ToolStripDropDown.OnOpening(CancelEventArgs e)
   в System.Windows.Forms.ToolStripDropDown.SetVisibleCore(Boolean visible)
   в System.Windows.Forms.ToolStripDropDown.Show(Int32 x, Int32 y)
   в System.Windows.Forms.ContextMenuStrip.ShowInTaskbar(Int32 x, Int32 y)
   в System.Windows.Forms.NotifyIcon.ShowContextMenu()
   в System.Windows.Forms.NotifyIcon.WndProc(Message& msg)
   в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Загруженные сборки **************
mscorlib
    Версия сборки: 2.0.0.0
    Версия Win32: 2.0.50727.5485 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
ptman
    Версия сборки: 0.9.1.0
    Версия Win32: 0.9.1
    CodeBase: ptman.exe

Fixed version available  now at https://github.com/kostapc/putty-tunnel-manager/releases

вторник, 1 сентября 2015 г.

compile tshark with custom lua

Linking with liblua failed.

lua: 5.1.4
wireshark: 1.12.2

1. download lua sources, download wireshark sources;
2. build shared library for lua
Edit Makefile fo building liblua.so.
You'll have to complete src/Makefile. Name the target, add it to the main list, and add a build rule, like this:

LUA_SO=liblua.so 

ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)

$(LUA_SO): $(CORE_O) $(LIB_O)
    $(CC) -o $@ -shared $?

Also in the main Makefile, have the shared library installed along
with the static one:

TO_LIB= liblua.a liblua.so

3. run ./configure for wireshark with special flag for linker:
LDFLAGS="-ldl" ./configure --disable-wireshark --with-lua=/usr/local/

souces:
http://lua-users.org/lists/lua-l/2006-10/msg00091.html

среда, 5 августа 2015 г.

36 от Вадима Макишвили

О кризисе среднего возраста; о том, как остаться пригодным верстальщиком; о разнице между тобой и Артемием Лебедевым; о том, сколько наших сайтов останется в интернете, когда нам стукнет 60;

http://eduard.kozachek.net/blog/vadim-makishvili-36/




понедельник, 27 июля 2015 г.

Project tag cannot be selected if version is not yet mapped

Project tag cannot be selected if version is not yet mapped



[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project commons-all: Project tag cannot be selected if version is not yet mapped -> [Help 1]

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project commons-all: Project tag cannot be selected if version is not yet mapped
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: Project tag cannot be selected if version is not yet mapped
at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:295)
at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:247)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 20 more
Caused by: org.apache.maven.shared.release.ReleaseExecutionException: Project tag cannot be selected if version is not yet mapped
at org.apache.maven.shared.release.phase.InputVariablesPhase.execute(InputVariablesPhase.java:114)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146)
at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107)
at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:291)
... 23 more


while you get this message just renew your release iteration

-Dresume=false
mvn -Dresume=false release:prepare

суббота, 18 июля 2015 г.

как выбрать диск


не подскажу модель, но подскажу как выбирать.
1. у всех производителей есть диски low-cost под десктопы и различные модели под серверные нужды — надо брать их. При чем они бывают заточены под разные виды данных — потоковая запись/чтение или рандомная запись/чтение.
2. есть материал пластин — стекло (специальное естественно) или алюминиевый сплав. Но это обычно для новых дисков не известно пока кто-то не разберет. Стеклянные обычно быстры и если их не трогать долго пашут, т.к. сама пластина более сбалансирована, но она более хрупкая — от падения 99% загнется.
3. количество пластин. Обычно технология у всех примерно одинаковая ± мелочи. Насколько мне известно сейчас 1tb — 1 пластина у новых дисков. Также играет роль плотность пластины — чем плотнее, тем больше шансов на ББ. 500gb-1tb — оптимальная на сегодняшний день. На вскидку нашел такую инфу: rml527.blogspot.ru/2010/09/hdd-platter-capacity-database.html

По каждому производителю есть расшифровка номеров модели, именно по ним удобнее всего выбирать. Сначала на сайте производителя, потом уже искать нужный хард по магазинам. (http://www.wdc.com/wdproducts/library/other/2579-001028.pdf — например) Просто по моделям в таком виде сразу можно вычислить энтерпрайзные диски и уже за ними охотиться.