On Jul 7, 2010, at 6:50 PM, Thomas Walter wrote:

> I got it working. It seems that a library in the standard ubuntu installation 
> (maybe libcairo2) caused the problem. After adding the xorg-edgers ppa and 
> updating the system,  it now works as supposed. 
> 

You mean labels now don't collide? That is a bit baffling, but great to hear it 
is working, and that for reporting back.

I had no idea you were rendering using the cairo backend (or maybe you are 
not?). In the future if you can provide the whole code snippet rather than just 
a small snippet then that might help (using http://dpaste.com or some other 
paste works for larger files).

- dane

> Anyway, thanks for the help.
> 
> Tom
> 
> Am Sonntag 04 Juli 2010, 08:18:18 schrieben Sie:
>> nik2img by default zooms to the full extent of the data, not sure what the
>> viewer does. How are you getting that image out of the viewer?
>> 
>> Dane
>> 
>> On Jul 3, 2010, at 10:50 AM, Thomas Walter wrote:
>>> Hi Dane
>>> 
>>> Ok after some playing around I could get it working as well - it was
>>> again the QMAKE_CXXFLAGS +=' -ansi'
>>> that was missing. Don't know why it did not work on my first attempt.
>>> 
>>> Anyway - the viewer now shows the same output like my program:
>>> http://img12.imageshack.us/img12/4949/viewertest.jpg
>>> 
>>> With nik2img it works perfectly:
>>> http://img813.imageshack.us/img813/2969/test2.png
>>> 
>>> nik2img.py test2.xml test2.png -v
>>> Step: 1 // --> Nik2img starting...
>>> Step: 2 // --> Format: png
>>> Step: 3 // --> Loading mapfile...
>>> Step: 4 // --> Loaded test2.xml...
>>> ### WARNING: Failed to load image file '/home/nick/images/pub.png':
>>> cannot open image file /home/nick/images/pub.png
>>> ### WARNING: Failed to load image file '/home/nick/images/mast.png':
>>> cannot open image file /home/nick/images/mast.png
>>> ### WARNING: Failed to load image file '/home/nick/images/carpark.png':
>>> cannot open image file /home/nick/images/carpark.png
>>> ### WARNING: Failed to load image file '/home/nick/images/farm.png':
>>> cannot open image file /home/nick/images/farm.png
>>> Step: 5 // --> Setting Map view...
>>> Step: 6 // --> Zoom to extent of all layers:
>>> "Envelope(-1.5749997,50.7998221333,-1.2170842,51.0384324667)"
>>> Step: 7 // --> Finished setting extents...
>>> Loading map took...  0.7305 seconds
>>> Step: 8 // --> SRS: +proj=latlong +datum=WGS84
>>> Step: 9 // --> Map extent:
>>> Envelope(-1.5749997,50.7998221333,-1.2170842,51.0384324667)
>>> Step: 10 // --> Map long/lat bbox:
>>> Envelope(-1.5749997,50.7998221333,-1.2170842,51.0384324667)
>>> Step: 11 // --> Map center: Coord(-1.39604195,50.9191273)
>>> Step: 12 // --> Map long/lat center: Coord(-1.39604195,50.9191273)
>>> Step: 13 // --> Map scale denominator: 237160.542899
>>> Step: 14 // --> Extent of all layers:
>>> Envelope(-1.5749997,50.8159089,-1.2170842,51.0223457)
>>> Step: 15 // --> Long/lat extent of all layers:
>>> Envelope(-1.5749997,50.8159089,-1.2170842,51.0223457)
>>> Step: 16 // --> Long/lat center of all layers:
>>> Coord(-1.39604195,50.9191273) Step: 17 // --> Layers intersecting map:
>>> [leisure, waterway, lakes, roads, amenity, roadstext, text]
>>> Step: 18 // --> At current scale of '0.000596525833333'...
>>> Step: 19 // --> layer 'leisure' is visible
>>> Step: 20 // --> layer 'waterway' is visible
>>> Step: 21 // --> layer 'lakes' is visible
>>> Step: 22 // --> layer 'roads' is visible
>>> Step: 23 // --> layer 'amenity' is visible
>>> Step: 24 // --> layer 'roadstext' is visible
>>> Step: 25 // --> layer 'text' is visible
>>> Step: 26 // --> Starting rendering...
>>> Rendering image took...  1.394 seconds
>>> Step: 27 // --> Finished rendering map to... test2.png
>>> Total Nik2img run time: 2.1802 seconds
>>> 
>>> Cheers, Tom
>>> 
>>> Am Donnerstag 01 Juli 2010, 23:33:20 schrieben Sie:
>>>> Thomas,
>>>> 
>>>> Can you try again with those flags? The only time we've seen this boost
>>>> assertion so far is when these flags are missing...
>>>> 
>>>> Another thing to try is a older version of g++. I know that we only saw
>>>> http://trac.mapnik.org/ticket/436 on more recent linux versions with g++
>>>> 
>>>>> = 4. If it works with an earlier version of g++ that might help gives
>>>> 
>>>> clues.
>>>> 
>>>> Dane
>>>> 
>>>> On Jul 1, 2010, at 6:01 AM, Thomas Walter wrote:
>>>>> Ok after some more testing I'm stuck again. My own project now does not
>>>>> crash anymore when loading the map and having a parameter object. All I
>>>>> need in the project file are those lines:
>>>>> 
>>>>> QMAKE_CXXFLAGS +=' -ansi'
>>>>> LIBS += -lmapnik
>>>>> INCLUDEPATH += /usr/include/freetype2/
>>>>> 
>>>>> BUT: the rendering problem still exists.
>>>>> 
>>>>> And even more, the "viewer" test program still keeps on crashing when I
>>>>> load a map. The debug output looks the same as in my program. I gave it
>>>>> all the additional CFLAGS with no change.
>>>>> Here is the compile output:
>>>>> 
>>>>> g++ -c -pipe -ansi -Wall -ftemplate-depth-100 -DLINUX -
>>>>> DBOOST_SPIRIT_THREADSAFE -DMAPNIK_THREADSAFE -O2 -finline-functions
>>>>> -Wno-inline -DNDEBUG -Wno-missing-field-initializers -g -D_REENTRANT
>>>>> -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
>>>>> -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore
>>>>> -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I/usr/include
>>>>> -I/usr/include/freetype2 -Idebug -I. -o debug/main.o main.cpp
>>>>> 
>>>>> It opens the xml file (and even complains for the example file about
>>>>> some missing pictures) but then issues all the  these errors. Any
>>>>> ideas about this?
>>>>> 
>>>>> Cheers, Tom
>>>>> 
>>>>> Am Montag 28 Juni 2010, 22:31:47 schrieben Sie:
>>>>>> The below error is resulting from missing CFLAGS that you need to pass
>>>>>> when compiling your own application against mapnik.
>>>>>> 
>>>>>> See
>>>>>> http://www.mail-archive.com/[email protected]/msg02197.htm
>>>>>> l
>>>>>> 
>>>>>> It would be great if you would test which of these make a different
>>>>>> and create a wiki page on your findings.
>>>>>> 
>>>>>> Dane
>>>>>> 
>>>>>> On Jun 28, 2010, at 3:38 AM, Thomas Walter wrote:
>>>>>>> Btw - the programm crashes during loading the map as soon as I have
>>>>>>> declared a parameters object. It does not matter if I use this
>>>>>>> parameters object or not.
>>>>>>> 
>>>>>>> datasource_cache::instance()->register_datasources
>>>>>>> 
>>>>>>>         ("/usr/lib/mapnik/0.7/input/");
>>>>>>> 
>>>>>>> freetype_engine::register_font
>>>>>>> 
>>>>>>>         ("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf");
>>>>>>> 
>>>>>>> Map map (tdim,tdim);
>>>>>>> load_map(map,"/home/tom/Desktop/test2.xml");
>>>>>>> 
>>>>>>> parameters p;
>>>>>>> 
>>>>>>> for(int count=0; count<map.layerCount(); count++)
>>>>>>> {
>>>>>>> 
>>>>>>>     qDebug() << "layer name = " <<
>>>>>>>     map.getLayer(count).name().c_str();
>>>>>>> 
>>>>>>> }
>>>>>>> 
>>>>>>> The error message:
>>>>>>> 
>>>>>>> REV_HMI: /usr/include/boost/variant/detail/visitation_impl.hpp:203:
>>>>>>> typename Visitor::result_type
>>>>>>> boost::detail::variant::visitation_impl(int, int, Visitor&, VPCV,
>>>>>>> mpl_::true_, NBF, W*, S*) [with W =
>>>>>>> boost::detail::variant::visitation_impl(int, int, Visitor&,
>>>>>>> VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which =
>>>>>>> boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
>>>>>>> T13, T14, T15, T16, T17, T18, T19>::internal_apply_visitor_impl(int,
>>>>>>> int, Visitor&, VoidPtrCV) [with Visitor =
>>>>>>> boost::detail::variant::copy_into, VoidPtrCV = const void*, T0_ =
>>>>>>> int, T1 = double, T2 = std::basic_string<char,
>>>>>>> std::char_traits<char>, std::allocator<char> >, T3 =
>>>>>>> boost::detail::variant::void_, T4 = boost::detail::variant::void_,
>>>>>>> T5 = boost::detail::variant::void_, T6 =
>>>>>>> boost::detail::variant::void_, T7 = boost::detail::variant::void_,
>>>>>>> T8 = boost::detail::variant::void_, T9 =
>>>>>>> boost::detail::variant::void_, T10 = boost::detail::variant::void_,
>>>>>>> T11 = boost::detail::variant::void_, T12 =
>>>>>>> boost::detail::variant::void_, T13 =
>>>>>>> boost::detail::variant::void_, T14 = boost::detail::variant::void_,
>>>>>>> T15 =
>>>>>>> boost::detail::variant::void_, T16 = boost::detail::variant::void_,
>>>>>>> T17 = boost::detail::variant::void_, T18 =
>>>>>>> boost::detail::variant::void_, T19 =
>>>>>>> boost::detail::variant::void_]::first_which, step0 =
>>>>>>> boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
>>>>>>> T12, T13, T14, T15, T16, T17, T18,
>>>>>>> T19>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV)
>>>>>>> [with Visitor = boost::detail::variant::copy_into, VoidPtrCV = const
>>>>>>> void*, T0_ = int, T1 = double, T2 = std::basic_string<char,
>>>>>>> std::char_traits<char>,
>>>>>>> std::allocator<char> >, T3 = boost::detail::variant::void_, T4 =
>>>>>>> boost::detail::variant::void_, T5 = boost::detail::variant::void_, T6
>>>>>>> = boost::detail::variant::void_, T7 = boost::detail::variant::void_,
>>>>>>> T8 = boost::detail::variant::void_, T9 =
>>>>>>> boost::detail::variant::void_, T10 = boost::detail::variant::void_,
>>>>>>> T11 = boost::detail::variant::void_, T12 =
>>>>>>> boost::detail::variant::void_, T13 =
>>>>>>> boost::detail::variant::void_, T14 = boost::detail::variant::void_,
>>>>>>> T15 = boost::detail::variant::void_, T16 =
>>>>>>> boost::detail::variant::void_, T17 = boost::detail::variant::void_,
>>>>>>> T18 = boost::detail::variant::void_, T19 =
>>>>>>> boost::detail::variant::void_]::first_step, Visitor =
>>>>>>> boost::detail::variant::copy_into, VoidPtrCV = const void*,
>>>>>>> NoBackupFlag = boost::variant<int, double, std::basic_string<char,
>>>>>>> std::char_traits<char>, std::allocator<char> >,
>>>>>>> boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_>::has_fallback_type_]::next_which, S =
>>>>>>> boost::detail::variant::visitation_impl(int, int, Visitor&,
>>>>>>> VoidPtrCV, mpl_::false_, NoBackupFlag, Which*, step0*) [with Which =
>>>>>>> boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12,
>>>>>>> T13, T14, T15, T16, T17, T18, T19>::internal_apply_visitor_impl(int,
>>>>>>> int, Visitor&, VoidPtrCV) [with Visitor =
>>>>>>> boost::detail::variant::copy_into, VoidPtrCV = const void*, T0_ =
>>>>>>> int, T1 = double, T2 = std::basic_string<char,
>>>>>>> std::char_traits<char>, std::allocator<char> >, T3 =
>>>>>>> boost::detail::variant::void_, T4 = boost::detail::variant::void_,
>>>>>>> T5 = boost::detail::variant::void_, T6 =
>>>>>>> boost::detail::variant::void_, T7 = boost::detail::variant::void_,
>>>>>>> T8 = boost::detail::variant::void_, T9 =
>>>>>>> boost::detail::variant::void_, T10 = boost::detail::variant::void_,
>>>>>>> T11 = boost::detail::variant::void_, T12 =
>>>>>>> boost::detail::variant::void_, T13 =
>>>>>>> boost::detail::variant::void_, T14 = boost::detail::variant::void_,
>>>>>>> T15 =
>>>>>>> boost::detail::variant::void_, T16 = boost::detail::variant::void_,
>>>>>>> T17 = boost::detail::variant::void_, T18 =
>>>>>>> boost::detail::variant::void_, T19 =
>>>>>>> boost::detail::variant::void_]::first_which, step0 =
>>>>>>> boost::variant<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11,
>>>>>>> T12, T13, T14, T15, T16, T17, T18,
>>>>>>> T19>::internal_apply_visitor_impl(int, int, Visitor&, VoidPtrCV)
>>>>>>> [with Visitor = boost::detail::variant::copy_into, VoidPtrCV = const
>>>>>>> void*, T0_ = int, T1 = double, T2 = std::basic_string<char,
>>>>>>> std::char_traits<char>,
>>>>>>> std::allocator<char> >, T3 = boost::detail::variant::void_, T4 =
>>>>>>> boost::detail::variant::void_, T5 = boost::detail::variant::void_, T6
>>>>>>> = boost::detail::variant::void_, T7 = boost::detail::variant::void_,
>>>>>>> T8 = boost::detail::variant::void_, T9 =
>>>>>>> boost::detail::variant::void_, T10 = boost::detail::variant::void_,
>>>>>>> T11 = boost::detail::variant::void_, T12 =
>>>>>>> boost::detail::variant::void_, T13 =
>>>>>>> boost::detail::variant::void_, T14 = boost::detail::variant::void_,
>>>>>>> T15 = boost::detail::variant::void_, T16 =
>>>>>>> boost::detail::variant::void_, T17 = boost::detail::variant::void_,
>>>>>>> T18 = boost::detail::variant::void_, T19 =
>>>>>>> boost::detail::variant::void_]::first_step, Visitor =
>>>>>>> boost::detail::variant::copy_into, VoidPtrCV = const void*,
>>>>>>> NoBackupFlag = boost::variant<int, double, std::basic_string<char,
>>>>>>> std::char_traits<char>, std::allocator<char> >,
>>>>>>> boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_>::has_fallback_type_]::next_step,
>>>>>>> Visitor = boost::detail::variant::copy_into, VPCV = const void*, NBF
>>>>>>> = boost::variant<int, double, std::basic_string<char,
>>>>>>> std::char_traits<char>, std::allocator<char> >,
>>>>>>> boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_, boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_,
>>>>>>> boost::detail::variant::void_>::has_fallback_type_]: Assertion
>>>>>>> `false' failed.
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> And the debugging points to this: "BOOST_ASSERT(false);"
>>>>>>> 
>>>>>>> /////////////////////////////////////////////////////////////////////
>>>>>>> // // ////// // (detail) function template visitation_impl
>>>>>>> //
>>>>>>> // Invokes the given visitor on the type in the given variant
>>>>>>> storage. //
>>>>>>> 
>>>>>>> template <
>>>>>>> 
>>>>>>>   typename W, typename S
>>>>>>> 
>>>>>>> , typename Visitor, typename VPCV
>>>>>>> , typename NBF
>>>>>>> 
>>>>>>> inline
>>>>>>> 
>>>>>>> BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
>>>>>>> 
>>>>>>> visitation_impl(
>>>>>>> 
>>>>>>>   int, int, Visitor&, VPCV
>>>>>>> 
>>>>>>> , mpl::true_ // is_apply_visitor_unrolled
>>>>>>> , NBF, W* = 0, S* = 0
>>>>>>> )
>>>>>>> 
>>>>>>> {
>>>>>>> 
>>>>>>> // should never be here at runtime:
>>>>>>> BOOST_ASSERT(false);
>>>>>>> typedef typename Visitor::result_type result_type;
>>>>>>> return ::boost::detail::variant::forced_return< result_type >();
>>>>>>> 
>>>>>>> }
>>>>>>> 
>>>>>>> 
>>>>>>> Any idea what's happening here?
>>>>>>> 
>>>>>>> Cheers, Tom
>>>>>>> 
>>>>>>> Am Montag 28 Juni 2010, um 15:44:05 schrieb Thomas Walter:
>>>>>>>> Hi Dane
>>>>>>>> 
>>>>>>>> The rendering with nik2img seems to work correctly:
>>>>>>>> $ nik2img.py test2.xml test2.png
>>>>>>>> generates this image:
>>>>>>>> http://img251.imageshack.us/img251/470/test2sz.png
>>>>>>>> 
>>>>>>>> The interesting thing is that with my program I get some of the
>>>>>>>> street names in the map so it seems to load the osm file and to
>>>>>>>> read it. And in fact it also takes about 2 seconds to render it
>>>>>>>> (256x256 pixels on an dual core pentium 2Ghz).
>>>>>>>> 
>>>>>>>> So imho the problem is neither the xml file nor the osm file nor the
>>>>>>>> mapnik installation. But maybe I did not select the correct
>>>>>>>> envelope?
>>>>>>>> 
>>>>>>>> Currently I am using this:
>>>>>>>>        map.zoom_all();
>>>>>>>> 
>>>>>>>> When selecting another envelope like this
>>>>>>>> 
>>>>>>>>     Envelope<double> bbox(50.9,-1.45,51.0,-1.35);
>>>>>>>>     map.zoomToBox(bbox);
>>>>>>>> 
>>>>>>>> it renders only the background.  Btw, the coordinates are taken from
>>>>>>>> the osm file:   <bound box='50.9,-1.45,51.0,-1.35'
>>>>>>>> origin='http://www.openstreetmap.org/api/0.5' />
>>>>>>>> 
>>>>>>>> Could this be the problem? If it is, how can I select the correct
>>>>>>>> bbox?
>>>>>>>> 
>>>>>>>> Cheers, Tom
>>>>>>>> 
>>>>>>>> Am Montag 28 Juni 2010, um 10:18:34 schrieb Dane Springmeyer:
>>>>>>>>> Thomas. Hard to say what is wrong. I'm traveling so I cannot
>>>>>>>>> currently dig up that osm plugin example map.   Can you render the
>>>>>>>>> map using nik2img and compare the results?
>>>>>>>>> 
>>>>>>>>> Dane
>>>>>>>>> 
>>>>>>>>> --- \o/ ---
>>>>>>>>> Sent from my phone
>>>>>>>>> 
>>>>>>>>> On Jun 25, 2010, at 12:24 PM, Thomas Walter
>>>>>>>>> <[email protected]>
>>>>>>>>> 
>>>>>>>>> wrote:
>>>>>>>>>> Hi there
>>>>>>>>>> 
>>>>>>>>>> I am trying to generate map tiles out of an osm-file, but for some
>>>>>>>>>> reason
>>>>>>>>>> mapnik has problems with the rendering. Often it generates only
>>>>>>>>>> the background
>>>>>>>>>> and if it renders more then it is only some random stuff.
>>>>>>>>>> 
>>>>>>>>>> When I try to render the test2.xml from
>>>>>>>>>> http://trac.mapnik.org/browser/trunk/plugins/input/osm
>>>>>>>>>> it generates this tile:
>>>>>>>>>> http://img145.imageshack.us/img145/8569/mapnikerror.png
>>>>>>>>>> 
>>>>>>>>>> I am using mapnik 0.7.0 from the ubuntu repositories.
>>>>>>>>>> 
>>>>>>>>>> The relevant source code (mainly taken from the examples) is:
>>>>>>>>>> datasource_cache::instance()->register_datasources
>>>>>>>>>> 
>>>>>>>>>>        ("/usr/lib/mapnik/0.7/input/");
>>>>>>>>>> 
>>>>>>>>>> freetype_engine::register_font
>>>>>>>>>> 
>>>>>>>>>>        ("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf");
>>>>>>>>>> 
>>>>>>>>>> Map map (tdim,tdim);
>>>>>>>>>> load_map(map,"/home/tom/Desktop/test2.xml");
>>>>>>>>>> map.zoom_all();
>>>>>>>>>> 
>>>>>>>>>> Image32 buf(map.getWidth(), map.getHeight());
>>>>>>>>>> agg_renderer<Image32> ren(map,buf);
>>>>>>>>>> ren.apply();
>>>>>>>>>> 
>>>>>>>>>> QImage image((uchar*)buf.raw_data(),map.getWidth(),
>>>>>>>>>> 
>>>>>>>>>>    map.getHeight(),QImage::Format_ARGB32);
>>>>>>>>>> 
>>>>>>>>>> Cheers
>>>>>>>>>> Tom
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Mapnik-users mailing list
>>>>>>>>>> [email protected]
>>>>>>>>>> https://lists.berlios.de/mailman/listinfo/mapnik-users
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> Mapnik-users mailing list
>>>>>>> [email protected]
>>>>>>> https://lists.berlios.de/mailman/listinfo/mapnik-users
>>>>> 
>>>>> _______________________________________________
>>>>> Mapnik-users mailing list
>>>>> [email protected]
>>>>> https://lists.berlios.de/mailman/listinfo/mapnik-users
> 

_______________________________________________
Mapnik-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/mapnik-users

Reply via email to