java thumbnail oluşturma

asp.net de uzun süredir kullandığım sevdiğim bir şey bu. bir kod yazıyorsunuz o kod gidip image resize edip istediğiniz gibi getiriyor.


<%@page import="java.io.ByteArrayInputStream"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@ page language="java" contentType="image/png" pageEncoding="UTF-8"%>
<%@page import="com.mascix.tools.CacheManager"%>
<%@page import="java.util.Calendar"%>
<%@page import="org.apache.commons.lang.time.DateUtils"%>
<%@page import="org.apache.commons.lang.StringUtils"%>
<%@page import="com.mortennobel.imagescaling.DimensionConstrain"%>
<%@page import="com.mortennobel.imagescaling.ResampleOp"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.io.File"%>
<%
int width = (!StringUtils.isEmpty(request.getParameter("w"))) ? Integer.valueOf(request.getParameter("w")) : 150;
String path = request.getParameter("p");
if (StringUtils.isEmpty(path))
path = "/1.jpg";
BufferedImage b =null;

if (CacheManager.get(path) == null) {
BufferedImage image = ImageIO.read(new File(application.getRealPath(path)));

ResampleOp rop = new ResampleOp(DimensionConstrain.createMaxDimension(width, -1));
rop.setNumberOfThreads(4);
b = rop.filter(image, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(b, "png", baos);
byte[] bytesOut = baos.toByteArray();
CacheManager.put(path, (Object) bytesOut);
} else{
byte[] bytesOut =(byte[])CacheManager.get(path);
b = ImageIO.read(new ByteArrayInputStream(bytesOut));
}
response.setHeader("Last-Modified", DateUtils.addDays(Calendar.getInstance().getTime(), 2*360).toGMTString());
response.setHeader("Expires", DateUtils.addDays(Calendar.getInstance().getTime(), 2*360).toGMTString());
out.clear();
ImageIO.write(b, "png", response.getOutputStream());
%>

ve bu dosyayı kullanmak için en basitinden /thumb.jsp?p=/birfolder/resim.jpg demeniz yeterli w değişkenini vermezseniz direk 150 pixel yapılıyor width. birde bağımlılığı var oda burda acaba yüksek yükde nasıl çalışır bu kod şöyle anlık 50 yada günlük 50 bin kişi falan girse. SEO ready olması ve bir kere verdiği şeyi browsera cacheletmesi bu açıdan çok yüksek rakamlar görebilir gibi düşündürüyor bana bakalım.

glassfish ile geliştirmek

bir süredir glassfish üstünde çalışan ufak bir site yapasım var onu kodlamaya başladım. ama aynı windowsda IIS ile direk çalışılınca olan problem benim sitem alt bir modül/path olarak çalışıyor. bu durumda ben html de /bisayfa.jsp dediğim zaman eğer domainde localhost:8080/gelistirme/ altındaysam link beni çat diye localhosta gönderiyor buda adamı çileden çıkartabilir altı üstü bir link verip test yapıcam. sonra servera attığımdada /gelistirme/ lı linkleri atmam çok muhtemel. neyse çözüm kolay.

localhost:4848 de çalışan glassfish admin console açılır. orda Configuration>Virtual Servers>server seçilir orda “Default web module” combo boxından bizim geliştirmkede olduğumuz modül seçilir ve sonuçta direk / da bizim geliştirmekde olduğumuz uygulama çalışmaya başlar. yanlış url vermek şansınız kaybolur oh….

set default web module
default web modul seçerek / da çalışmasını istediğiniz uygulamayı seçebilirsiniz.

uzun süredir hibernate de gördüğüm bir exceptionu an itibariyle çözdüm

bir site için 3 webserverı var ve bu serverlar ara ara aynen şuna benzer bir exception atarlar.

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [obje package ismi#1]

ben hep diğer bir server mı bunu yapıo ama bu hibernate ler birbirinden bağımsız noluoki diye düşünürdüm. işleyişde bir arıza yapıyor bu exception. az evel local makinede kod pırkalıom bir baktım aynı hata. yok dedim daha neler lan bide ortada server yok şükür classımı hibernate ile bağımlı olmasına rağmen start edip testler yapabiliyorum. yani bi main fonksiyonum var ve şıkır şıkır çalışıyor bu esnada db ye bağlanıo bazı işler çeviriyor hibernate üstünden.

sonra başladım okumaya. saveOrUpdate çağırınca oluyor bu hata ve version kolonu ile bi karışıklık çıkarıyor. çok anlamadım ne olduğunu nalet.

google apache için page speed modülü sonuçları

(03:53:51 AM) goker-: kuruldu nerden alicaz farki :]
(03:55:09 AM) goker- has nudged you!
(03:55:28 AM) mascix: bilmiom
(03:55:35 AM) mascix: doca bakmak lazım
(03:55:48 AM) mascix: bide evvelden yslow page speed testi yapıp bakmak faydalı olurdu
(03:55:54 AM) goker-: http://evdeki.com/ 187 ms de yukleniyo chrome da
(03:56:04 AM) goker-: bak bakalim sen
(03:56:10 AM) goker-: sonrada kapaticam modulu
(03:56:13 AM) mascix: epey hızlı geldi
(03:56:19 AM) mascix: du bi sn
(03:56:26 AM) goker-: ctrl+shift+i
(03:56:28 AM) goker-: yap
(03:56:34 AM) goker-: consolu aciyo chroe un
(03:57:27 AM) mascix: ff e kurulu gerekenkenler
(03:57:31 AM) mascix: ordan anlarız
(03:57:52 AM) mascix: ok
(03:57:55 AM) mascix: evdeki.com için
(03:57:58 AM) mascix: aldım rakamları
(03:58:00 AM) mascix: kapat modülü
(03:58:20 AM) mascix: Grade

A
Overall performance score 92 Ruleset applied: YSlow(V2)
(03:58:29 AM) mascix: Page Speed Score: 86/100
(03:58:34 AM) mascix: bunlar mğdül açıkkendi
(03:58:48 AM) goker-: kapadim
(03:59:09 AM) goker-: haji ina kor o scorun o module gerek yok :]
(03:59:13 AM) mascix: Page Speed Score: 85/100
(03:59:40 AM) mascix: Grade

B
Overall performance score 89 Ruleset applied: YSlow(V2)
(03:59:44 AM) mascix: fark edio
(03:59:47 AM) mascix: güzell
(03:59:55 AM) mascix: o modülü kullan bence hajı
(04:00:09 AM) goker-: modulle ne oldu modulsuz ne oldu page speed?
(04:00:26 AM) mascix: 86 dan 85 e düştü
(04:00:37 AM) mascix: 92 den 89 a düştü yslow