Skip navigation
1 2 3 4 5 Previous Next

Jive Developers

169 posts

extension-128.pngWhat is Swagger (a.k.a. The Open API Initiative)

Swagger is a growing REST API documentation standard that comprises multi-stages of the software development life-cycle.  The standard is designed to allow architects, developers and business users to collaborate at early stages about capabilities of the API, while enabling developers to continue that momentum into the software developer stages with tools like auto code and documentation generation.

 

For more details about Swagger, you can check out the following links:  http://swagger.io/

 

Why Swagger for Jive

When you look at what Swagger is trying to accomplish with bringing teams together, enabling faster productivity and creating awesome user experiences with documentation ... there seemed to be a natural alignment with what Jive does best.  This observations was supported by conversation at JiveWorld16, (see: JiveWorld16 Developer Conference ... It's a Wrap!), where there was a lot of expressed interest about Jive, developer documentation and specifically Swagger.  I must have talked to at-least 10 developers about this very use-case, and as a result of these conversations...a lot of really cool ideas bubbled to the surface.  In standard Ryan fashion, I started to tinker.   Tinkering led to coding, deploying and then testing. Before I knew it, I was putting the final touches on an early version of an add-on I like to call, Swagger for Jive!

 

What Does It Do

In general, the current version of Swagger for Jive add-on makes it such that the Swagger UI view of a given Swagger specification file can be viewed in-context in a Jive community. 

 

One of the biggest requires for this solution that I wanted to impose, was that it had to NOT require middleware!  This was to make it easier for developers to give it a try!

 

Some of those experiences are listed below:

 

Canvas View (Apps Menu > Swagger for Jive)Custom View TileSimple Stream w/External Object Support

screenshot-1.png?raw=true

  • Creates a link on the navigation bar (Apps > Swagger for Jive) to view a (non-place) Swagger specification.
  • Pass it Gadget URL Parameters to render a different Swagger specification URL.
  • For practical uses, this experience will most likely change to a list of API specifications to navigate to and view.

screenshot-2.png?raw=true

  • Embed a Swagger UI specification into a Custom View Tile located on a Tile Page. 
  • Configure the Swagger specification URL via the Tile Configuration experience.
  • Decorate your documentation page with additional information using other Tiles to customize the experience.

screenshot-3.png?raw=true

  • Using a Simple Stream Tile, create activity in a Jive place with a simple HTTP POST with meta-data that points to specific Swagger specification file(s).
    • Great for automated build integrations into Jive
  • Can push in either a Swagger specification URL or the entire Swagger specification JSON.

Other Use-Cases

  • Place "App" Tab - Configure a Place (Manage > Settings > Configure) to map to a specific Swagger specification which will be presented in a "Documentation" tab on the Place.
    • This option creates a place-specific URL that is "bookmarkable" to navigate straight to the documentation (includes Gadget URL Parameter overrides)
    • If not defined, the tab will not appear. 

 

But That's Not All

Embedding documentation in-context in Jive is just the first step, next up is building in the scaffolding to enable collaboration around the documentation, and to answer those scenarios, I'll share some ideas that I have in mind.

 

  • Mouse-over a specific method, and ask a question to the linked community.
  • Decorate methods in the documentation with indicators that show which are the most popular, or ones with the most questions.
  • Easily embed links to specific methods into collaboration via a !app experience
  • and much much more I am sure based on your feedback!

 

Another idea I was kicking around was to port the add-on to support different themes, or in some cases, new layouts to resemble TripIt's Slate interface!

 

Using Swagger?  Give It a Try!

Visit our Github repo and follow the instructions to give it a try.  This is an open source effort, so the solution is not fully supported; however, Swagger has a vibrant community and the solution is a pretty straight forward app integration, so maintenance should not be that hard.  Plus, all the source code is at your finger tips, and it's not that much. =)

 

Hope you enjoy, and looking forward to the feedback ... contributions and overall collaboration around this project!

 

The Developer Days are Coming!

 

You guys have been asking for it, and we've listened! Taking your feedback from JiveWorld16, we're going take our hackathon materials on the road in a 4 hour workshop + hack day event to a few major cities around the nation. So be sure to bookmark this page and stay up to date on events! Below are some answers to questions you might have until we do our official announcement.

 

Official announcements with final details coming soon!

 

What is it?

It's a hour-long workshop for creating middleware-less add-ons for Jive, then a ~4 hour hack sessions where you work together in a team on an idea YOU come up with, based on given criteria or use some of the pre-defined examples.

 

Why are you doing it?

Because an overwhelming number of Developers asked, and we thought it was a great idea, and we love great ideas just as much as we love watching people come up with really cool solutions to real world problems & use-cases using Jive. At the end of the day, we want you to not only know how powerful Jive is, we want you to know how to harness the power yourselves.

 

Who is going to be there?

If you're reading this, then hopefully YOU! We want every developer to go to this very developer-centric event to get trained and learn more in depth about how you can do more for your community with hands-on coverage of middleware-less solutions. Both myself and Ryan Rutan will be at each of these events to help steer you in the right path and show best practices

 

How much is it going to cost me to attend an event?

All you need to bring is curiosity. The events are free, you'll just need to register (to be announced, TBA).

 

When and where are the events?

Good question! We're working all of that out, but until we do, we'd love to hear in the comments below of where you'd like us to go and how may people from your team you think would be interested.

It was an interesting year for the JiveWorld16 Developer Conference.  We had quite the pre-conference buzz going around JiveWorld,

and while we are glad we tried a lot of new things this year, we are excited to start working on next year's conference and agenda to make it even better!  We wanted to take a moment to share some of these quick updates, so developers could start watching the videos and trying all the new goodies revealed at the conference!

 

Walkthrough 360* Video

View around with mouse/touch

 

Developer Breakout Sessions

Catch up on sessions you missed and/or re-live the sessions to pick up that extra detail.  These videos with slides are available to make sure that no detail is missed and you walk away fully informed about the latest developer platform enhancements!

Reach out in the Developer community or in the comments section of the respective videos if you have any follow-up questions.  We are here to help!

 

Speaker(s)Details

Ryan Rutan

Yuval Twig

2016 Jive Developer Platfom Keynote (video)

Technologies are ever-changing, and so are platforms.  With the release of Jive 8 and the latest version of Jive Cloud, Jive has added simpler and more powerful ways to build integrations that harness the social context that drives your business.

 

In this session, you will get an overview of Jive’s integration architecture, new techniques for constructing business applications, and proven strategies to help developers maximize time while expediting return on investment.   Coupled with an unparalleled user experience and off the charts user engagement, it is easy to see why more and more customers are turning to Jive as their go-to enterprise development platform.

Yuval Twig

Getting Started with the Jive iPaaS (video)

Formerly known as Project Iris, Jive iPaaS has been built to streamline developer solutions from conception, to testing and on through deployment.  With a creation wizard, project templates, service management and rapid testing options, developing Jive add-ons with middleware has never been easier.  In this session, you will hear Jive Product Management discuss the capabilities of the Jive iPaaS SDK and and how you can start building your solutions on it today.

 

Give it a try today at https://ipaas.jivesoftware.com

Steve Vorhees

David Yee

What's New: Jive REST API & Analytics Integrations (video)

Whether it’s running ad-hoc commands to your local machine or hardened solutions for repeatable results, integrations built using Jive’s APIs are a principal part of developing on the Jive platform.  In this interactive session, Jive engineers will cover the latest enhancements and features to the REST and Analytics APIs for Jive 8 and Cloud, as well as patterns to help developers maximize their enterprise solutions using the Jive platform.

Drew Teeter

Butch Marshall (TemboSocial)

Building Jive Add-Ons Your Way (video)

When it comes to building the best enterprise solutions, creating things your way is hard to beat. With the emergence of the add-on framework, Jive has opened the doors for developers to build solutions in their preferred languages. In this session, Jive experts will share experiences building add-on solutions in Java and Ruby from the ground up. Learn strategies and best practices on how to build a Jive add-ons using your preferred web-ready programming language and get ready to build something awesome.

 

 

 

Be sure to check out our open source jive-sdk-* repos on github.com/jivesoftware and get started today!

Edward Venaglia

Adam Sinnett

What's New: Integrated User Experiences in Jive (video)

Building amazing user experiences is the cornerstone for any successful social system integration.  In this interactive session, Jive engineers will navigate the latest improvements to the App, Add-On and Tile frameworks, in both Jive 8 and Cloud, that enable developers to integrate solutions into Jive’s amazing user-experience.

Gal Oppenheimer (built.io)

Tech Talk:  Future of Microservices & iPaaS (video)

As we look to the future of the Jive platform, it is hard to not recognize emerging technologies that will have a foreseeable impact on how developers integrate with Jive.  Two such technologies are microservices architecture and iPaaS (Internet Platform as a Service).

 

 

 

In this session, you will hear from Gal Oppenheimer at Built.io, share his views about growing microservice & iPaaS trends and what it means for the future of building scalable Jive integrations in the cloud.

Rashed Talukder

Unleashing the Power of Simple Stream Integrations in Jive (video)

Socializing third-party system activity in Jive is a powerful integration pattern, especially if you can enrich the activity from all the right systems.  In this session, Jive’s Developer Evangelist will walk you through the progressive power behind Jive’s Simple Stream Integrations.  Learn strategies and best practices on how to effectively scale this powerful, yet simple capability in your enterprise without middleware.

Ray Tsang (Google)

Amir Hermelin (Google)

Tech Talk: Developing and deploying Java-based microservices in Kubernetes (video)

A quick overview on Docker containers, usages, and how to scale up from a single container to a fleet of containers working together with Kubernetes for real-life workloads, such as running java-based applications! Join this session to see how to use Kubernetes to launch, manage, and rolling-upgrade a fleet of Java application instances with session replication.

 

Kubernetes builds on top of Docker to construct a clustered container scheduling service. Kubernetes enables users to ask a cluster to run a set of containers. The system will automatically pick worker nodes to run those containers on, which we think of more as “scheduling” than “orchestration”. Kubernetes also provides ways for containers to find and communicate with each other and ways to manage both tightly coupled and loosely coupled sets of cooperating containers.

 

In this session, you’ll learn: – How to containerize different Java-based microservice workloads using Docker and different build tool plugins – Deploying and managing a fleet of Java-based microservices in Kubernetes – Service discovery 101 in Kubernetes – Perform critical DevOps steps, such as canary, rolling update, roll backs… – Tips and tricks!

Pawan Shah (ThoughtWorks)

Old Dog, New Tricks: Adding Features to Jive Cloud (video)

The Jive platform has a lot to offer developers. Everything from add-ons, to apps, stream integrations, to webhooks and even data services for analytics are at the developers disposal to build feature rich enterprise solutions. In this session, Pawan will demonstrate how ThoughtWorks utilizes the Jive add-on framework and Jive’s open source Node.js SDK to add new features and capabilities to Jive Cloud. If you are looking to uncap the true power of the Jive platform using the add-on framework, this is a session you do not want to miss!

Sumeet Moghe (ThoughtWorks)

Andrey Mikhalchuk (411 Labs)

Jussi Heikkola

Developer Tips: Building Quick Solutions on the Jive Platform (video)

Bigger isn’t always better.  In fact, sometimes the most valuable solutions you can build are the simplest and easiest to roll-out.  With the latest improvements to the Jive platform, it has never been easier to develop and deploy quick solutions that add real value to the business.  In this session, you will learn tips, tricks and best practices from Jive experts on how to build fast and effective solutions on the Jive platform.  If you are interested in learning about low-friction quick wins with Jive development, then this session is for you!

Ofer Ben-David

Yuval Twig

Rick Frantz

David Cook

Lev Waisberg

Developer Town Hall (no video available)

This session was very informal, but very interactive.  We had Jive engineering/product executives and architects in attendance to answer questions directly from the audience.  Lots of features were suggested and many have been already been noted for internal consideration.  Overall, the session was very well received and we plan to do it again next year!

 

JiveWorld16 Tri-Hackathon

jw16-dev-trihackathon-logo-teal-small.pngThe inaugural launch of our new hackathon format was a glowing success.  All those who participated loved the breakout of the hackathon experience; however, we had some work to do to polish some of the edges.  This was to be expected, but we are glad that those who could attend enjoyed their experience and learned some new things in Jive along the way.  Below are the winners from each stage of the Tri-Hackathon.

 

Hackathon StageWinner

jw16-trihackathon-tag-h4ck.png

Check out the Developer Coding challenges to see how you would do!

profile-image-display.jspa?imageID=29284&size=200

Andrey Mikhalchuk

Dominating performance across all level of coding,
including the best in show award!

jw16-trihackathon-tag-pwn.png

profile-image-display.jspa?imageID=21816&size=1000

Patrick Crownover

When it comes to arcade games, do not mess with this guy.

He scored a scorching 72,650 on GunSmoke to claim the prize!

jw16-trihackathon-tag-n3rd.png

profile-image-display.jspa?imageID=25908&size=200

Brandon Walshin

A true tri-hackathon dark horse.  He came out of nowhere and scored a conference high 34k points to win the Hacker Trivia Challenge!

builtio_flow_logo_1024.png

profile-image-display.jspa?imageID=29284&size=200

Andrey Mikhalchuk

"Andrey the Rockstar" created created a expansive logic flow with multiple activity integrations into Jive with Built.io's Flow.

 

profile-image-display.jspa?imageID=21816&size=1000

Patrick Crownover

In between rounds of dominating the arcade, Patrick put together some awesome Flow integrations!

Pebble_logo.png

profile-image-display.jspa?imageID=29284&size=200

Andrey Mikhalchuk

Wow, stop being so incredibly good at everything! Andrey showed incredible mastery with a Jive Inbox Pebble WatchApp that he put together in almost no time at all using Pebble Cloud IDE. Congrats on creating such a thorough app!

 

Here are just a few more of the updates from the conference:

CdYmhHcUkAA7Cdi.jpg:largeCdsf1qSUEAAjaQU.jpg:large CdsO7pCUMAA_HrL.jpg:large CdsJHRyUEAABcF9.jpg

Be sure to check out more of our updates on @jivedev on Twitter.

I know the competition is all over, but I thought I would toss up one final blog post to speak to the relationship aspect.  It was very cool to see some gadgets and prizes from Pebble, nice work Rashed Talker.  It was also excellent to see the guys from Built.io sitting at the tables, our their at their booth, and providing their own set of challenges and prizes.  Sure, we have a ringer in the audience who kind of swept the dev challenges, but hey I'm all for a single player dominating the games

 

The introduction is going to have me looking at what I can do with Built.io, I don't think there is any better correlation with their objectives than that.

 

We had a long list of challenges to get through, I haven't even read through the whole list, but I was about to comment to the effect of "next year it would be great to see iPaaS, Docker Containers, Google Cloud etc (didn't see Kubernetes).  Well guess what, we had those challenges, and now post event we can complete them at any time.  It's really kind a free dev training course if you think about it.

