Planet Jabber

Distribuir contenido
Planet Jabber - http://planet.jabber.org/
Actualizado: hace 1 hora 8 mins

Tigase Blog: Editing Server Settings via XMPP

16 March, 2016 - 02:47
Almost every application written has some way you can change how it behaves. Some are more difficult to change than others, being locked behind options and run commands. Others, like Tigase, offer a number of ways you can configure the software allowing the user to choose the most convenient way to change settings

ProcessOne: IoT Studio #1 Video and Slides

14 March, 2016 - 11:07

This is the video recording of ProcessOne IoT Studio session #1.

At the core of the discussion is an introduction to Internet of Things protocols.

Here are the topics / questions that we covered during that session:

  • What are the main classes of protocols for the Internet of Things ?
  • What are the strengths of XMPP for the Internet of things ?
  • What are the main XMPP Extensions for building the Internet of Things ?
  • How can I leverage XMPP to build a real device / appliance ?

As such, the session ends with a hands-on demonstration of a Soundcloud connected Jukebox built with:
– Raspberry Pi 2
– Connected to ejabberd
– Client is developed in Go using Go XMPP library Gox.

Example code for the XMPP jukebox is available on Github: xmpp_jukebox.go

The full video recording of that session is now online and available for everyone to enjoy.

Please, send us your IoT questions for the next event !

For those who just need access to the slides, they are on Slideshare:

Tigase Blog: Windows Integration Improved

11 March, 2016 - 21:17

Recently, we've added a number of fixes to the version 7.0.3 of Tigase XMPP server which includes a number of fixes that improves operation of the software. These fixes include an easier time when setting up and operating Tigase in a Windows operating environment. When it comes to operating an XMPP server, a Windows environment might not be the first place you think of, however, Tigase can run in many Windows environments just fine! With the new maintenance version, we've improved the ease and operation of Tigase XMPP Server in this popular operating system.

ProcessOne: Experimental MIX Support for Group Conversations added to ejabberd

11 March, 2016 - 17:43

MIX stands for Mediated Information eXchange and is defined in draft of XEP-0369.

It is a work in progress extension for the XMPP protocol to build a group messaging protocol that does not rely on the presence mechanism. It is designed to overcome the limitation of XEP-0045 Multi-User Chat, in a context where most clients are mobile clients.

To do so, MIX is built on top of PubSub (XEP-0060) and use different nodes per channel to separate event types. There is five nodes to support five different types of event for each MIX conversation:

  • Messages
  • Presence
  • Participant list changes
  • Subject update
  • Conversion configuration changes

This is a work in progress, but this is a very important task and we are happy to provide the very first server implementation of the Mix protocol to get up to speed on that specification.

Here is a short walk through what can already be done.

Please, note that this is a work in progress and that the specification can (and will) change significantly before it becomes stable. This blog post is based on XEP-0369 v0.1.

Configuration

Configuration is simple:

  • You need to build ejabberd from source, latest master version.
  • You need to add mod_mix in ejabberd configuration, modules section:

    modules: mod_mix: {}
  • Make sure you have pubsub enabled. Default configuration is fine:

    modules: mod_pubsub: access_createnode: pubsub_createnode ignore_pep_from_offline: true last_item_cache: false plugins: - "flat" - "hometree" - "pep"
Usage

There is no client supporting MIX yet so here is how it works directly at XMPP stream level.

Here are real-life examples from playing with our MIX implementation:

Joining a MIX conversation

You can join a MIX conversation if you know its jid (id@mixservice):

You can send a join IQ:

<iq type='set' to='hellomix@mix.localhost' id='E6E10350-76CF-40C6-B91B-1EA08C332FC7'> <join xmlns='urn:xmpp:mix:0'> <subscribe node='urn:xmpp:mix:nodes:messages'></subscribe> <subscribe node='urn:xmpp:mix:nodes:presence'></subscribe> <subscribe node='urn:xmpp:mix:nodes:participants'></subscribe> <subscribe node='urn:xmpp:mix:nodes:subject'></subscribe> <subscribe node='urn:xmpp:mix:nodes:config'></subscribe> </join> </iq>

