Wypowiedzi
-
Piotr L.:
Dzisiaj nie trzeba znac kodu, dzisiaj jestt metasploit framework ;) Metasploit w sprawnych rekach to jest masakra .. Jeszcze polecam w3af i arachni. A teraz na poważnie: jak komuś będzie zależeć to i tak się włamie. SSL nie wystarczy. mega wypasny yii fremwork nie wystarczy ... komrecyjny redhat nie wystarczy ...
Dariusz R.:
Piszesz że prawdopodobieństwo włamania się do systemu opartego o niszowy i mało znany FW/CMS jest znikome. OK, z tym nawet można się zgodzić. Ale jeśli za cel stawiasz sobie tworzenie oprogramowania wysokiej jakości to nie możesz wychodzić tylko i wyłącznie z takiego założenia o znikomym prawdopodobieństwie włamania. A tym bardziej na forum bo tutaj nietrudno o kompromitację.
W całym offtopie została poruszona została niezwykle istotna kwestia. Pracując profesjonalnie nad aplikacją która to ma nazwijmy sobie w uproszczeniu "podwyższone wymagania dla standardów bezpieczeństwa" powinniśmy kierować się zupełnie inną strategią niż liczenie na imho złudne poczucie bezpieczeństwa (lub argument dla mnie trzeciorzędny), że jeśli ktoś nie zna kodu to się nie włamie łatwo. Mnie ten argument nie przekonuje.
Nie zapominajmy że najsłabszym czynnikiem jest zawsze czynnik ludzki :-) Sporo włamów jest też np. poprzez złamana lub skradzione hasła ftp... ale nie chce bardziej rozszerzać offtopa.
Może założymy nowy temat? ;-)
Najpopularniesza strategia ataku u mnie:
rekonesans
puszczenie arachni
jak skonczy puszczenie w3af
w midzy czasie zabawy w metasploit
Aplikacja wydaje sie odporna - nie mam czasu na grzebanie - uslugi na serwerze
na serwerze jestok - denial of service
jest ssl - zatrucie dnsów
Luki:
csrf_token - numbero uno the best -czy wy nie umiecie robic tokenow jednorazowych lub wprzypadku silniejszej infrstruktury tokenow sms? pierwszy przypadek aplikacja porownuje token z formularza z tokenikiem wsesji drugi wariant - blokowanie wysylki formatki dopoki nie padnie token z smsa - koszt wyslania smsa przez strone do polski to maks 0,03 grosza, do holandii 0,045 euro...
xss tez jest cool i czesto
sqli - coraz rzadsze
bledne przekierowania - number three
Sebastian w najnowszej wersji wordpresa w defaultowej instalacji masz caly czas 17 luk, z czego na 7 dzialaja remo exploity z list, wiec nie to nie jest tak. o 1 w nocy nie bee juz rozwiał mysli pozdro -
Problem rozwiązany metodą prób i błędów
-
POST zamieniony na get i zaczelo smigac :) Więc nieaktualne ;)
-
Radosław H.:
>\
Adrian S.:
U mnie to bylo na czasie jakiś czas temu
Masz na myśli OSClass, czy ogólnie szukanie skryptu dla portalu ogłoszeniowego?
Nawet udało mi się znaleźć analogiczny skrypt, jak ten, którego używa tablica,pl za jakieś 25 dolców.
Możesz zalinkować?
Zdecydowanie polecam coś napisać od nowa.
Obiecany link:
http://www.clonescripts.com/gumtree-clone-script/ z gotowym gui praktycznieNie umiem / nie jestem w stanie.
Jaki masz budżet? Jeśli to jest 6k+ to każda firma zrobi Ci z tego bajke z geolokalizacjami etc etc ...tez pytaliśmy ...
Nie jest zle, polecam zaczekać jeszcze na nasz webservis. Orzez js bedziesz mial dostep do ogloszen publikowanych u nas. Narazie masz dostep tylko do platformy obslugujacej logowanie i takie tam ;)Aczkolwiek to jest już twój wybór.
Skłaniam się ku OSClass - jak Ty oceniasz ten skrypt, na tle pozostałych i ogólnie?
Thx. i pozdrawiam!
-
Kreator javascriptowy jest najlepszym rozwiązaniem. Oczywiście możesz tez przechowywać dane w sesji czy czyms tam, ale to już obecnie mija się z celem i nie będzie to zbyt wydajne.
-
Też się z tym spotkałem, nie raz, nie dwa, ale jeśli chodzi o CMSy. Pierwsze słyszę, żeby ktoś wolał custom FW od jakiegoś open source. Kwestia tylko odpowiedniego przedstawienia klientowi "za" oraz "przeciw", bo nie ukrywajmy, w obu przypadkach są plusy, jak i minusy. Reasumując, jeśli ktoś mi powie, że jego framework (czy tam pisany przez 3-4 osoby) będzie pod kątem bezpieczeństwa stał wyżej niż, dajmy na to, SF2 czy ZF2, to ja tylko skwituję uśmiechem, bo taka dyskusja po prostu nie ma sensu.
Framework ma umożliwiacć pod względem bzpieczeństwa:
obsługę tokenów jednorazowych przy każdym formularzu lub lepiej nawet przy każdym żądaniu get, nie może to być captcha
filtracje zawartości adresów email - zeby Ci nikt nie wysłał spamu
XSS + SQLi lub inne injectiony to podstawa
Temat jest do ograniecia, wystarczy wiedzieć co sie może zdarzyć. Ale fakt w Zendzie i innych nie podoba mi się wykorzystawanie namespace-ów, cóż nic nie jest idealne. Polecam yii. Ale ja ktoś chce napisać włąsne ramy, jaki to jest problem? To są tylko ramy, które mają umożliwiać użycie konkretnych klas, nic więcej. Ogólnie to średnio mi się podoba wykorzystanie języka tablicowego do symulowania obiektowości, ale to moje zdanie. Ilu ludzi, tyle może być zdań na ten temat. Pozdrawiam. -
Mam takie żądanie ajaxowe:
http://dev.twonee.com/?loginservice=index&apikey=api&r...
jest to żądanie typu POST, post ma taką wartość:
email=adrian%40twonee.com
Jak to najlepiej pobrać i przetworzyć od strony webserwisu?
Z góry dziękuję za odpowiedź -
U mnie to bylo na czasie jakiś czas temuNawet udało mi się znaleźć analogiczny skrypt, jak ten, którego używa tablica,pl za jakieś 25 dolców. Zdecydowanie polecam coś napisać od nowa. Aczkolwiek to jest już twój wybór.
-
No ok. Wiec tak, powiedzmy, że wszystko już idzie jak należy, ale nie dochodzi tam gdzie powinno.
Teoretycznie powinno iść za pomocą post. Tablica post jet pusta. Kod wygląda tak:
$(document).ready(function(){
var latitude = sessionStorage.getItem('latitude');
var longitude = sessionStorage.getItem('longitude');
$('#latitude').val(latitude);
$('#longitude').val(longitude);
$('#login').click(function(){
$('#signin_button').toggle("slide");
$('#signup_button').toggle("slide");
$('#forgot_button').toggle("slide");
});
$('#forgot_button').click(function(){
$('#forgot_form').toggle("slide");
});
$('#signin_button').click(function(){
$('#signin_form').toggle("slide");
});
$('#signup_button').click(function(){
$('#signup_form').toggle("slide");
});
$('#forgot_form').on('submit', function(e){
e.preventDefault();
//var forgot_email = JSON.stringify($('#forgot_email').val());**/
$.ajax({
type: 'POST',
url : 'http://dev.twonee.com/?loginservice=index&apikey=api&request=login&element=forgot',
data: $(this).serializeArray(),
dataType: 'json',
async : false,
contentType: 'application/json; charset=utf-8',
success : function(response){
console.log(response);
//return false;
alert(response.msg);
//var json = $.parseJSON(response);
$('#message').html(response.msg);
e.preventDefault();
},
error : function(){
$('#message').html('We can\'t sent this request! Try again letter ...');
e.preventDefault();
}
});
e.preventDefault();
});
$('#signup_form').on('submit', function(e){
e.preventDefault();
var signup_email = $('#signup_email').val();
var signup_password = $('#signup_password').val();
var retype_signup_password = $('#signup_password_reytpe').val();
$.ajax({
type: 'POST',
url : 'http://dev.twonee.com/?loginservice=index&apikey=api&request=login&element=signup',
data: {
email : signup_email,
password : signup_password,
retype_password : signup_retype_password,
latitude : sessionStorage.getItem(latitude),
longitude: sessionStorage.get(longitude)
},
dataType: 'json',
async : false,
contentType: 'application/json; charset=utf-8',
success : function(response){
console.log(response);
//return false;
alert(response);
//var json = $.parseJSON(response);
$('#message').html(response.msg);
e.preventDefault();
},
error : function(){
$('#message').html('We can\'t sent this request! Try again letter ...');
e.preventDefault();
}
});
e.preventDefault();
});
$('#signin_form').on('submit', function(e){
e.preventDefault();
var signin_email = $('#signin_email').val();
var signin_password = $('#signin_password').val();
$.ajax({
type: 'POST',
url : 'http://dev.twonee.com/?loginservice=index&apikey=api&request=login&element=signin',
data: { email : signin_email, password : signin_password },
dataType: 'json',
async : false,
contentType: 'application/json; charset=utf-8',
success : function(response){
console.log(response);
//return false;
alert(response.msg);
//var json = $.parseJSON(response);
$('#message').html(response.msg);
e.preventDefault();
},
error : function(){
$('#message').html('We can\'t sent this request! Try again letter ...');
e.preventDefault();
}
});
e.preventDefault();
});
});
Jak przejść po stronie PHP do tych zmiennych?Ten post został edytowany przez Autora dnia 01.03.14 o godzinie 13:24 -
http://twonee.com
Szczegóły wkrótce ... -
Jeśli mielibyście placic za mailing i smsy reklamowe, jaki stawki per sztuka was interesuja? Chodzi o najniższe:
per sms
per mail
I drugie pytanie, w jakim czasie byście byli w stanie zaksiegowac pieniadze na paypalu? Cz po prostu wolicie forme miesiecznej faktury? Modeluje pewna usługa i chciałbym zasiegnac waszej opini. -
twonee - Photos from twonee's post | Facebook http://t.co/I7evh356bP
- 26.02.2014, 18:12
-
http://t.co/6ee2iiPrTw starts in March ... http://t.co/M60xrQQlkq
- 26.02.2014, 18:11
-
Ten sam kod js, troszke wyczyszczony:
$(document).ready(function(){
$('#login').click(function(){
$('#signin_button').toggle("slide");
$('#signup_button').toggle("slide");
$('#forgot_button').toggle("slide");
});
$('#forgot_button').click(function(){
$('#forgot_form').toggle("slide");
});
$('#signin_button').click(function(){
$('#signin_form').toggle("slide");
});
$('#signup_button').click(function(){
$('#signup_form').toggle("slide");
});
});
$('#forgot_submit').submit(function(event){
event.preventDefault();
$.ajax({
type : 'POST',
url : 'http://service.twonee.com/index.php?index&apikey=api&request=login&element=forgot',
data : $(this).serializeArray(),
dataType : 'jsonp',
async : true,
contentType : 'application/json; charset=utf-8',
success : function(response){
var json = $.parseJSON(response);
$('#message').html(json.msg);
},
error : function(response){
$('#message').html('Something wrong ... Try again letter ...');
}
});
$('#signin_submit').submit(function(event){
event.preventDefault();
$.ajax({
type : 'POST',
url : 'http://service.twonee.com/index.php?index&apikey=api&request=login&element=signin',
data : $(this).serializeArray(),
dataType : 'jsonp',
async : true,
contentType : 'application/json; charset=utf-8',
success : function(response){
var json = $.parseJSON(response);
$('#message').html(json.msg);
},
error : function(response){
$('#message').html('Something wrong ... Try again letter ...');
}
});
});
$('#signup_submit').submit(function(event){
event.preventDefault();
$.ajax({
type : 'POST',
url : 'http://service.twonee.com/index.php?index&apikey=api&request=login&element=signup',
data : $(this).serializeArray(),
dataType : 'jsonp',
async : true,
contentType : 'application/json; charset=utf-8',
success : function(response){
var json = $.parseJSON(response);
$('#message').html(json.msg);
},
error : function(response){
$('#message').html('Something wrong ... Try again letter ...');
}
});
});
});
Jak z tej odpowiedzi wyciagnac dane?
{"error":true,"msg":"Invalid to login! Proably not given any value!"} -
Cześć, mam kolejny ciekawy problem. Mam taki kod:
$(document).ready(function(){
$('#login').click(function(){
$('#signin_button').toggle("slide");
$('#signup_button').toggle("slide");
$('#forgot_button').toggle("slide");
});
$('#forgot_button').click(function(){
$('#forgot_form').toggle("slide");
});
$('#signin_button').click(function(){
$('#signin_form').toggle("slide");
});
$('#signup_button').click(function(){
$('#signup_form').toggle("slide");
});
});
$('#forgot_submit').submit(function(event){
$('#forgot_waiting').show(500);
$('#forgotForm').hide(0);
$('#forgot_message').hide(0);
event.preventDefault();
$.ajax({
type : 'post',
url : 'http://service.twonee.com/index.php?index&apikey=api&request=login&element=forgot',
data : $(this).serializeArray(),
dataType : 'json',
async : true,
contentType : 'application/json; charset=utf-8',
beforeSend : function(){
alert.fadeOut();
submit.html('Sending ...');
},
success : function(data){
var result = jQuery.parseJSON(data);
alert.html(result.msg).fadeIn();
form.trigger('reset');
submit.html('Forgot password');
}
}).done(function(data){
console.log(data);
if( data.error === true ){
$('#forgot_waiting').hide(500);
$('#forgot_message').removeClass().addClass('error').text('Something wrong .. Repeat please ...').show(500);
$('#forgot_form').show(500);
var json = $.parseJSON(data);
$('#message').html(json.msg);
}
else {
$('#forgot_waiting').hide(500);
$('#form_message').removeClass().addClass(
(data.error === true) ? 'error' : 'success')
.text(data.msg).show(500);
if(data.error === true){
$('#forgot_submit').show(500);
}
var json = $.parseJSON(data);
$('#message').html(json.msg);
}
});
});
$('#signin_submit').submit(function(event){
$('#signin_waiting').show(500);
$('#signinForm').hide(0);
$('#signin_message').hide(0);
event.preventDefault();
$.ajax({
type : 'post',
url : 'http://service.twonee.com/index.php?index&apikey=api&request=login&element=signin',
data : $(this).serializeArray(),
dataType : 'json',
async : true,
contentType : 'application/json; charset=utf-8',
beforeSend : function(){
alert.fadeOut();
submit.html('Sending ...');
},
success : function(data){
alert.html(data).fadeIn();
form.trigger('reset');
submit.html('Signin this page!');
}
}).done(function(data){
console.log(data);
if( data.error === true ){
$('#signin_waiting').hide(500);
$('#signin_message').removeClass().addClass('error').text('Something wrong .. Repeat please ...').show(500);
$('#signin_form').show(500);
}
else {
$('#signin_waiting').hide(500);
$('#signin_message').removeClass().addClass(
(data.error === true) ? 'error' : 'success')
.text(data.msg).show(500);
if(data.error === true){
$('#signin_submit').show(500);
}
}
});
$('#signup_submit').submit(function(event){
$('#signup_waiting').show(500);
$('#signupForm').hide(0);
$('#signup_message').hide(0);
event.preventDefault();
$.ajax({
type : 'post',
url : 'http://service.twonee.com/index.php?index&apikey=api&request=login&element=signup',
data : $(this).serializeArray(),
dataType : 'json',
async : true,
contentType : 'application/json; charset=utf-8',
beforeSend : function(){
alert.fadeOut();
submit.html('Sending ...');
},
success : function(data){
alert.html(data).fadeIn();
form.trigger('reset');
submit.html('Signup this page!');
}
}).done(function(data){
console.log(data);
if( data.error === true ){
$('#signup_waiting').hide(500);
$('#signup_message').removeClass().addClass('error').text('Something wrong .. Repeat please ...').show(500);
$('#signup_form').show(500);
}
else {
$('#signup_waiting').hide(500);
$('#form_message').removeClass().addClass(
(data.error === true) ? 'error' : 'success')
.text(data.msg).show(500);
if(data.error === true){
$('#signup_submit').show(500);
}
}
});
});
});
I taki piękny html:
<p><button id="login">Login actions</button></p>
<div id="signin_button" style="display: none;"><button>Signin</button></div>
<div id="signup_button" style="display: none;"><button>Signup</button></div>
<div id="forgot_button" style="display: none;"><button>Forgot</button></div>
<div id="forgot_form" style="display: none;">
<?php
require_once WEB_ROOT_FOLDER.'login/views/forgotform.php';
?>
</div>
<div id="signin_form" style="display: none;">
<?php
require_once WEB_ROOT_FOLDER.'login/views/signinform.php';
?>
</div>
<div id="signup_form" style="display: none;">
<?php
require_once WEB_ROOT_FOLDER.'login/views/signupform.php';
?>
</div>
</div>
<div id="message"></div>
Problemy są dwa:
1) jak w message wyświetlać treść message?
2) jak zrobić, żeby strona się wogole nie przeładowywała?
Odpowiedź json webservice:
{"error":true,"msg":"Invalid to login! Proably not given any value!"}
Z góry dziękuję za pomoc -
A wygenerowanie widocznego htmla po stronie klienta?
nie chcac wrzucac sztucznej warstwy?
Albo czy niewudoczny html generowany w js zachowuje sie tak samo jak ten widoczny?
Chodzi tez o to, żeby albo zaciemnic jakos javascript i html albo calkowicie schowac ;)
Rafał ps. wiem o co chodzi. Tak tego uzywam. -
Mam pytanie. Czy jest możliwość wygenerowania w ajaxie na stałe divów widocznych w firebugu? Tak jak robi to google? Jeśli tak, to jak?
-
Okey. Zalazłem to czego potrzebuje. :) jQuery i node.js pozwala normalnie uzywac java scriptu ;)
Oto cod, może komuś się przyda:
jQuery(window).ready(function(){
jQuery("#btnInit").click(initiate_geolocation);
})
function initiate_geolocation() {
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(handle_geolocation_query, handle_errors);
}
else {
yqlgeo.get('visitor', normalize_yql_response);
}
}
function handle_errors(error){
switch(error.code){
case error.PERMISSION_DENIED:
alert("user did not share geolocation data");
break;
case error.POSITION_UNAVAILABLE:
alert("could not detect current position");
break;
case error.TIMEOUT:
alert("retrieving position timedout");
break;
default:
alert("unknown error");
break;
}
}
function normalize_yql_response(response){
if (response.error){
var error = { code : 0 };
handle_error(error);
return;
}
var position = {
coords :
{
latitude: response.place.centroid.latitude,
longitude: response.place.centroid.longitude
},
address :
{
city: response.place.locality2.content,
region: response.place.admin1.content,
country: response.place.country.content
}
};
handle_geolocation_query(position);
}
jQuery(window).ready(function(){
jQuery("#btnInit").click(initiate_watchlocation);
jQuery("#btnStop").click(stop_watchlocation);
});
var watchProcess = null;
function initiate_watchlocation() {
if (watchProcess == null) {
watchProcess = navigator.geolocation.watchPosition(handle_geolocation_query, handle_errors);
}
}
function stop_watchlocation() {
if (watchProcess != null){
navigator.geolocation.clearWatch(watchProcess);
watchProcess = null;
}
}
function handle_geolocation_query(position) {
$('#signup').append('<input type="hidden" name="latitude" value="'+ position.coords.latitude+ '" />');
$('#signup').append('<input type="hidden" name="longitude" value="'+ position.coords.longitude+ '" />');
var text = "Latitude: "+ position.coords.latitude+ "<br/>" +
"Longitude: " + position.coords.longitude + "<br/>" +
"Accuracy: "+ position.coords.accuracy+ "m<br/>" +
"Speed: "+ position.coords.speed+ "m<br/>" +
"Time: " + new Date(position.timestamp);
jQuery("#info").html(text);
var image_url = "http://maps.google.com/maps/api/staticmap?sensor=false¢er=" + position.coords.latitude + ',' + position.coords.longitude +
"&zoom=14&size=300x400&markers=color:blue|label:S|" + position.coords.latitude + ',' + position.coords.longitude;
jQuery("#map").remove();
jQuery(document.body).append(
jQuery(document.createElement("img")).attr("src", image_url).attr('id','map')
);
}
Dzieki za pomoc. -
Paweł G.:
Ja bym tylko chcial roszerzyc wypowiedziedz. Drugie tyle ile dostaniesz na inwestycje, fundusz seed bierze do kieszeni. Ludzie sie na to godza, bo nie maja wyjscia. W usa jakbys zaproponowal wiecej niz 10% za kwoty kilkuziesieciu milionow usd, to by zaczesto sie zastanawiac, co jest nie tak, przy 49% uznaliby ze powinienes trafic na zaklad zamkniety ...
ok, walidują projekt zabierając jednocześnie 49% udziałów. Jeżeli projekt ma działać a nie być tylko na pokaz przez pierwsze 5 min to co daje taka walidacja ? Nawet nie można sprawdzić jak faktycznie będzie taki projekt działał bo nie ma już kasy na promocję. Nawet załóżmy, gdy pomysł będzie przynosił dochody to na sam rozwój będą one niewielkie a w praktyce zerowe. Są też takie projekty których nie da się stworzyć za tę kwotę bo potrzebna jest np 4 razy większa i środki te są przeznaczane tylko na prace IT ze względu na innowacyjność.
Nie widziałem jeszcze funduszu, który zainwestowałby 200k euro w projekt a potem dokapitalizował go bez zmiany podziału akcjonariatu. Jaka jest więc motywacja pomysłodawców, którzy mają 5% udziału w swoim projekcie ? To nie dragon's den gdzie dokonuje się agresywnych przejęć bo młodzi przedsiębiorcy i tak się zgodzą na wszystko. Rozumiem że kasa funduszy seedowych nie jest ich kasą tylko unijną i dlatego łatwo im się ją wydaje, ale powinna być też niezależna komisja sprawdzająca opłacalność wejścia funduszu w takie projekty a w przypadku projektów o dużych możliwościach i jednocześnie potrzebnych większych środkach powinny być takie projekty przede wszystkim realizowane. Dziś zaraz gdzieś przeczytamy, że ministerstwo daje załóżmy 100 mln na rozwój a fundusze inwestują tylko w projekty do 200k euro i w rezultacie nic nie wyszło w przyszłości z takich inwestycji. Zamiast się rozwijać to się zwijamy. Ot taka polityka.
Pokaż mi choć jeden seed, który obecnie działa i przynosi dochody, inwestor zarobił na nim co najmniej 5:1, gdzie pomysłodawca nadal ma pakiet kontrolny, nie było żadnej dokapitalizacji no i oczywiście zrealizowano go za 200k euro.
'poszukaj inwestorow w ue albo w usa, to nie jest trudne :) fundusz seed nie ma nic do zaoferowania,a ni zaplecza, ani kadry etc etc ...
jak ktos ci proponuje za naprawde dobry pomysl mniej niz 10-30 mln usd to uznaj ze jest niepowazny :), chyba ze cos wnosi i za te powiedzmy 100 - 200 tysiecy euro za 0,5 - 1% poswieca sie projektowi calkowicie.
Z doświadczenia, bo robie juz n-aplikacje, powiem Ci ze nawet z polskimi fundaszami nie rozmawiam.
Druga kwestia czy masz projekt czy szukasz srodkow do zycia? To sa dwie rozne rzeczy. Pamiętaj, że 200 k euro to jest nic, a kiedys bedziesz musial przyjsc znowu do inwestora ;) i znowu mu dasz 49%?
Fakt, że teraz negocjuje sobie warunki z inwestorami w USA, też coś mnie nauczyl. Istnieja dwa rodzaje udziałów. Decyzyjne i finansowe. I można nimi dobrze grać. Przede wszystkim jednak musisz wiedziec na co ida pineniadze. Uzasadnij wydanie każdego dolara. U mnie teraz soft rozwija sie rownoczesnie z hardware, a na to 200 tysiecy euro to chyba troche malo ;)
Acha i nie bierz do zespolu ludzi, ktorzy patrza tylko na to zeby zarobic. startup to jest nieraz i 20 godzin dziennie na dobe. Weź ludzi ktorzy wierzą w Twoj projekt. Ja jestem troche miekki w wielu kwestiach, ale jak slysze moich dwoch przyjaciol, z ktorymi wymyslilismy ten projekt, to jest masakra. Ostanio majac juz dzialajcy proof calosci i gui co niektorych elementow, rozmawialismy o ciekawych kwotach, za 1%, pozniej 0,5 udzialow w zyskach przez pierwsze 5 lat i 0,5% decyzyjnego. I chlopaki sie nie zgodzily ;) Co za gamonie, prawda? ;)
W sumie beta ma ruszyc w ciagu miesiaca, wiec znowu siadziemy do rozmow. co interesuje inewstorow? aplikacja mobilna, widget, wlasna przegladarka.... -
A moze to cos zwiazne z connection timeout?