Now not only do you have a Jive focus, but a DevOps focus.  Perhaps times are changing, but when I first started in development, getting your hands on this kind of stuff was impossible if it even existed at all.

roguen

Tri-Hack Day 3

Posted by roguen Mar 16, 2016

This marks the end of the Tri-Hackathon.  An exciting conclusion to an equally exciting setup.  I didn't cut the mustard on our three challenges unfortunately, but it was a nice close race for those at the top of the board and I know we all had fun.

I'm also excited to see the new direction and forms the hackathon takes in the future.  There is some talk of taking it on the road to meet the developers, perhaps as part of local meet ups.  If they could work out the format just right I think that would be amazing.

 

A great combination of the challenges.  Be it Jive itself or Built.io, there were plenty of things to hack and plenty of experts in the house before.  I believe I said it during the first day post, but it really made an excellent bookend to the talks and live sessions where they would go through the demos themselves, giving plenty of your own context into the fast moving tech (hey, they only had an hour in most cases).

 

Also interesting to see will be how they prevent the bit of gaming the system we say with the trivia challenge.  Funny to see, though I still think there should have been a dishonorable mention.

 

Great fun everyone!  Congrats to our winners and I hope to see you all at the challenge next year should I be able to make it.

roguen

Tri-Hackathon Day 2