You receive IQ that confirms success:

<iq from="HelloMix@mix.localhost" type="result" to="admin@localhost/MacBook-Pro-de-Mickael" id="E6E10350-76CF-40C6-B91B-1EA08C332FC7"> <join xmlns="urn:xmpp:mix:0" jid="admin@localhost"> <subscribe node="urn:xmpp:mix:nodes:messages"></subscribe> <subscribe node="urn:xmpp:mix:nodes:presence"></subscribe> <subscribe node="urn:xmpp:mix:nodes:participants"></subscribe> <subscribe node="urn:xmpp:mix:nodes:subject"></subscribe> <subscribe node="urn:xmpp:mix:nodes:config"></subscribe> </join> </iq>

Subscribers on the participants node for that channel will also receive the new list of participants (so, including ourselves in that case):

<message from="hellomix@mix.localhost" type="headline" to="admin@localhost/MacBook-Pro-de-Mickael"> <event xmlns="http://jabber.org/protocol/pubsub#event"> <items node="urn:xmpp:mix:nodes:participants"> <item id="3d1766e2bd1b02167104f350f84b0668f850ef92"> <participant xmlns="urn:xmpp:mix:0" jid="admin@localhost"></participant> </item> </items> </event> </message>

Note: Nickname registration support is not yet implemented in our code.

Sending and receiving messages

You can now start chatting with your peers, by publishing on the message node:

<iq type='set' to='HelloMix@mix.localhost' id='mix2'> <pubsub xmlns='http://jabber.org/protocol/pubsub'> <publish node='urn:xmpp:mix:nodes:messages'> <item> <body xmlns='jabber:client'>Hi, there !</body> </item> </publish> </pubsub> </iq>

Server confirms publishing:

<iq from="HelloMix@mix.localhost" type="result" to="admin@localhost/MacBook-Pro-de-Mickael" id="mix2"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <publish node="urn:xmpp:mix:nodes:messages"> <item id="5B1AB7F432DA5"></item> </publish> </pubsub> </iq>

Message is received by all subscribers on the message node on that MIX conversation:

<message from="hellomix@mix.localhost" type="headline" to="admin@localhost/MacBook-Pro-de-Mickael"> <event xmlns="http://jabber.org/protocol/pubsub#event"> <items node="urn:xmpp:mix:nodes:messages"> <item id="5B1AB7F432DA5"> <body xmlns="jabber:client">Hi, there !</body> </item> </items> </event> </message> Sending and receiving presence

The presence in MIX conversation is conceptually independent from presence stanzas in standard XMPP protocol. In MIX, the presence is simply a state you want to broadcast to the subscribers of the presence node in the conversation.

The presence is broadcast through the Mix conversion, in a similar way to message:

<iq type='set' to='HelloMix@mix.localhost' id='mix3'> <pubsub xmlns='http://jabber.org/protocol/pubsub'> <publish node='urn:xmpp:mix:nodes:presence'> <item> <presence xmlns='jabber:client'> <c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://code.google.com/p/exodus' ver='QgayPKawpkPSDYmwT/WM94uAlu0='></c> </presence> </item> </publish> </pubsub> </iq>

As you can see, presence is model on XMPP presence specification. In that case, we included caps info for example in our broadcast.

Server confirms presence broadcast to sender:

<iq from="HelloMix@mix.localhost" type="result" to="admin@localhost/MacBook-Pro-de-Mickael" id="mix3"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <publish node="urn:xmpp:mix:nodes:presence"> <item id="5B1ACB064CE"></item> </publish> </pubsub> </iq>

And finally, participants to conversation subscribe to presence will receive presence update:

<message from="hellomix@mix.localhost" type="headline" to="admin@localhost/MacBook-Pro-de-Mickael"> <event xmlns="http://jabber.org/protocol/pubsub#event"> <items node="urn:xmpp:mix:nodes:presence"> <item id="5B1ACB064CE"> <presence xmlns="jabber:client"> <c xmlns="http://jabber.org/protocol/caps" node="http://code.google.com/p/exodus" ver="QgayPKawpkPSDYmwT/WM94uAlu0=" hash="sha-1"></c> </presence> </item> </items> </event> </message>

