Thanks for your patience!
]]>Wait, I thought that was a hardware problem. Well, it used to be; now it's a new module to contribute to CPAN, a new web service, or maybe something not dreamed up yet. Thanks to a proliferation of inexpensive SBCs (Single Board Computers), such as Arduino and Raspberry Pi, and an amazing array of easy-to-use sensors and actuators, the lines between programming and hardware are blurring fast.
In these early days of the Internet of Things, Perl programmers have a special perspective to offer. Among its many virtues, Perl is often touted as a great "glue" language: we know how to take the good work of others and connect it together. Now, we can connect things to the real world.
The same strategies and techniques we use to hook programs together to present a unified whole can benefit the emerging embedded hacking world. Whether Perl, C, Python, or some other language, knowing how to take the parts and create a unified view for easy access to the resources is something we do very well.
Even if you know nothing at all about hardware, you can get started in minutes and make a leap from the virtual to the physical. Along the way, you can help demonstrate why Perl succeeded so well and persists today: the vision that things can work together, easily. Join us to make simple hardware easy and complicated hardware possible, even if you are not an engineer.
Come to the Perl Hardware Hackathon and help shape the future of Internet of Things and Perl’s place in it.
These are the ideas:
It would be good to bring these things:
Where you can buy hardware:
A few places for inspiration:
If you have more ideas or you're bringing some hardware to the hackathon, then please feel free to update the wiki.
Details of the event are as follows :
Schedule & venue: http://www.yapcna.org/yn2014/schedule
Pricing and registration: No payment or registration is required.
People to contact for more information:
Timm Murray
Robert Blackwell
This blog post is edited by (in no particular order) :
Upasana
Yaakov Sloman
Robert Blackwell
Timm Murray
Chris Prather
Mark Keating
Also, I compared newbies in Perl with other similar languages (Python, Ruby, PHP are similar to Perl, afait). I'm not saying that Perl doesn't have any newbies, it has newbies but less than other similar languages, the post (from Gabor's site which I added later on) shows it well.
Links(Perl companies & Perl success stories) & which you've shared are awesome :). Thanks for sharing them :).
]]>How I got into perl?
During my college winter vacations (dec, 2011 to jan, 2012), I was planning to learn something new. I picked up HTML/CSS (because I was quite interested in web development kind of stuff), but soon I realized that front-end stuff is not my forte & I should not spend more of my time on it. I discussed it with my brother & he suggested me to learn Perl.
I started with Beginning perl by Simon Cozens & liked it. Before perl, I did a fair amount of Java (for one of my college projects). I liked Java also, but later I got to know about its drawbacks as a language. I learnt Python & Ruby as well (but have not used them much). I solve Project Euler problems in my free time, for solving those problems, perl is my preferred choice. No one forces me to use Perl for those problems, but I do it on my own wish.
Only thing I dislike about Perl
It's very vast. Yes, I found it very vast, which sometimes create problems. But it's because Perl follows TIMTOWTDI which is both, good & bad.
A little bit about my real peers (who I met in person)
All of my real friends are living in India. Most of them are in Java, PHP & Python. As far as I remember, I have suggested all of them to learn Perl at one or the other point, but I've no idea why they didn't learn Perl.
A little bit about my virtual peers (who I met only on the internet)
I've a long list of virtual peers. Only one of them is from Perl community. Others are from Python. It's very much possible that it's just a co-incidence :).
A little bit about GNOME's Outreach Program for Women
I participated in GNOME's Outreach Program for Women during the last summer. I was shocked/sad to hear that there were very few applicants for Perl projects as compared to other projects. For more details, check out this blog post.
Oh yeah! OSCON started as a Perl conference!
I came to know about it via David E. Wheeler, then I read about it on Wikipedia.
But why do I care?
But why I'm writing this blog post?
I'm working on a talk on the topic "How to bring more newbies to Perl?" for YAPC::NA, 2014 & OSCON. Honestly speaking, I was short of content :(. I talked to Chris Prather about this. He said that he's been thinking about this since yrs :D. He gave me some valid points too (I've made a little bit of minor changes in these points) :
Summary of the responses I got:
Most of the above responses are from people who're doing perl from so many yrs (I think none of them is a newbie as of now, but I might be wrong), one from a person who started with perl 10 yrs ago, but left it because of syntax.
Now, you all can give your views in comments :)
Thanks to everyone who shared his/her views on this topic :)
Basic directory structured of the module:
Assuming, my module name is X::Y::Z, I need to create a directory with name X-Y-Z. Output of find command should look like this:
lib # all code goes in lib/
lib/X # code for X will go here
lib/X/Y # code for Y will go here
lib/X/Y/Z.pm # code for Z will go here
t/ # all tests will go here
dist.ini # explained below
For example : see this module.
Writing dist.ini:
Following is my dist.ini. I've pasted it below with comments for explaination.
name = Plack-Middleware-FixMissingBodyInRedirect
version = 0.01
author = Upasana <me@upasana.me>
license = Perl_5
copyright_holder = Upasana
; this plugin gathers all files in a dist,
; if root is not given it defaults to where dist.ini is located
[GatherDir]
; this plugin will add META.yml file to the dist
; META.yml contains information related to dist like abstract, author,
; which modules are required for building & testing the dist,
; which modules are required during runtime,
; pre-requisites etc.
[MetaYAML]
; for removing unwanted files, e.g. files starting a '.'
[PruneCruft]
; This plugin builds Makefile.PL, that uses ExtUtils::MakeMaker
; ExtUtils::MakeMaker create a module Makefile.
; (I found this thing very lengthy & very complicated,
; I've myself not understood it well).
[MakeMaker]
; will create a META.json, for replacing old style META.yml
; META.json contains same information as META.yml, but in JSON format
[MetaJSON]
; adds a LICENSE file containing the full text of dist's license
[License]
; adds a README file to the dist,
; citing the dist's name, version, abstract % license
[Readme]
; This plugin rip apart your kind of POD & reconstructs it as old real POD
; (I really don't know the difference between the two kinds of PODs though)
; By default, it'll modify the files under:
; :InstallModules - .pm/.pod files under lib/ directory
; :ExecFiles - executable files in the distribution
[PodWeaver]
; This plugin will read MANIFEST.SKIP file &
; skip all the files decalred in it, while building the dist
; My MANIFEST.SKIP contains this text:
; ^.*~$
; because I want to skip backup files, which starts with any character,
; but ends with '~'
[ManifestSkip]
; This plugin checks POD coverage of all subs,
; to indicate that some subs should be treated as covered,
; even if no documentation can be found, you can add:
; =for Pod::Coverage sub_name other_sub this_one_too.
; It generates xt/release/pod-coverage.t file
[PodCoverageTests]
; for checking POD syntax
[PodSyntaxTests]
; This plugin runs before a release happens,
; It'll extract to-be-released archive into a temporary directory,
; run all the tests, if tests fail then it'll abort the release,
; else it'll release the dist to CPAN & clean-up the temporary directory
[TestRelease]
; This plugin checks for correct line endings in the dist
; It generates xt/release/eol.t file
[EOLTests]
; This plugin allows the "dzil release" command to upload the dist
; to CPAN. It'll look for PAUSE account configuration in dist.ini
; (I would suggest to use the latter options for saving PAUSE configuration)
; or in ~/.dzil/config.ini in the following format:
; [%PAUSE]
; username = YOUR-PAUSE-ID
; password = YOUR-PAUSE-PASSWORD
; If above configuration doesn't exist, then it'll look into ~/.pause
; in the following format:
; user YOUR-PAUSE-ID
; password YOUR-PAUSE-PASSWORD
; If none of the above exists, then it'll prompt you for PAUSE credentials
[UploadToCPAN]
; This plugin prompts the author whether or not to continue before
; releasing the distribution to CPAN. It gives authors
; a chance to abort before they upload.
; The default is "no", but you can set the environment variable
; DZIL_CONFIRMRELEASE_DEFAULT to "yes" if you just want to hit enter to release.
[ConfirmRelease]
; This plugin will automatically extracts pre-requisties from your modules
; You can manually add pre-requisites by using Prereqs plugin
[AutoPrereqs]
Releasing dist to CPAN:
After writing dist.ini, you should test & build your dist & see if everything is fine in resulted tarball. For testing & building your dist, do
dzil test --all
dzil build
If everything goes well with the above commands, you can release your dist to CPAN, by doing
dzil release
Source:
I've taken most of the explanation from PODs of various Dist::Zilla::Plugin::* modules.
]]>