Christian Hansen
Recent Actions
-
Commented on Websockets in Catalyst
Nicely done! Informative and well put together....
-
Commented on Supercharge Event Loops with Thread::Subs
Perl’s ithreads work by cloning the entire interpreter for each new thread, which is significantly more expensive than using fork() with copy-on-write. It’s also crucial to carefully review all module dependencies before adopting ithreads, as many CPAN modules are neither...
-
Commented on Test2/Test::Builder Update from the QAH
These are fundamental concepts in any R&D, why should we be different?...
-
Commented on Test2/Test::Builder Update from the QAH
1) If it ain't broke, don't fix it! 2) Opt-in not opt-out! 3) Don't punish upstream authors/maintainers for your new fancy framework! Opt-in not Opt-out! -- chansen...
-
Commented on A Date with CPAN, Part 2: Target First, Aim Afterwards
First, I would like to apology for my first message, it came out a lot harsher than I intended! Just because Time::Piece is in core doesn't mean it's stable! Time::Piece has several quirks: Time::Piece->strptime() parses any given string as being...
-
Commented on A Date with CPAN, Part 2: Target First, Aim Afterwards
BTW, there is a reason for ISO 8601 and why Time::Moment implements it ;) -- chansen...
-
Commented on A Date with CPAN, Part 2: Target First, Aim Afterwards
You cannot parse an arbitrary date or date with time without heuristics, you have declared that you intend to use Date::Parse and Time::ParseDate to parse your dates, both of those modules uses heuristics. How do you intend to deal with...
-
Commented on A Date with CPAN, Part 1: State of the Union
Time::Moment doesn't have an explicit method for truncating, but you can truncate to day by calling the method ->at_midnight. You can also truncate to other calendar components by chaining the ->at_midnight call with a ->with_day_of_xxxx method call. Examples: $tm =...
-
Posted Calculating U.S Federal holidays with Time::Moment to Christian Hansen
… -
Posted Simple and efficient formatting of relative date/time using Time::Moment to Christian Hansen
#!/usr/bin/perl use warnings; use Carp qw[]; use Time::Moment 0.19 qw[]; sub YEAR () { 365.2425 } sub MONTH () { YEAR / 12 } sub DAY () { 1 } sub HOUR () { DAY / 24 } sub MINUTE () { HOUR / 60 } sub SECOND () { MINU… -
Commented on Time::Moment vs DateTime
And the benchmark:...
-
Commented on Time::Moment vs DateTime
Time::Moment only use gettimeofday(2) and localtime(3) to compute the difference. I did consider to add Panda::Date until I reviewed the source code. Your code isn't thread safe and you require 5.18 to compile it, and your naïve implementation of a...
-
Posted Let's talk about Time::Moment and round-trip of strings to Christian Hansen
In my previous blog post I wrote a lot more about Time::Moment, than appeared in the post (could have been my mistake due to a preview and error and a…
-
Commented on Time::Moment vs DateTime
I'm not sure what you are asking, if you think I didn't try to improve the performance of DateTime.pm, you think wrong (look at the changelog or ask Dave Rolsky). Time::Moment can never be "backwards" comparability with DateTime.pm due to...
-
Commented on A bit more about Time::Moment
While it would be technically possible, it would make the API confusing and fragile IMHO. I intend to add a Duration object (Time::Moment::Duration). $duration = $tm1->minus($tm2); $tm2 = $tm1->plus($duration); $tm2 = $tm1->minus($duration); $duration = $tm1 - $tm2; $tm2 = $tm1...
-
Commented on A bit more about Time::Moment
LOL, somewhere this blogpost got choped =(...
-
Posted A bit more about Time::Moment to Christian Hansen
In my previous blog post I mentioned the bottlenecks of DateTime and why I had to develop Time::Moment and it's underlying c library,
-
Commented on Time::Moment vs DateTime
I'm glad you like c-dt, Time::Moment only uses a fraction of the API povided by c-dt. As you might have seen c-dt provides calculation of easter (western/orthodox), efficient business day calculations and weekday calculations and a bit more. c-dt is...
-
Commented on Time::Moment vs DateTime
Thanks, I'll consider adding Class::Date and Panda::Date to the benchmark....
-
Commented on Time::Moment vs DateTime
Time::Moment represents an unambiguous point in time, but it's not fully time zone aware. If you have a local time (a point in time with an offset) you may need to use a time zone if you intend to perform...
-
Posted Time::Moment vs DateTime to Christian Hansen
In December last year released the first version of Time::Moment. I don't foresee any major changes in Time::Moment 0.16 API, so in next release I'll remove the "early preview release" notice in the description. I have been using 0.16 in…
-
Commented on YAPC::Asia Tokyo 2013: Fighting Legacy Code
If my URL::Encode::XS makes a difference you should try Unicode::UTF8 (also my module), it makes a huge difference in my deployments. -- chansen...
-
Commented on Coping with double encoded UTF-8
$UTF8_double_encoded is defined in the first code snippet. The usage of &utf8::is_utf8 is to determine to match Perl's internal representation of wide characters or the octet reprepresentation of UTF-8. -- chansen...
-
Commented on Tut # 7: jQuery, Ajax, xml, Perl, databases and utf8
1) There is no need for using the utf8 pragma unless your literal strings contains UTF-X. 2) Using Encode.pm's utf8 decoder is a bad idea for external/untrusted data since it's a superset of UTF-8 and therefore accepts ill-formed UTF-8 (as...
-
Commented on Date arithmetic can be dangerous
Just because you doesn't know how date arithmetic is done, doesn't meen it's dangerous! Assuming that a day consist of 60*60*24 seconds is ignorant!...
-
Commented on Perl regex escapes by version
Very useful! Thanks to you and Tom! -- chansen...
-
Commented on CPAN modules for generating passwords
Thanks for sharing, very useful post =)...
-
Posted What if sv_utf8_upgrade() used heuristic encoding? to Christian Hansen
Heuristic: decode as native unless is well-formed UTF-X:
sub heuristic_utf8_upgrade { utf8::upgrade($_[0]) unless utf8::decode($_[0]); return !!0; }Here is some code to play with:
#!/usr/bin/pe… -
Posted Coping with double encoded UTF-8 to Christian Hansen
A few months ago a client asked if could help them with a "double encoded UTF-8 data problem", they had managed to store several GB of data with "corrupted" UTF-8 (technically it's not corrupt UTF-8 since its well-formed UTF-8). During the process I developed several regexs that I would like to…
-
Commented on XS bits: Which class is this object blessed into?
perldoc.perl.org has anchors for perlapi.pod. sv_derived_from -- chansen...
Comment Threads
-
Christian Damen commented on
Time::Moment vs DateTime
Gonna migrate our PERL5 applications from DateTime => Time::Moment. Thanks for all the efforts.
-
TFBW commented on
Supercharge Event Loops with Thread::Subs
Thread::Subs spawns worker threads once at startup; the cost per sub-call involves making a shared clone of the arguments and managing the queues, not creating new threads. This is one of the reasons I went with a static worker pool model: all the threads are created early when the copy cost is smallest.
There are limitations associated with passing objects to and from thread subs, as not all objects meet the requirements of threads::shared data, but you can select which subs you want to parallelise. You can continue to use modules which are not thread-safe in the main thread.
… -
Nerdvana commented on
Websockets in Catalyst
Thanks!
-
john napiorkowski commented on
Websockets in Catalyst
Instead of reaching into $env, you want want to look at the -> io_fh method in Catalyst::Request. We added this and some other PSGI 'jailbreak' features to Catalyst about 13 years ago. Sadly the Advent site is gone but the articles remain on github:
https://github.com/perl-catalyst/2013-Advent-Staging/tree/master/1to4-Nonblocking-Streaming/eg
-
Nerdvana commented on
Websockets in Catalyst
Wow, indeed I missed this. To be fair, the mechanism of not writing the response as a side effect of accessing an attribute on the Request object is a bit unintuitive and undocumented... but if I had grepped the source for 'websocket' I would have found
```
# Support skipping finalize for psgix.io style 'jailbreak'. Used to support
# stuff like cometd and websockets
if($c->request->_has_io_fh) {
$c->log_response;
return;
}
```I remember digging through the source code in 2019 and finding that finalize_body and _build_write_fh w…
About blogs.perl.org
blogs.perl.org is a common blogging platform for the Perl community. Written in Perl with a graphic design donated by Six Apart, Ltd.