The presence at the moment is somewhat in between in current state of the XEP. To retract the presence you send a standard XMPP presence of type unavailable:

<presence type='unavailable' to='HelloMix@mix.localhost'></presence>

Server confirms retracting the presence item:

<message from="hellomix@mix.localhost" type="headline" to="test@localhost/MacBook-Pro-de-Mickael"> <event xmlns="http://jabber.org/protocol/pubsub#event"> <items node="urn:xmpp:mix:nodes:presence"> <retract id="5B1ACB064CE"></retract> </items> </event> </message>

This part is still unfortunate as it still makes it difficult to manage presence on mobiles were the status, that is the ability to receive messages, is somewhat disconnected from the session state. This is likely an area that will change significantly in the future.

Another thing to note is that for the moment, all your presence publications are kept as items, but going offline retract them all.

Querying participants list

A participant can always get list of participants with a Pubsub query on node items for the conversation:

<iq type='get' to='HelloMix@mix.localhost' id='mix4'> <pubsub xmlns='http://jabber.org/protocol/pubsub'> <items node='urn:xmpp:mix:nodes:participants'></items> </pubsub> </iq>

The conversation will reply with list of participants:

<iq from="HelloMix@mix.localhost" type="result" to="admin@localhost/MacBook-Pro-de-Mickael" id="mix4"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items node="urn:xmpp:mix:nodes:participants"> <item id="1a3b7690ea2608d13988aca8339acf759daa8483"> <participant xmlns="urn:xmpp:mix:0" jid="test@localhost"></participant> </item> <item id="3d1766e2bd1b02167104f350f84b0668f850ef92"> <participant xmlns="urn:xmpp:mix:0" jid="admin@localhost"></participant> </item> </items> </pubsub> </iq> Querying the presence

You can query the presence as well:

<iq type='get' to='HelloMix@mix.localhost' id='mix5'> <pubsub xmlns='http://jabber.org/protocol/pubsub'> <items node='urn:xmpp:mix:nodes:presence'></items> </pubsub> </iq>

and you get a list of “available” users:

<iq from="HelloMix@mix.localhost" type="result" to="admin@localhost/MacBook-Pro-de-Mickael" id="mix5"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items node="urn:xmpp:mix:nodes:presence"> <item id="5B1ADB972CEC"> <presence xmlns="jabber:client"> <c xmlns="http://jabber.org/protocol/caps" node="http://code.google.com/p/exodus" ver="QgayPKawpkPSDYmwT/WM94uAlu0=" hash="sha-1"></c> </presence> </item> </items> </pubsub> </iq> Getting the list of messages

With a similar pubsub query, you can retrieve the list of messages:

<iq type='get' to='HelloMix@mix.localhost' id='mix5'> <pubsub xmlns='http://jabber.org/protocol/pubsub'> <items node='urn:xmpp:mix:nodes:messages'></items> </pubsub> </iq>

Server replies with list of messages:

<iq from="HelloMix@mix.localhost" type="result" to="admin@localhost/MacBook-Pro-de-Mickael" id="mix5"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items node="urn:xmpp:mix:nodes:messages"> <item id="5B1ABD0BD973D"> <body xmlns="jabber:client">Hi, there is is test !</body> </item> <item id="5B1AB7F432DA5"> <body xmlns="jabber:client">Hi, there !</body> </item> </items> </pubsub> </iq>

As you can see there, there is need for improvement to rely on this list for history of messages. First, you do not have message attribution (see Caveats section), but this can be worked out.
Also, you do not have timestamp on the messages.

This part will likely change a lot in the future. I expect that a link with Message Archive Management support will be a more efficient and more consistent way to deal with message history.

Caveats