Posted by roguen Mar 15, 2016

Day 2 is in the books, and with it a couple of completed hacking challenges.  I needed a bit more help from the Jive team, even on these easy ones.  A few great lessons in debugging for sure.

 

I actually really liked the multi-day aspect of this over a single long stretching event.  It gave me some time to think over which challenges to take, and extend what I was hearing during the technical speaking sessions.  If anything, there might be a few too many coding challenges, you feel compelled to complete them all or none at all, but I understand that it speaks to the myriad of ways we can actually approach development in the environment: in turn it makes it all that much more important to have a technical expert on your side, because there are a million ways to skin a cat.

 

My approach has been to focus on the easier challenges to get the badge early, but with it now obtained I'm going to change over to the harder for the final day.  I'm wondering if I'll even be able to wrap up one given the amount of slogging that this day included.

Day 1 of the JiveWorld Tri-Hackathon is cleared.  Once again, the Jive team has evolved the formula around how they conduct it, and I found myself learning a lot.

For comparison I'll use 2 things: some thoughts from my own organization on hackathon activities, and the 2013 JiveWorld event.

 

It's worth noting that aside form learning about what is coming down the pipe for Jive communities, I'm actually going to be conducting my own event of this type with HDS later this year.  When we talked with some others within our organization, they stated that anything less than 24 hours couldn't be considered a hackathon.  It needed to have teams self organize, design and come up with a product which may or may not get produced fully throughout the event.   If that is the definition, perhaps Jive's version doesn't hold strictly, but I found the purpose more in alignment with what I needed for our event which is also not solely developer focused:

  • Attached to a larger vendor training and community activity (a hackathon wears participate out for anything outside of itself)
  • Focused on showing others possibilities around the platform, not asking them to be the outright innovators (though I surprise is always welcome)
  • Planned activities which demonstrate those capabilities versus a greenfield

 

