UPnP-IGD 1.0.0
Eric Hodel | Mon, 30 Jun 2008 06:45:00 GMT
UPnP-IGD version 1.0.0 has been released!
UPnP-IGD is a UPnP extension for Internet Gateway Devices that displays information about the device. UPnP-IGD is an example of the use of some UPnP APIs.
UPnP-IGD comes with the upnp_igd utility which outputs information like this:
Gateway at http://10.1.1.1/ Connected, up since 2008-06-29 03:31:00 (66123 seconds) Connection type: IP_Routed 384 Kb/s up, 1536 Kb/s down External IP address: 10.255.255.254 Port mappings: 0 UDP *:4502 -> 10.1.1.2:4500 "iC4502" 1 UDP *:5355 -> 10.1.1.2:5353 "iC5355" 2 UDP *:58712 -> 10.1.1.3:58712 "Skype UDP at 10.1.1.3:58712 (546)" 3 TCP *:58712 -> 10.1.1.3:58712 "Skype TCP at 10.1.1.3:58712 (546)" 4 UDP *:5353 -> 10.1.1.4:5353 "iC5353"
Unfortunately, UPnP-IGD does not allow anything to be set on the device, and has only been tested against miniupnpd.
UPnP 1.0.0
Eric Hodel | Mon, 30 Jun 2008 06:09:00 GMT
UPnP version 1.0.0 has been released!
UPnP-1.0.0 is an implementation of the UPnP protocol. The 1.0 release:
- Discovers UPnP devices and services via SSDP, see UPnP::SSDP
- Creates a SOAP RPC driver for discovered services, see UPnP::Control::Service
- Creates concrete UPnP device and service classes that may be extended with utility methods, see UPnP::Control::Device::create, UPnP::Control::Service::create and the UPnP-IGD gem.
- Does not support eventing
- Does not support server creation
UPnP comes with upnp_discover which searches for UPnP devices and dumps information about them and upnp_listen which will listen for device notifications.
Gem Dependencies
Eric Hodel | Mon, 23 Jun 2008 22:28:40 GMT
I was chatting with Yehuda Katz, and somehow we ended up talking about speed:
Eric Hodel: I don’t worry about inheritance
Eric Hodel: or speed, for that matter
Yehuda Katz: heh
Yehuda Katz: that’s why you wrote RubyInline?
Eric Hodel: Ryan wrote RubyInline because, roughly, “How hard could it be?”
Eric Hodel: and an intense hatred of C
This got me thinking, how long did it take from RubyInline to be written until it was actually used? The RubyGems answer is 151 days, and by ParseTree, but RubyInline is actually about 2 years older than its gem, first committed on 2002/09/05.
To figure this out, I wrote a script that walks all the gems and figures out when a gem was first released, when a gem was first mentioned in a dependency, and the time between the two. Today, the figures are:
681 of 3234 gems used as dependencies (21%) average time to first use is 148 days maximum time to first use is 1332 (dnssd)
You can get the full output in the gem dependency report (which updates weekly), and download the gem dependency script too.
RubyGems 1.2.0
Eric Hodel | Sun, 22 Jun 2008 03:32:00 GMT
Announce: RubyGems Release 1.2.0
Release 1.2.0 adds new features and fixes some bugs.
New features:
- RubyGems no longer performs bulk updates and instead only fetches the gemspec files it needs. Alternate sources will need to upgrade to RubyGems 1.2 to allow RubyGems to take advantage of the new metadata updater. If a pre 1.2 remote source is in the sources list, RubyGems will revert to the bulk update code for compatibility.
- RubyGems now has runtime and development dependency types. Use
#add_development_dependencyand#add_runtime_dependency. All typeless dependencies are considered to be runtime dependencies. - RubyGems will now require
rubygems/defaults/operating_system.rbandrubygems/defaults/#{RBX_ENGINE}.rbif they exist. This allows packagers and ruby implementers to add custom behavior to RubyGems via these files. (If the RubyGems API is insufficient, please suggest improvements via the RubyGems list.) /etc/gemrc(and windows equivalent) for global settings- setup.rb now handles—vendor and—destdir for packagers
- gem stale command that lists gems by last access time
Bugs Fixed:
- File modes from gems are now honored, patch #19737
- Marshal Gem::Specification objects from the future can now be loaded.
- A trailing / is now added to remote sources when missing, bug #20134
- Gems with legacy platforms will now be correctly uninstalled, patch #19877
- gem install --no-wrappers followed by gem install --wrappers no longer overwrites executables
- gem pristine now forces reinstallation of gems, bug #20387
- RubyGems gracefully handles ^C while loading .gemspec files from disk, bug #20523
- Paths are expanded in more places, bug #19317, bug #19896
- Gem::DependencyInstaller resets installed gems every install, bug #19444
- Gem.default_path is now honored if GEM_PATH is not set, patch #19502
Other Changes Include:
- setup.rb
- stub files created by RubyGems 0.7.x and older are no longer removed. When upgrading from these ancient versions, upgrade to 1.1.x first to clean up stubs.
- RDoc is no longer required until necessary, patch #20414
- gem server
- Now completely matches the output of gem generate_index and has correct content types
- Refreshes from source directories for every hit. The server will no longer need to be restarted after installing gems.
- `gem query—details` and friends now display author, homepage, rubyforge url and installed location
- gem install without -i no longer reinstalls dependencies if they are in GEM_PATH but not in GEM_HOME
- Gem::RemoteFetcher now performs persistent connections for HEAD requests, bug #7973
For a full list of changes to RubyGems and the contributor for each change, see the ChangeLog file.
Special thanks to Chad Wooley for backwards compatibility testing and Luis Lavena for continuing windows support.
How can I get RubyGems?
NOTE: If you have installed RubyGems using a package system you may want to install a new RubyGems through the same packaging system.
If you have a recent version of RubyGems (0.8.5 or later), then all you need to do is:
$ gem update --system (you might need to be admin/root)
(Note: You may have to run the command twice if you have any previosly installed rubygems-update gems).
If you have an older version of RubyGems installed, then you can still do it in two steps:
$ gem install rubygems-update (again, might need to be admin/root) $ update_rubygems (... here too)
If you don’t have any gems install, there is still the pre-gem approach to getting software … doing it manually:
- DOWNLOAD FROM: http://rubyforge.org/frs/?group_id=126
- UNPACK INTO A DIRECTORY AND CD THERE
- INSTALL WITH: ruby setup.rb (you may need admin/root privilege)
To File Bugs
The RubyGems bug tracker can be found on RubyForge at: http://rubyforge.org/tracker/?func=add&group_id=126&atid=575
When filing a bug, `gem env` output will be helpful in diagnosing the issue.
If you find a bug where RubyGems crashes, please provide debug output. You can do that with `gem—debug the_command`.
Thanks
Keep those gems coming!
Jim & Chad & Eric (for the RubyGems team)
Return of Syck
Eric Hodel | Thu, 12 Jun 2008 18:30:20 GMT
From #rubinius, the royal struggle between syck and RbYAML.
Defiler: re rbyaml also
Defiler: Why aren't we using syck though?
Defiler: rbyaml is totally not compliant with what MRI is expecting to
have happen
drbrain: syck period, or the syck extension from MRI?
Defiler: "Why are we using rbyaml" is what I should have said, I guess
drbrain: Back in Ye Olden Times of Late Last December
drbrain: We had a wrapper for the syck library that was not MRI's syck
extension
drbrain: For in Ye Olden Days, Fair Subtend was not so Fair
drbrain: Thus, a Newcomer was Raised to Ye Throne of YAML
drbrain: RbYAML
drbrain: Now, with the waxing power of Subtend, the MRI syck extension
may reclaim its Rightful Crown

Articles