At the moment it is unclear from XEP-0369 example how you match a message you receive to a participant. We are going to improve our implementation in the following way:

  1. Add a participant id on the item tag when broadcasting new participant.
  2. Add the participant id on the published items.
  3. Add the participant id in participants list on the publisher

Another issue is that the current specification and implementation will have trouble scaling and offer plenty of opportunities for “Denial of Service” attacks. This is something that will change in the future as the specification matures. However, currently, do not deploy or rely on this implementation for large-scale production services. The work is still an experiment to progress on the specifications by offering client developers to give real life feedback on a reference implementation of the current specification.

Conclusion

We are only at the beginning of MIX. However, we are excited to have reached a point where it is already usable in some cases.

It is still missing on administrative tasks, right management, user invitations, relationship with MAM archiving and probably a lot more. And we need consolidations on participants message attribution. However, we want to iterate fast with client developers to prototype implementation changes and have meaningful and real life feedback to improve XEP-0359.

Send us your feedback !

Monal IM: Monal 2.9 for iOS Published in the App Store

11 March, 2016 - 14:42

Monal 2.9 for iOS is now available.

Latest Version in iOS App Store

Tigase Blog: Tigase v7.0.3 Release

10 March, 2016 - 18:49
Tigase v7.0.3 ReleaseAnnouncing Release of Tigase XMPP Server v7.0.3! A new Maintenance Release has been published for Tigase with a number of fixes included below. New Features and Changes

ProcessOne: XMPP Academy #4: March 29th

10 March, 2016 - 15:06

Our now popular XMPP online video Q&A session is back for a third session on March 29th. The goal of the XMPP Academy is to help developers get the big picture and get XMPP architecture and design tips from 15-years-experience XMPP experts.

We are addressing all XMPP developers interested in asking questions on specific XMPP topics. They can send us their XMPP related questions and selected questions will be answered during a live private session for our ejabberd SaaS customers. The recording will be available to anyone to see later on-demand on ProcessOne Youtube channel.

Our third session will takes place on March 29th at 6pm CET. If you are an ejabberd SaaS customer, you can save the date, as you will soon receive a free registration link to attend live and ask post event questions. If you want your questions to be covered live in the main talk part, please, still them send them beforehand as well.

For other XMPP developers, you are very welcome to send us your questions before March 29th through our contact form. We will select the most interesting topics / questions to reply to.

We are waiting for your input !

In the meantime, you can catch up on the previous XMPP Academy sessions:

Monal IM: Monal OSX 1.3 Published in Mac App Store

8 March, 2016 - 15:36

Showing once again how much faster the Mac App Store review process is, Monal  1.3 for OS X has been released.  If you find the app useful, please review it in the app store to help others discover it.  Reviews are reset on every release and I don’t pester people for reviews, so often there are no reviews on the app despite the fact that thousands of people use it.

https://itunes.apple.com/us/app/monal-free-xmpp-chat/id1060957067?mt=12

ProcessOne: XMPP Radar Newsletter #8

7 March, 2016 - 09:55

Welcome to the 8th issue of our newsletter. Last month was probably one of the milestones for XMPP and communication systems in general. With IM and IoT on the rise, exciting times are ahead. You can subscribe to the XMPP Radar newsletter and receive it in your inbox at the end of each month. Here are the links we found interesting in February:

The fall… and rise and rise and rise of chat networks

At the end of October 2014, something very important came to an end. After 15 years of changing the way people communicated forever, Microsoft closed down its MSN Windows Live service. Originally named MSN Messenger, its demise was not an overnight failure.

WhatsApp has a billion users, and it got there way quicker than Gmail did

WhatsApp, the messaging platform owned by Facebook, reported it had reached a billion monthly active users, bolstering its position as the world’s most popular messaging app.

Chat service architecture: League of Legends is running ejabberd

Over time, as the number of League of Legends players grew, Riot Games started encountering some trouble: the chat servers began overloading the MySQL master instance. Players were seeing issues when loading their rosters, inviting new friends, or editing player notes. This article explains how they overcame this problem using ejabberd and Riak.

Reflections on the XMPP Summit 2016

Steffen Larsen reports on the latest XMPP Summit: “I’ve been writing most of this in the airplane. I have to because my head is full of ideas and new thoughts are buzzing! Now I finally had the time to write the last bit and parts which was stuck in my brain.”

Saros, a real-time distributed software development via XMPP

What is Saros? Saros is an Eclipse plugin for distributed collaborative software development that can support arbitrarily many participants at once. All members of a session have an identical copy of Eclipse projects and Saros keeps these copies in sync as editing progresses.

ejabberd 16.02 released: Happy Leap Day

To celebrate leap day, we are happy to release ejabberd 16.02, which mark huge leap for ejabberd both in terms of features and improvements. In terms of features, we see in this release the culmination of our work in several areas.

ejabberd and the Google Summer of Code 2016

ejabberd project and developers are involved this year again as mentors in Google Summer of Code 2016 initiative, as members of the BEAM Community. This blog post explains what it could mean for you as a student wanting to contribute to our project.

Tigase Blog: Using Redmine for Projecting Tracking

4 March, 2016 - 23:21

When multiple developers are working on multiple projects, it can be difficult to track who is working on what, and how far along they are. Luckily there are a number of solutions available, particularly for developers, to help manage the work loads.

Tigase Blog: Tigase Mailer

3 March, 2016 - 02:01

Since Tigase can run silent in a server you may not wish to check on a regular basis, monitoring the program by digging through logs can be cumbersome. So how to trigger warnings about server health and program operation? Good news! We've added the Tigase Mailer extension to send an E-mail to one or many recipients when a particular event is triggered, even logged events can be sent.

ProcessOne: Elixir Programming Language Popularity is Growing

1 March, 2016 - 16:50

One of the nice gems (pun intended) found in
The RedMonk Programming Language Rankings: January 2016, is the recent growth of Elixir popularity:

Elixir: The Erlang-friendly language made a notable jump this time around. The last quarter we surveyed languages, Elixir placed at #60. As of this January, it had jumped to #54. While we caution against reading too much into specific numerical differences, the more so the further down the list one goes, this change is notable as it suggests that the language – a darling amongst some language aficionados – is finally seeing some of the growth ourselves and others have expected from it. Interestingly, Erlang did not benefit from this bounce, as it slid back to #26 after moving up to #25 last quarter.

I bet this is linked to Phoenix hitting version 1.0 and the resulting impact it had on Web development for scalable websites.

Anyway, it is nice to see that Programming Language getting traction. Congrats to the Elixir team !

You can read the whole blog post from Redmonk here:
The RedMonk Programming Language Rankings: January 2016

ProcessOne: ejabberd and the Google Summer of Code 2016

1 March, 2016 - 15:06

ejabberd project and developers are involved this year again as mentors in Google Summer of Code 2016 initiative, as members of the BEAM Community. This blog post explains what it could mean for you as a student wanting to contribute to our project.

What is Google Summer of Code ?

Google Summer of Code (GSoC) is an annual program in which Google awards stipends (US$5,500) to all students who successfully complete a requested free and open-source software coding project during the summer. The goal is to compensate your time while giving you the ability to strengthen your programming skills while working on Open Source projects.

We have been contributing ideas and will be helping students enrolled in projects for GSOC under the BEAM Community organisation: Beam Community: List of GSoC project ideas.

Students are free to get involved in suggested ideas, but can also propose new project ideas on their own.

Why get involved in GSoC, working on ejabberd ?

For a student, GSoC is a great opportunity to learn new skills, learn to work with a team of experienced developers, help open source projects and get a fair compensation.

ejabberd is one of the most used XMPP server in the world, deployed on huge scale deployments in large corporations. This is a unique chance to get your code running for tens of millions users and have a real impact with your code.

The suggested ideas should be quite interesting and challenging but still manageable to be completed during the summer. Of course, we are open to your own suggestions.

Here are a few of the ideas we have put together, in no particular order:

Students can contribute either in Erlang or Elixir programming languages.

What’s next ?

So, what is the process ?