With this short, 5 hour event, the team did something interesting by introducing a couple of other distractions to the activity: a technology quiz and a video game cabinet.  Sure, I think the timer on the quiz made most of the answers a guess, and the sticks on the game machine are a bit hit or miss (I'm a vintage game connoisseur after all), but it seemed to me more in alignment with having a bit of fun, versus a focused self driven training walk through.

 

This was a contrast to what I observed during the 2013 event. There we had some cool gadgets to play around with, but it seemed to devolve quickly into a genius bar kind of experience, where developers were bringing up their own tasks for some free advice and troubleshooting.  It didn't have the same kind of energy or direction that this one now had.

 

Bottom line, great event so far.  Perhaps it's better that they didn't go Galaga for the cabinet game. It would have been very discouraging for everyone else.  I'll be there tomorrow as well to continue my experience... and check on my score.  See you there!

Ok, so this year's JiveWorld Developer Conference is really going to be like nothing you've experienced before! We've got an amazing theme this year that Ryan Rutan posted up some details in Announcing a Tri-Hackathon at JiveWorld16 Developer Conference w/Limited Edition T-Shirt. Since it's literally right around the corner, I wanted to tease some of the great prizes you can win this year from Jive and this year's hackathon sponsors—as well as some things that can really get you a head start!

 

 



JC_PlaceIcon_Developer_alt.png

You can win up to $200 in gift cards from Jive for finishing challenges, developing something awesome, playing some video games, and testing your knowledge of some hacker trivia!

 

Get Ahead on Jive Add-on's, API's, Analytics

 

 

 


 

 

 

builtio_flow_logo_1024@2X.png

Complete the Sponsored Challenges from Built.io and win an Amazon Echo or other great prizes!

 

Get Ahead on Built.io Flow

 

 

 


 

 

Pebble_logo.png

Build a Pebble WatchApp or WatchFace that integrates Pebble and Jive to win a Pebble Time Steel (multiple colors to choose from)!

 

Get Ahead on Pebble

As we prepare to launch into JiveWorld16, we wanted to do all we could to make sure that developers understood the power that exists at their finger tips with the Jive developer platform!

 

One of the more difficult concepts to communicate has been around the value and pervasiveness of app integrations.  A while ago, we assembled the App Action Contribution Reference as a single source for information on all the locations where developers can weave app experiences into Jive.  One thing that was missing in this was a bit of the glue that brings it all together, such as understanding exactly how apps understand the core tenants of rendering a "contextual experience", such as:

  • Who is the Viewer?
  • What is my app context?
  • Where is my app being viewed?
  • How is my app being displayed?
  • How to target app delivery to only key points in the Jive UX?

 

[Enter, Stage Left] Jive Developer App Reference "App"

 

Overview of Features

pastedImage_7.png

  • Implements every action contribution in the App Action Contribution Reference, including distinct actions for "All Places", "All Content" and their individual content/place type specifics.
  • Includes a clean Jive App Javascript structure (if developers do not have one already) for structuring their Jive App JS.  Note how simple the app structure is that supports all these use-cases, for easy to follow
    • 1 app.xml, 1 canvas.html, 1 main.js, and 1 main.css

 

Includes sample code implementations for:

  • Who is the current viewer?
  • What is my current view name & context?
  • What is my current action name & context?
  • Get/Setting View Params for in-app linking.
  • !app artifact creation
    • Simple App Links to initiate in-content contextual app-views
    • Simple HTML Markup (instead of App Link)

 

App Screenshots

  1. Canvas View
  2. Group Tab View w/Params
  3. Content Action View

 

Give it a Try for Yourself

We've updated the Getting Started > Creating an App with the Jive Node SDK tutorial with details on how you can generate this app for yourself to get started on your own.

 

Simply follow the tutorial yourself, or use these quick steps if you already have the Node.js jive-sdk installed:

  • jive-sdk create app
  • jive-sdk build --apphosting="jive"
  • Upload the extension.zip to the Developer Sandbox

 

Once installed, simply cross reference the App Action Contribution Reference to find all the hidden gems in this app. =)

 

As always, I hope this helps ... and enjoy!

Introduction

So for the past several years, I've tested and/or owned almost every type of smartwatch there is on the market—from the Nike Fuel Band, Fitbits', Garmins', Apple Watch, Samsung Gears', Microsoft Bands'—and none of them have captured by heart and wrist like the Pebble watches have. Where most watches are too complicated, uncomfortable, and unattractive, the Pebble has nailed it since Day 1 with the Pebble Classic. Now, I'll admit that I'm an uber techie who loves having the latest toys, the smartwatch has never been my thing. At this moment I'm wearing a watch from 1987; what I wear most days. So it's really a testament that I'm advocating and promoting a smartwatch—especially the Pebble Time Round . I'm not the only one that's saying it, check out Gizmodo's article on their take on The Best Smartwatch For Every Wrist.

 


 

Background

So what did I build here and why?

Well, Jive provides Jive REST API v3.14 → Action entity  to be sent to a user that they can respond to and take "action" on. There are somewhere around 40 verbs that Jive has for the /actions endpoint, and one of them is "http://activitystrea.ms/schema/1.0/post" created by this: Jive REST API v3.14 → Activity Creation #Sending Actions. The smart watch is the perfect low commitment method to increase awareness and engagement from your community's users. In today's workplace and in the future, I see smartwatches more commonplace and Pebble's no muss, no fuss, clear as day UI is a great tool for enterprise.

 

Also, if you're always building enterprise software, it's kind of fun to do something different .

 

How can my organization use this?

  • From a Jive-X and marketing perspective, we can use a Marketo campaign that gets triggered and sends a action to a user and they can effectively move forward in a funnel. Check out this great blog by Kurt Collins on a great and easy way to set this up: Built.io Flow: Caffeinate Complex Workflows (2 of 3)
  • From a workflow and security perspective, if a user requests access to a private group, the group admin can either approve or reject that request right from their wrist without ever needing to pull out their phone or laptop.
  • For HR, company RSVP's to events to get a proper headcount is fast and easy.

 


 

The Repo

https://github.com/jivesoftware/jive-pebble-actions

 


 