You will need to submit a proposal on GSoC website, for the Beam Community. Students should pick their projects and submit proposals from 14th to 25th March 2016. Do not be afraid, you are not alone and, as experienced mentors, we are here to help. You can get in touch with our team (On XMPP groupchat, of course), in the chat room gsoc@conference.process-one.net.

Please, make sure that you are eligible before investing time on the project. Details are available on Google Summer of Code 2016 FAQ -> Students.

The whole ejabberd community is looking forward to working with you !

ProcessOne: ejabberd 16.02: Happy Leap Day

29 February, 2016 - 18:12

To celebrate leap day, we are happy to release ejabberd 16.02, which mark huge leap for ejabberd both in terms of features and improvements.

In terms of features, we see in this release the culmination of our work in several areas:
– Support for flexible offline retrieval, aka XEP-0013. This is a big win for mobile developers.
– Improvements on archiving, with Message Archive Management (MAM) now supporting version 0.4.1 of the specifications.
– Full Elixir compliant packaging with the ability to deploy ejabberd as an Hex.pm dependency from your own application. See ejabberd on hex.pm.
– Performance improvement with faster and more memory efficient XML parsing and TLS encryption. You can also refer to our previous blog post: ejabberd Massive Scalability: 1 Node — 2+ Million Concurrent Users
– Better stream compression with the ability to enable stream compression after SASL.
– Easier adoption of ejabberd with a new migration script from Prosody XMPP servers.

As usual, this version is the product of a great community team work, with special kudos to Holger, Alexey, Evgeny, Pawel, Christophe, Badlop, Mickaël for their large contributions in this release.

That community effort is what makes ejabberd is such a popular project, with 2260+ stars on Github, availability in most Linux distributions and showing amazing number of downloads ! Thank you all !

Here is the full list of changes:

Changes New XMPP Extensions support Admin
  • New migration script from Prosody to ejabberd
  • Fix --disable-debug compilation flag
  • don’t escape ERL_OPTIONS
  • Two new global timeouts configurable: c2s_hibernate, receiver_hibernate
  • Make it possible to define sm_db_type per virtual host
  • configuration checker: Describe option type in code for domain_balancing option
  • Log failed SQL requests
  • Include mod_muc.hrl and fix records
  • mod_http_upload: Expand docroot before using it, also expand @HOST@
Commands
  • New import_prosody command
  • Start documenting arguments in mod_admin_extra commands
  • We added a way to get all ejabberd_commands, not only those that was registered
  • Allow to pass \n in argument to ejabberdctl
  • Add error handling to send_stanza command
  • Fix format_result so get_room_options command works again after commit reference aa5caa3
Dependencies
  • lager is the default (and only) logging module and we removed p1_logger
  • Handle spaces in vsn attribute of app file when installing deps
  • Renamed dependencies and modules for consistency but also to reflect huge performance gains:
    . p1_iconv -> iconv
    . p1_stringprep -> stringprep
    . p1_stun -> stun
    . p1_tls -> fast_tls
    . p1_yaml -> fast_yaml
    . p1_zlib -> ezlib
Message Archive Management
  • Advertise MUC MAM v0.4.1 in room JID’s disco#info
  • Add “delete_old_mam_messages” admin command
  • Add ‘from’ attribute to tag
  • Add “request_activates_archiving” option
  • Respond to form requests
  • Support XEP-0313 v0.2 MUC archive queries
  • Check whether MUC message is desired
  • Reject -based paging
  • Limit result set page size
  • Sort messages returned by Mnesia
  • Strip existing JID tags from MUC messages
  • Expose MUC occupant JID in more cases
  • Don’t let outcasts access MUC archive
  • Send new preferences when they are set
  • Stream management (XEP-0198): Let MAM take care of pending messages
GroupChat
  • Send presence with code 170 in initial presence from MUC
  • Add most status codes only to initial MUC presence
  • mod_muc_room: Don’t expose JIDs in anonymous rooms
  • mod_muc_room: Let members see admin/owner JIDs
PubSub
  • Fix presence-based delivery
  • Make caps warning less confusing
  • Fix host/serverhost usage
  • Add support of pubsub#itemreply=publisher
Other
  • Accept stream compression request after SASL
  • Make C2S session establishment optional to better conform to XMPP specifications and still be friendly with older clients.
  • MUC: new regexp_room_id option to limit possible room names.
  • ODBC: Set utf8mb4 charset on MySQL connection to support emoji storage as default.
  • LDAP: Improve LDAP shared roster support.
  • mod_register_web: Allow setting host when deleting account or changing password.
  • Rename timestamp_to_iso functions in jlib.
  • Stream management (XEP-0198): Fix session timeout corner case.
  • Several improvements in Elixir support.
  • Updated many translations.
  • Improve web admin stylesheet to fix rendering issues in some browsers.
Packaging
  • ejabberd is now available as an hex.pm package and can be easily included as a dependency in any Elixir or Erlang application.
  • Installers include latest OpenSSL patches.
Feedback

As usual, the release is tagged in the Git source code repository on Github.

The source package and binary installers are available at ProcessOne.

If you suspect that you’ve found a bug, please search or fill a bug report on Github.

Swift Blog: Swift 3.0 Released

29 February, 2016 - 00:00

We’re pleased to announce that Swift 3.0 has reached full release status. The packages can be downloaded from the releases page and a full list of new features can be found in the 3.0 changelog.

We encourage everyone to get the new build and try it out, and give us feedback on our latest release.

Swift Blog: Swift 3.0 Released

29 February, 2016 - 00:00

We’re pleased to announce that Swift 3.0 has reached full release status. The packages can be downloaded from the releases page and a full list of new features can be found in the 3.0 changelog.

We encourage everyone to get the new build and try it out, and give us feedback on our latest release.

Swift Blog: Swift 3.0 Released

29 February, 2016 - 00:00

We’re pleased to announce that Swift 3.0 has reached full release status. The packages can be downloaded from the releases page and a full list of new features can be found in the 3.0 changelog.

We encourage everyone to get the new build and try it out, and give us feedback on our latest release.

Monal IM: Monal OSX 1.3 and iOS 2.9

26 February, 2016 - 05:22

Monal OSX 1.3 and iOS 2.9 are almost ready.  I have put up what I hope will be the final OS X beta and will begin beta testing iOS today.

This is a major update.  iOS does not run on iOS 6 anymore. iOS 7 isn’t actually supported but will still run.

There are many major improvements.  Most notably:

  1. XEP-0313: Message Archive Management to download chat history.
  2. XEP-0352: Client State Indication for dramatic reduction on power use.
  3. XEP-0363: HTTP File Upload to send images in conversations
  4. Dropbox integration to share files. Can be used when HTTP upload isn’t available.
  5. Fixed several issues with periodic disconnects when in the background
  6. Sped up the app significantly. In particular, logging in.
  7. Rosters download correctly again and contacts should have proper full names instead of id shown.
  8. Fixed bugs with Google logins
  9. iOS text input will grow to multiple lines

Peter Saint-Andre: Ethics and Politics

19 February, 2016 - 00:00
My understanding of philosophy is simple: the love and practice of wisdom. Immersed as I am in the ancients and a few moderns such as Thoreau, I try to live a better life and to have a positive influence in the limited sphere in which I can be effective: to be a good husband, a good friend, a good co-worker, a good neighbor; to exercise financial prudence and mental clarity and physical health and environmental stewardship over my little plot of land; to help make my community a better place to live in and my company a better place to work in; and, at a more personal level, to achieve emotional self-control, to make the best use I can of my limited time on this earth, and to continually improve as a human being. This kind of self-goverance sounds so simple, yet in practice I find it continually challenging.

Peter Saint-Andre: Living in Earnest: Kurt Keefner's Concrete Ethics

19 February, 2016 - 00:00
Have you ever noticed those people who live in their own reality, and who go through life as if they're the center of the world? Whether their act is being cool or earthy, macho or sweet, they're essentially pretending their way through life instead of authentically living it.