Files

FilenameDescription
/appinfo.jsonMeta properties for app. Also includes resource identifiers for images and our config appKey enums. All params can be set in your Cloud Pebble's project settings.
/src/app.jsOur main execution script. Pebble by default looks for and runs this file on launch.
/src/base64.jsBase64 encode/decode library from http://www.webtoolkit.info/javascript-base64.html.
/src/captionImages.jsReally a JSON file that assigns Jive Action caption values to images and buttons.
/src/clay.jsThe Clay library -- for offline config pages on Pebble and provides some minimal jQuery functions
/src/config.jsConfiguration for Clay. We create the form fields and assign the corresponding appKey (set in the appinfo.json) for storage on the watch. A JSON file.
/resources/images/*Icons used by the app

 


 

Code Explained

The repo contains most of the comments inline, so this an overview explanation with links to documentation. This is written entirely in Pebble.js though it can be done in a C and JS combo but for ease of understanding, we're using Pebble.js only and going to refer you to the Cloud Pebble IDE .

 


 

Authorization

Screen Shot 2016-03-01 at 10.11.31 AM.pngScreen Shot 2016-03-01 at 8.59.56 AM.png

Since the JIve /actions/ endpoint is dependent on the user, we only need Basic Auth. Pebble typically requires an externally hosted page for configuration of an app, however we used a new API just released called pebble/clay: Pebble Config Framework for an offline config. This lets us avoid having to set up a new service to then store the credentials into the watch.

 

Since Basic Auth requests need to be Base64 encoded and Pebble.js doesn't have that as a built-in library, I imported one from: http://www.webtoolkit.info/javascript-base64.html

 


 

GET Jive /actions

Screen Shot 2016-03-01 at 8.46.00 AM.png

The user is originally displayed a pre-defined Window of type Card. That gives feedback to the user of the Pebble app requesting the endpoint from Jive. On anything but success the body field of the Card object is replaced with a error dialog. On success the data is then sorted for Jive Action verbs that we wish to display and filter out those that we don't. The array contains the title and subtitle we want to display in each menu item of the Menu object.

 


 

Displaying Actions

Screen Shot 2016-03-01 at 8.46.15 AM.png

The sorted array of action items are displayed in a Menu window. The Menu window has specific properties that handles button presses, the UP and DOWN buttons for scrolling and the SELECT button to select the item. When a Menu Item  is selected, the "menu.on" handler's callback displays a new Card object that has the related information we want to show the user, and the icons that corresponds to our pre-defined list of captions for window's actionDef property.

Since the Pebble only has 3 buttons, you should not create actions with more than 3 options.

 


 

Responding to Action

Screen Shot 2016-03-01 at 9.00.37 AM.png

With the iconography displayed, when a user clicks an associated button, the sendAction() function is called and we make a POST request to the /actions/<action id>/actions/<captions> endpoint with the caption associated with the button. On success or error we display a UI card to notify the user. Success retrieves an updated actions array from Jive.

Pay attention to the cards in memory and removing the associated cards. When the user clicks the BACK button, he/she will be taken to the Window layer just before the current layer.

 


 

What's next?

  • Stay tuned for a special post about JiveWorld16 and Pebble!
  • Add a case for health actions and sending Pebble Health data back to Jive
  • Rewrite the app in C/Pebble.js to be compatible with the Pebble Time Round
Kryo and Bad Surprises

 

Jive uses the Kryo Framework to serialize and deserialize objects, typically serialization happens when objects are transferred to the remote Voldemort cache and back. Unfortunately serialization troubles caused by bad implementation mostly occur at runtime, which is a surprise I'd like to avoid.

 

Unittest

 

My colleague Lars Kreisz wrote a short Unittest to test the serialization of a single class, which was a good start. And so I thought "Why not test all the instances implementing Serializable automagically?". All we need for this is a Reflection library, and I chose Google Reflections, which can be added through the following dependency with scope test in your projects pom.xml:

<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
<scope>test</scope>
</dependency>

 

And now for the JUnit test case, which works very well so far. What it does, briefly:

  • init Reflections library with the package name you want to scan for objects (line 22)
  • filter out only types Implementing Serializable (line 23)
  • iterate over every class, filter out the abstract types which can't be instantiated (line 29)
  • instantiate the class (line 31)
  • Serialize, Deserilze and check class

 

When there are any problems with the serialization (like included types that are not serializable them selfs, or missing default constructors), an exception from kryo is thrown and the test case is getting red.

 

import static org.junit.Assert.*;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Serializable;
import java.lang.reflect.Modifier;
import java.util.Set;

import org.junit.Test;
import org.reflections.Reflections;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;


public class ExperimentalSerializableTest {

 @Test
  public void test() throws Exception {
  Reflections r = new Reflections("com.your.root.package.goes.here");
  Set<Class<? extends Serializable>> classes = r.getSubTypesOf(Serializable.class);

  for (Class<? extends Serializable> clazz : classes) {

  System.out.println("Checking class " + clazz.getName());

  if (!Modifier.isAbstract(clazz.getModifiers())) {

  Object instance = clazz.newInstance();

  // Serialize to a byte array in ram.
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      Output ko = new Output(bos);
      Kryo kry = new Kryo();
      kry.writeObject(ko, instance);
      ko.flush();
     
      // Deserialize.
      ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
      Input ki = new Input(bis);
      Object deserialiedInstance = kry.readObject(ki, clazz);
     
      // check casting once more
      Object castedObject = clazz.cast(deserialiedInstance);
     
      // this has to be true then
      assertTrue(castedObject.getClass().equals(clazz));
  }
  }
  }

}








 

Happy to hear your thoughts at the comments. Cheers,

 

Mirko

This fall, we'd released a new update to the Jive Cloud platform (2015.3) and along with that comes a couple of great new features and updates to our REST API. We also brought a couple of new posts and tools to make your integrations richer, built easier and faster than ever before. We did a lot of tidying up with this release and squashed quite a few bugs while we're working hard on the next major release that's sure to completely WOW you—release 2016.1.

 

REST API Improvements

Jive REST API v3.14 → EventCalendarCount entity - Get the event calendar of a place. (added)

Jive REST API v3.14 → EventCategoryType entity - Create, Destroy, Get, Update event category types.  (added)

Jive REST API v3.14 → EventInvite service - Create, Delete, Get, Update invite(s) for an event. (added)

Jive REST API v3.14 → Event service - Create, Cancel, Update an event. (added)

Jive REST API v3.14 → Oembed service - Retrieve an embed code for a URL that is used by the Video Object creation to validate an embed-type video. (added)

Jive REST API v3.14 → Person entity - Delete and Set a users avatar. Update the visibility of a field in a user's profile.(added)

Jive REST API v3.14 → Rsvp service - Get RSVP's and invitees/attendees as well as RSVP to an event. (added)

Jive REST API v3.14 → Video service - Get the download options for a video (added)

Jive REST API v3.14 → ProfileFieldPrivacy entity - Profile field privacy now returns a string for type (updated)

 

 

New Documentation & Posts

One Stop for the Jive-n/Jive-x 2016.1 Cloud Release <-- Highly recommended you take a look.

UX Widgets

Content Manager App - The idea into reality

Built.io Flow: Caffeinate Complex Workflows (1 of 3)

Built.io Flow: Caffeinate Complex Workflows (2 of 3)

 

Stay tuned for more news and updates on our next release and keep yourself checking the Jive Developer community often on new guides, documents, blogs, and great support!

 

 

Reminder

Coming Up: JiveWorld16 Developer Conference

Las Vegas - Aria Resort & Casino

March 14-16, 2016

 

 

We're very excited to be heading to Las Vegas for JiveWorld16! This year, the experience will be very unique with games, prizes, and of course great sessions to keep you ahead in all things Jive. Be sure to review our survival guide well before you go to maximize your experience: A Hacker's Guide to Prepare for the JiveWorld16 Developer Conference

 

builtio_flow_logo_1024.png

Re-Introducing Built.io Flow

 

Rashed Talukder wrote up an excellent primer on how to start out using Built.io Flow with Jive; if you haven't read it, stroll on over to read Built.io Flow: Caffeinate Complex Workflows (2 of 3) . Automating complex workflows with Flow makes some of those repetitive tasks a lot easier while opening your eyes to some of the new things you might be able to accomplish. However, rather than rehash what's already been said, let's jump right into our progression by building an integration between Marketo and Jive.

 

 


 

What We're Building

 

We're going to get a little more complex than the first Flow that was built. However, we're still going to take it a little easy. There may be times when you want to communicate with your Marketo leads and give them an easy call to action in Jive. Let's build something that gets a list of leads from Marketo and then pushes an Inbox Action in Jive to the first lead on the list. This will allow us to get a brief introduction to arrays in Flow as well as show you what it's like to actually integrate multiple services and activities together.

 


 

Getting Started

If you haven't already done so (and you're not familiar with Flow), please take a moment and read Built.io Flow: Caffeinate Complex Workflows (2 of 3) . The next thing we're going to need, though, is for you to have a Group List in Marketo you're willing to experiment with. This tutorial won't go over a step-by-step on how to create that. Simply go to Marketo, create a new Group List (I named mine "Jive List"), and put one Lead inside of it. Make sure that lead has the following attributes:

  • First Name
  • Last Name
  • Email Address – Make sure this is an email with an active Jive account associated with it (I used my own).

Once you've created that list, just go to Flow and create a new Flow. Name it whatever you want. And then we're ready to move on to the meat and potatoes.

 


Get Everything On The Canvas

Now let's get everything we're going to use onto the canvas. I generally prefer to do this just because it helps me organize my thoughts on exactly how the data is going to Flow. For this particular Flow there are five activities you're going to need to get onto the canvas and connect them in the following order:

  1. Marketo -> Get Multiple Lists. While the name of this activity suggests that we're getting more than one list, in point of fact, this activity allows you to search for a particular Group List in Marketo. For example: I am going to search for the list I created named "Jive List". While this activity returns an array, in our particular use case, it will just be returning an array with one element.
  2. Marketo -> Get Leads Using List ID. After performing a search for the list you want, you then need to get the leads out of that particular list.
  3. Marketo -> Get Lead Details. This activity will allow you to get the lead details for a specific lead. For the purposes of simplicity, we're just going to get the lead details for the first lead on the list.
  4. Jive -> Get Person ID by Email. The last activity gave us access to the person's email address. However, before we can push a Jive Inbox Action, we need to know the individual's Person ID. This activity will get us that ID.
  5. Jive -> Create Action. And finally, now we can create an action specifically for the individual we got from the previous activity.

Once you connect them all together, it should look something like this:

Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action.png


Configure The Activities

You can ignore the warning icons you see because we're about to go in and address those right now; one after another.

 

Marketo -> Get Multiple Lists configuration

The first thing you're going to have to do is set up your Marketo Connection. You can do that by going to edit the settings of the "Get Multiple Lists" activity and selecting the "Marketo Connection" dropdown. If you don't have one already set up that you want to use (as I do in the screenshot below), then go ahead and click on "Add new", type in a name for your new Marketo connection and follow the instructions.

 

Screen Shot 2016-02-20 at 03.36.51.png

 

Now that we've got the connection situation straightened out, we want to search for a specific Group List we created in Marketo. I named my Group List "Jive List", so I'm going to enter that name in the "List name" text box:

 

Screen Shot 2016-02-20 at 03.41.15.png

 

Once you've done that, we're done setting up this particular activity and we can move on to the next one. Click done and go back to the Flow canvas.

Marketo -> Get Leads Using List ID

Now go ahead and edit the next activity in the chain: Get Leads Using List ID. Now this is where arrays start to come into play. We're not going to do iteration this time around (although this is possible with Flow). Instead, let's just focus on getting the first Group List returned by the "Get Multiple Lists" activity we just finished configuring. First, make sure to choose the Marketo connection you created in step one from the "Marketo Connection" dropdown. Then click on the green [+] symbol next to {{$a0.result}} array and that will give you an idea of all of the objects available to you in each element of the returned array.This activity is asking us to give it a List ID so we can get the leads from that particular list. Because we want to get the leads from the first list in the array, we want to put {{$a0.result[0].id}} in the "List ID" text box as is shown below. That will get us the ID of the first Group List returned in the array.

 

Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action.pngNow that you're done configuring this activity, let's move on to the next one.

Marketo -> Get Lead Details

This is the last Marketo activity we have to configure. Again, make sure to choose your Marketo connection. This activity will get us the details for a specific lead in Marketo. The objective of the last activity was to get us the Lead ID we needed here. The objective of this activity is to get the name and email address of the Lead we're going to be contacting in Jive. So, similar to what we did before with the array of Group Lists returned, we're going to just get the first lead from the "Get Leads Using List ID" activity; that's the lead we want the details for. Just enter {{$a1.result[0].id}} in the "Lead ID" field and we're good to go.

 

Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 2.png

 

Once we're done here, we can move on to the configure the first Jive activity.

Jive -> Get Person ID by Email

First things first: set up your Jive connection. If you've already gone through the first tutorial in this series, then you should already have a connection set up. If you haven't gone through that tutorial, then you can just choose "Add new" from the "Jive Connection" drop-down, choose a name for your new Jive connection, and follow the resulting instructions.This activity is going to allow us to get a Jive Person ID given a particular email address. We would have gotten that email address from the previous activity: "Get Lead Details". So now all we have to do is grab the email from the returned objects in that activity and put it in the "Email" field.

 

Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 3.png

Jive -> Create Action

This is the last activity that needs to be configured. As before, first set up your Jive connection by selecting your Jive connection from the drop-down.Then let's go ahead and just fill out the first three text boxes as seen below. Since we pulled the Jive user's information from the "Get Person ID by Email" activity, we can put their name in the "Title" text box.

  • Try putting the following in the "Title" text box: {{$a3.name}}: An Awesome Message From Our Marketo! (Note: we could have also pulled similar information from the "Get Lead Details" activity.)
  • Then go ahead and write some content in the "Content" text box. I chose to write: I'm sending you something pretty awesome.
  • And last, but not least, make sure to put a Person URI in the next text box: https://<jive_url>/api/core/v3/people/{{$a13.id}}. In this case, we're getting the Person ID from the "Get Person ID by Email" activity to make sure we have a complete Person URI.

 

Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 4.png

Let's Run It, Already!

We're done. There's nothing more to do but see if this thing works. So once you're done editing the "Create Action" activity, just head back to the canvas and hit the "Test" button in the top right-hand corner. That should execute the Flow.

 

Built_io_Flow_-_Marketo_List_to_Jive_Inbox_Action 5.png

 


 

What's Next?

For the next and final iteration, we'll be completing the iteration to a fulfill a common use-case; initiating a Flow through a trigger, initiating another flow from within a flow, and taking a user's action response and calling another Flow.

developer-conference-gradient.png

If you've been following any of our recent blog posts, such as:

then you might know that we have an amazing agenda planned for you, see the full agenda here, at the JiveWorld16 Developer Conference.

 

But knowing the agenda and being ready for the conference are two completely different things.  Our goal for the JiveWorld Developer Conference is to be extremely interactive and hands-on, that way developers can head back to their jobs with momentum to start their next Jive integration using their new skills.  To help achieve this goal, we've put together a quick guide for developers (old and new) on how to best to prepare for the best Jive developer event of the year!

 

 


 

Getting Ready for the Tri-Hackathon

 

jw16-dev-trihackathon-logo-teal.png

The Tri-Hackathon will test your skills in the following hacker disciplines:  coding, trivia and video games.  While trivia and video games will be difficult to suggest recommended training programs, the coding challenge is a bit easier.

 

  1. Register for the Jive Developer Sandbox, see instructions: How to Access the Official Jive Developer Sandbox
  2. Install the Jive SDK for Node.js ... or familiarize yourself with one of our open-source in-progress SDKs on GitHub.
  3. Install ngrok on your laptop.  This will give you ultimate flexibility on the conference WiFi allowing the Jive Developer Sandbox to communicate with your local dev environment.

 

<hint>Take a look and maybe try some of the node.js tutorials, this might come in handy.  </hint>

 


 

JiveWorld14 Presentation Videos

If you are new to the Jive platform, it is a good idea to get up to speed before attending the conference.  Don't worry!  You can revisit all the exceptional presentations from JiveWorld14 below to get started on the right foot!

 

RecommendedOptional, but Good

 


 

Developer Prizes / Awards

Per the previously mentioned blog post, there will be some prizes and badges awarded.  Here is a breakdown of all the opportunities to win, big and small!

 

trihack-code.png

Complete at-least 4 coding challenges to earn this badge in the Jive Community

Each coding challenge you complete will earn you tickets.

You do not need to be a developer to participate! (but it helps)

 

Most Completed Challenges: 
$100 Gift Card

trihack-trivia.png

All participants will earn 400 tickets and this badge in the Jive Community

You do not need to be a developer to participate!

 

Best Trivia Score:

$100 Gift Card

trihack-game.png

All participants will earn 400 tickets and this badge in the Jive Community

You do not need to be a developer to participate!

 

Best Score:

$100 Gift Card

trihack-allstar.png

 

Complete all phases of the JiveWorld16 Tri-Hackathon, 
and get this badge in the Jive Community.

developer-blogger.png

 

Blog about your JiveWorld16 Developer Conference experience,

and get this badge in the Jive Community and 500 tickets!

developer-prize.png

 

Win any of the tri-hackathon top prizes or be selected
by our featured hack sponsors (Pebble & Built.io),

and get this badge in the Jive Community.

pebble-watch.png

jivedev-ticket.png

 

Tickets can be traded in at the end of the conference for
$$$ gift cards, video arcade chachkies and hackathon t-shirts.

Other Awards for Developer Participation
developer.png

 

Check-in to at-least 2 Developer Conference sessions,
and get this badge in the Jive Community.

developer-allstar.png

 

Check-in to at-least 4 Developer Conference sessions,

and get this badge in the Jive Community.

noelwhite

UX Widgets

Posted by noelwhite Feb 1, 2016

Introduction

 

Enhance your community with amazing content display options.  Enable and control search and navigation across multiple community sites.  Empower large, diverse communities with service portals for site and content creation. Do all this without having to install plug-ins or set up add-on servers to host services.  These UX Widgets enrich Jive overview pages with powerful intranet platform capabilities.

 

These projects are for Jive-n instances and controlled Jive-x instances that limit place administration to trusted users and allow JavaScript within HTML widgets.  If this works for your community, click on the title of the below projects to go to the Github site to get full instructions and required files.

 

 


 

Content Lookup

content-lookup.jpg

This is the starter widget in this series of open source releases that eases finding and displaying information about content in your community.  The Content Lookup widget is a handy tool for quickly locating content in your Jive community and obtaining various stats and reference information.  It utilizes the Jive V3 search API and parses the returned information into an easy to consume table.  In particular, this widget makes getting the content ID and Binary URL to uploaded files in the Jive instance much easier than doing API lookups in the browser and parsing the returned information for that level of detail.  The Content Lookup widget is so useful that the rest of the projects in this series have this as a prerequisite.  All of their installation instructions reference its use to help set the projects up within your Jive instance.

 


 

Accordion

accodion-widget.jpg

 

This HTML widget project greatly increases the usable space on pages by displaying information in an accordion viewer.  Viewers expand sections to display the content within.  An easy-to-use builder application creates a self-service portal for site admins to come and generate an accordion for their page in three easy steps:

1.  Create a Jive document with a table defining what to build in the accordion.

2.  Give the builder application the URL to the setup document, and it generates all of the required code.

3.  Place an HTML widget on the target site, and paste the generated code into it.

The accordion widget dynamically builds collapsible Bootstrap panels based on the setup document’s content.  This allows the accordion to be set up quickly and easily, and modifications are a snap.

 

 


 

Advanced Search

Search Widget.jpg

Have you ever wanted a search that only looked in specific places on your community?  This project is an alternative to the Jive search widget’s “current place” or “global” search options.  It allows you to set up a list of places for the search to look through.  This is very useful for business functions that have work spread across several locations within the community, and want to limit search results to only those places.  A builder application lets you set the places that will be searched, eases the configuration process, and generates all of the code to get multi-site searches up and running.

 


 

Content Viewer

content-viewer.jpg

 

How would you like to view various pieces of content within your community within a single site?  You can surface documents, discussions, profiles, and even other overview pages from your community in a single Content Viewer.  All of this functionality is built and maintained using a single Jive document with a bullet list representing the Table of Contents (TOC).  A builder application removes all of the complexity and generates all of the code for you.  All you have to do is set up two widgets on a page.  One widget will become the TOC pane, and the other will become the display panel.  Clicking an item in the TOC loads the content into the display panel for viewing.  Users can select which content to view by the content listed in the TOC and you do not have to implement and maintain complicated menus and navigation bars to keep your sites up to date and connected.    Changes can be made to the TOC document to add, modify, and delete entries.  Linked documents and sites contained in the TOC can be edited to modify the content that is displayed.  Give your community the ultimate in convenience.

 


 

Export

export-widget.jpg

 

Do you need to export the followers of a person or place?  How about exporting event attendee details, including emails?  The Export widget is a service portal that automates the process of gathering information from your community and parsing it into an easy to read, export-friendly format.  Get the information you need without all the hassle.

 


Form

form-widget-overview.jpg
The Forms widget creates a data entry form with controlled inputs, and outputs consistently formatted documents into Jive.  A designer app has a drag & drop interface to create form designs.  It has several elements which ease the entry process, enables categorizing and tagging, and allows attachments.  Form designs can be saved and reloaded later for modification.  All of the code complexities are handled for you.  Just paste the generated code on your site to create the entry form.  Each time a user submits a form, it creates a Jive document with a table of the form fields.  The form makes it easy to guide users on what to submit, and the table format makes it easy to process the submissions.  Form submissions can also be tallied into a report using the Form Report widget.

 


Form Report

form-report-widget.jpg

Working in conjunction with the Form widget, this widget reads a Form design and creates a table of the fields that are able to be tallied.  It then reads through the submissions related to the form design and calculates the number and percentage for each answer.  It also creates an export of the submissions that is spreadsheet friendly for external processing.

 


Menu

 

Control site navigation, both in and out of your Jive instance.  Guide users through related sites, and help them navigate through complex business units.  Organize your site topics and ease access in your community.  Creating a menu in your site is now as simple as creating a Jive document with a bullet list of your menu items.  A builder application takes the setup document and generates the code for you.

 


Picture Carousel

picture-carousel.jpg

Building on Dave Myers original Content Slider project on the Jive community, this project eases the process of creating a Picture Carousel.  The presentation is set up using a single Jive document with a table to control the slides, headings, and links.  A builder application allows users to easily configure size, colors, fonts, and more for total control over the experience.

 


 

Presentation (to be released soon)

presentation-widget.jpg

Looking for an alternative to PowerPoint?  This widget project, utilizing the awesome RevealJS library, allows users to create professional looking presentations within the Jive community.  Presentations are set up using a single Jive document and table where each cell represents a slide in the presentation.  A builder application eases the setup process and generates all of the code.  Several built in 3D transitions add an elegant look.  Presentations can be manually controlled, or set for auto advance.  Make your community stand out…in 3D!

 


 

Team Listing (to be released soon)

team-listing.jpg

Surface team members.  Guide visiting users to the correct contacts.  This widget makes it painless to build a nicely formatted team listing to display on your overview page.  A builder application utilizing the Jive APIs eases the building process and automates all of the work.  Just tell it who you want, generate the code, and paste it into a widget on your page.  It can even be set to dynamically build the list based on current information from the Jive profiles, so it can manage the details when you don’t want to.

 


 

What's Next?

 

The projects that are not currently linked to their Github repository are still in the release process.  They will be available soon.


Tile conversions of these projects are possible, but the UI design would need to work around the tile size restrictions.  Conversion to add-ons / apps is also possible, but the widget design has worked best for our communities.  We look forward to your feedback and contributions.

Filter Blog

By date: By tag: