Git Product home page Git Product logo

ce-platform's Introduction

CE Platform

The Collective Experience (CE) Platform facilitates the creation and operation of collective experience applications. By building to cordova/iOS and distributing this project as a native app, experiences can be launched with native push notifications and users can be targeted by their location for context-specific experiences. Currently, the platform facilitates image and text submissions for experiences.

Setup and Local Development

  1. Install Meteor curl https://install.meteor.com/ | sh.
  2. Clone the repository git clone https://github.com/NUDelta/ce-platform.git.
  3. Navigate to the project folder cd ce-platform.
  4. Run meteor npm install to install local dependencies.
  5. Start the server using meteor.

Windows Subsystem for Linux Specific Setup

Follow steps 1 & 2 from above. To install Mongo (v 3.6), follow steps 1-5 from this site: https://github.com/michaeltreat/Windows-Subsystem-For-Linux-Setup-Guide/blob/master/readmes/installs/MongoDB.md

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

Then, to create where data directory & to start a Mongo process, do the following.

$ sudo mkdir -p /data/db
$ sudo chown -R $USER /data/db
$ mongod

Open a separate terminal and navigate to the ce-platform directory and run npm start.

Open Mongo Shell in another terminal and try to find users to verify that you're interacting with the correct data.

$ mongo
> use meteor
> db.users.find()

iOS Development Running

Development build is nice to develop the mobile app, connected to a local server. Following these steps will also allow you to setup hot-code-push for local development, which makes it extra easy to make changes to the mobile app without having to go through a long build process.

  1. Find your ipaddress using ifconfig |grep inet. On northwesterns network, it sometimes looks something like 10.105.X.Y. On a home WiFi network, it might look like 192.168.X.Y
  2. From the ce-platform directory, run npm run build-dev 3000 192.168.X.Y or equivalently meteor run ios-device -p 3000 --mobile-server=http://{ipaddress}:3000
  3. At some point, the previous command will have opened an xcodeproject, which lives at ce-platform/.meteor/local/cordova-build/platforms/ios. Navigate there by typing cd ce-platform/.meteor/local/cordova-build/platforms/ios.
  4. pod install to install dependencies.
  5. open Cerebro.xcworkspace to open the workspace file, which will have the pod dependencies linked. You can close the `Cerebro.xcodeproject file now.
  6. Change bundle identifier to edu.northwestern.delta.ce-platform
  7. Get the "CE Platform" provisioning profile from developer.apple.com and import the profile into xcode. You can do this by dragging the *.mobileprovision file onto the xcode icon, or by going to General > Signing (Debug or Release) > Import Profile...
  8. Set the Provisioning Profile to "CE Platform"
  9. Set your build target to the iPhone you have plugged in to your computer, and press the Play button.
  10. ce-platform should start up on your iPhone. Client logging should be available in XCode Terminal. Server logging should be available in the terminal you ran the meteor run ios-device ... commmand.

iOS Enterprise Build

For a quick script that does the meteor build and sets up the xcworkspace, see the ipaHelper.sh script. For all the details that lead to writing the streamlined script, see the rest of this section.

Building iOS Application from Meteor

  1. Deploy Meteor application to Galaxy or Heroku, or start a local server.
  2. Run npm run build to generate the Xcode project.
    1. Change the server in the scripts section within package.json if you want to run with a local server (localhost:3000).
    2. Note: if this fails with an error saying that dezalgo module cannot be found, run meteor npm i -g write-file-atomic path-is-inside async-some dezalgo.
    3. Note: if this fails with an error saying that EACCES: permission denied for one of the Pods in ce-platform-ios, you should try removing or moving the folder ../Cerebro-ios to start a fresh build.
  3. Navigate to ../Cerebro-ios/ios/project and run pod install to install needed dependencies.

Creating an .ipa File

Setup

Exporting an iOS application as an .ipa file requires the ceEnterpriseExport.sh export script and exportOptions.plist export options plist. The former runs the Xcode cleaning, building, and archiving stages for enterprise export and uses the latter to sign the application.

exportOptions.plist are used to specify the provisioning profile and team ID to sign the application. Configure the following to change which profile is used to perform the signing:

<key>provisioningProfiles</key>
<dict>
    <key>edu.northwestern.delta.D</key>
    <string>Delta Lab D</string>
</dict>
<key>teamID</key>
<string>823S57WQK3</string>

Push notifications are currently configured to work with the Enterprise A certificate. Talk to Ryan or Yongsung for more information.

Export

  1. Navigate to ../Cerebro-ios/ios/project and open the .xcworkspace.
  2. Change the Bundle Identifier to the same identifier as in the provisioning profile above (here, edu.northwestern.delta.A).
  3. Copy ceEnterpriseExport.sh and exportOptions.plist to the same directory as the .xcworkspace. Then, run ./ceEnterpriseExport.sh to create the application.
  4. The .ipa can be found in the Cerebro-export/ directory. Distribute your .ipa to testers using diawi.com.

Development Guidelines & Styles

Please read through and follow these guidelines while contributing code to this project.

Dev Tips and Tricks

  • To clear the database and therefore propagate changes to dummy data in fixture.js, set the CLEAR_DB boolean in config.js to 1
  • if notifications stop working, check that production is set to true in config.push.json
  • to see logs in terminal: heroku logs -t --app ce-platform
  • "quote exceed" might mean the quota of the whole db is exceeded, the limit for free is 500MB
  • Use this handy console log to keep track of any data flowing during the Identify, Coordinate, or Progress calls: const util = require('util'); console.log('myVariable: ', util.inspect(myVariable, false, null));

Accessing Test Data to Test Participate and Results Views

For the 4 OCEs used in the CHI 19 study, I made a data dump which has several dummy submissions. It will allow you to look at all the participate and results screens to check your views.

  1. Download the data dump from our ce-platform/mlab-dump S3 bucket!
  2. Start a meteor server i.e. meteor
  3. Start a connection to the database i.e. meteor mongo
  4. Restore the data i.e. mongorestore -h 127.0.0.1 --port 3001 -d meteor ce-dump-avatar-storytimerichpoor-samesituationrich/meteor
  5. Several accounts were used to create data, like users nagy and bonnie. Their passwords are password
  6. If you want to create more data, do so within the app. Then use mongodump i.e. mongodump -h 127.0.0.1 --port 3001 -d meteor

Alternatively, to dump/restore the data currently in the production or staging database (useful for debugging without iOS Development Running), do the following:

  1. Dump the data: mongodump --uri=<URI that can be found on mLab -o $OUTPUT_DIRECTORY>
  2. You may have to drop the database before restoring
$ mongo
$ use meteor
$ db.dropDatabase()
  1. Restore the data locally mongorestore -h 127.0.0.1 -d meteor $OUTPUT_DIRECTORY/$REMOTE_DB

Javascript

Refer to the Airbnb Javascript style guide. We're fully into ES6, so make sure you're familiar with using let over var, () => {} function shorthand, and so on.

Quotations

Use single quotes for Javascript, and double quotes for HTML.

// bad
let foo = "bar";

// good
let foo = 'bar'

Template Naming

Try to fit template names into namespaces describing their functionality and what pages/routes they show up on. For example, any component that shows up underneath the home template should be named home_component. Be descriptive with names; prefer full words over brevity. Don't include page at the end, unless it would be ambigious otherwise.

Ordering / Grouping Imports

Sort all imports in this order and into these groups, omitting any groups that don't exist.

  1. If client page .js file, include the matching html file. Do not include html files in any files except the relevant .js one..
  2. Include Meteor packages, starting with import { Meteor } from 'meteor/meteor', followed by import { Template } from 'meteor/templating' if you use either of those.
  3. Include files from imports/.
  4. If client page .js file, include other template components used inside. Do components/ first, then partials.

Methods

You'll notice that, to match what's recommended from Meteor 1.3, all of the methods in this project have been changed into exported ValidatedMethods. See the Github Repo and the guide page about this, but be sure to use these.

ce-platform's People

Contributors

youralien avatar gotjennie avatar ryanmadden avatar allisonsun avatar aspin avatar mtruong68 avatar kapil1garg avatar sgnachreiner avatar nkgopaul avatar marblez avatar dependabot[bot] avatar puffinpoof avatar ninacong avatar codethecoffee avatar

Stargazers

David Lee avatar Gabriel Caniglia avatar  avatar  avatar

Watchers

James Cloos avatar Fardeem Munir avatar  avatar  avatar Leesha "Aisha" Shah avatar Jamie Gorson avatar  avatar Zak Allen avatar Corey Grief avatar Nikhil Pai avatar Neha Sharma avatar Michael Wang avatar Alex L. Wang avatar  avatar  avatar  avatar Sameer Srivastava avatar Alex avatar Katie George avatar  avatar Eli Cohen avatar Mason Lin avatar  avatar Harrison avatar  avatar Gabriel Caniglia avatar  avatar Meg Grasse avatar Evey Huang avatar Armaan Shah avatar ciaochiaociao avatar Eunice Lee avatar Eureka Foong avatar Olivia Gallager avatar  avatar Zach Cmiel avatar Ankita Chowdhry avatar Victoria Cabales avatar  avatar David Latimore II avatar Lily Zhang avatar Megan Garcia avatar  avatar  avatar

ce-platform's Issues

Adjust UI with feedback from Nikhil's test

  • wanted to filter the experiences
  • tried to click on the larger box to get more information
  • wants more information on each experience
  • didn’t really know what “subscribe”ing means
  • what happens after subscribe?
  • no feedback right now for not having images (e.g. if filter returns no images)
  • “damn, I can share this!”
  • didn’t realize there were more questions after the initial one (thought it was a toggle on and already on yes);

Update to Meteor 1.7 AFTER 07/20/2018

mLab will be updating their MongoDB version to 3.6 on July 20th for their sandbox databases, which we use. Meteor 1.7 already has support for MongoDB 3.6 and it looks like it'll be a pretty easy upgrade to do so after mLab takes care of the databases on their end.

Location tracking should not need an app restart to work

On startup, the BackgroundGeolocation package receives a configuration object as follows (truncated for brevity):

{
      ...
      // HTTP / SQLite config
      url: `${ Meteor.absoluteUrl({secure: false}) }api/geolocation`, // submit location updates to
      backend route
      method: "POST", // submission method
      params: {
        userId: Meteor.userId()
      },
      ...
}

As part of the HTTP setup, we pass the reactive data source Meteor.userId() so that we know who the location updates are triggering for. Its value will update after a user logs in (since its a reactive data source), but the updated value is not sent to the location tracking package. This causes the current installation flow to become:

  1. Install application and give necessary permissions (this causes the BackgroundGeolocation to be configured with Meteor.userId() as undefined).
  2. Log in or create account
  3. Force quit application and launch again (this time, Meteor.userId() will be the logged in user's ID and the BackgroundGeolocation package is configured correctly).

Instead, BackgroundGeolocation should reset its configuration every time it detects a user has logged in/out of the application. There is already logic on the server to handle if location updates are coming from an application without a user logged in.

This is a known bug, and does not affect location tracking. Regardless, this issue should be fixed before larger-scale deployments.

Fixtures are outdated

Requirements:

  • users
  • experiences
  • example participation (e.g. images + text)
  • sample geolocation data

Final fixes for scavenger hunt to run in testable mode

  • fix up debug page (.5)
  • once a user participates remove them from the experience (.5)
  • end the experience once it is done (1)
  • show a user's previous experiences on the results page (.25)
  • wait times between experiences (.25)

Fix `checkIfNeedFailed`

Calls to it are currently commented out, since it was doing wonky things with adding more submissions than situation.number specifies.

User is available, push is sent, user updates location, assignments are cleared, user is not longer available

Kapil:

Critical incident! I’m currently commuting up on lakeshore drive and got a Notification to participate in half half travel. But my location updated before I could participate, so when I go into the app all I see is a blank screen

Leesha

She opened the new experience (it was a blank white screen), she opened and reclosed the app. Opening it again, she got the experience but then was immediately taken off.

Logs

018-07-25T15:57:19.087277+00:00 app[web.1]: �[32m[info]: user drgd3XW5Dmp6DLw7M | userAvailability: {"rDuzhNBNmKLWEHJZn":["Hand Silhouette"]} | can participate? true�[39m

2018-07-25T15:57:19.161428+00:00 app[web.1]: �[36m[cerebro]: Sending push notifications to drgd3XW5Dmp6DLw7M�[39m

2018-07-25T15:57:19.161488+00:00 app[web.1]: �[36m[cerebro]: {"title":"Event Body Mirror is starting!","text":"Your situation made you available to participate in Body Mirror!","iid":"rDuzhNBNmKLWEHJZn","route":"apiCustom/rDuzhNBNmKLWEHJZn/Hand Silhouette"}�[39m

2018-07-25T15:57:20.189824+00:00 app[web.1]: �[32m[info]: POST to api/geolocation: {"location":{"coords":{"speed":-1,"longitude":-87.64014906963257,"floor":null,"latitude":41.939711757587574,"accuracy":65,"altitude_accuracy":10,"altitude":183,"heading":-1},"extras":{},"is_moving":true,"odometer":216990.3,"uuid":"5B0233E5-CD88-46F6-B8F6-9B1EF2A187E5","activity":{"type":"on_foot","confidence":66},"battery":{"level":0.9200000166893005,"is_charging":false},"timestamp":"2018-07-25T15:57:19.856Z"},"userId":"drgd3XW5Dmp6DLw7M"}�[39m

2018-07-25T15:57:20.191282+00:00 app[web.1]: �[32m[info]: Location update for drgd3XW5Dmp6DLw7M: removing them from all availabilities and getting new affordances.�[39m

2018-07-25T15:57:20.242337+00:00 heroku[router]: at=info method=POST path="/api/geolocation" host=ce-platform.herokuapp.com request_id=956d3ccc-c47e-43af-ad02-95e177ef8a80 fwd="174.221.16.201" dyno=web.1 connect=1ms service=57ms status=200 bytes=1205 protocol=https

2018-07-25T15:57:20.698249+00:00 app[web.1]: �[32m[info]: Affordances successfully retrieved for drgd3XW5Dmp6DLw7M at 41.939711757587574, -87.64014906963257.�[39m

2018-07-25T15:57:20.709531+00:00 app[web.1]: �[32m[info]: triggering internal location update for: drgd3XW5Dmp6DLw7M�[39m

2018-07-25T15:57:20.722052+00:00 app[web.1]: �[32m[info]: user drgd3XW5Dmp6DLw7M cannot participate yet.�[39m

Solutions

  • Might need finer grained logic for when someone should not be available. For example, if someone is notified, but didn't participate, they should unavailble for a small amount of time (like 2 minutes) vs if you did successfully participate, the amount should be longer (like 1 hour)

Critical Incident: Hot Code Push of Client Files in Production Takes an Impossible Amount of Time

Problem

I've waited > 5 minutes for things to load the app, but I bet its downloading a WHOLE bunch of client assets.

Possible Solutions

How do we notify people to download the newest version of the app? Does sending a "notify" push, with a link to the bit.ly/install-ce work?

Change the loading screen so there is progress meter on how long its taking?

Can we manage hot code push more effectively? https://blog.meteor.com/meteor-hot-code-push-with-great-power-comes-great-responsibility-7e9e8f7312d5

  1. making sure the client side files are really small, and that the files that don't really need to be client side are put to other folders.
  2. managing which files we do hot code push. See nucleuside:live-update, which lets you hot code push specific files without reloading the whole app.

POLISH: App should be renamed to something other than `ce-platform`

Primary Steps

http://www.amarendrasingh.com/tutorial/rename-xcode-9-project-completely-with-pods-and-bridging-header/2/

Extra Steps

CollectiveExperiencesEnterpriseExport.sh:

#!/bin/bash
xcodebuild clean \
    -workspace CollectiveExperiences.xcworkspace/ \
    -scheme CollectiveExperiences

xcodebuild \
    -workspace CollectiveExperiences.xcworkspace \
    -scheme CollectiveExperiences \
    -archivePath build/CollectiveExperiences.xcarchive \
    archive

xcodebuild \
  -exportArchive \
  -archivePath build/CollectiveExperiences.xcarchive \
  -exportOptionsPlist exportOptions.plist \
  -exportPath CollectiveExperiences-export

Had to use "+" to find the NewName equivalent. Then used "-" to remove the OldName version
screen shot 2018-08-25 at 2 13 31 am

There was an extra OldName.a file, so I made it optional? Not sure if this was neccessary.
screen shot 2018-08-25 at 2 15 18 am

Had to change OldName -> NewName in pods-release.xcconfig and pods-debug.xcconfig
screen shot 2018-08-25 at 2 22 50 am

Had to change OldName -> NewName in Compilesources.
by looking for old references to plugin sources grep -r ce-platform/Plugins ., going into the file vim CollectiveExperiences.xcodeproj/project.pbxproj and then changing every instance to the NewName :s/ce-platform/CollectiveExperiences/g
screen shot 2018-08-25 at 2 27 48 am

Modify Fixtures to Demo Experience Capability

Idea from Haoqi at the end of Spring 2016: We should have a set of experiences that demo the capability of the API, like how D3.js has a bunch of demos on their homepage.

We could set these as the fixtures so that on server start you get a variety of experiences that touch all the existing functionality.

Number of Submissions for a need sometimes exceeds situation.number defined in the experience

I've seen 3 or 4 submissions created, when situation number is 2.

Look for when submissions are updated

[info] Submissions DB Changed sometimes gets printed 3 times or 4 times

The issue in inserting extra submissions, and with new _ids, happens along these chains of funcitons

adminUpdatesForRemovingUsersToIncidentEntirely
adminUpdatesForRemovingUsersToIncident
->  _removeUsersFromAssignmentDb
----> checkIfNeedFailed
------> addEmptySubmissionsForNeed gets called, and adds needNumber submissions everytime

My question is when should 1) be called, 2) what does need failed mean, 2) why delete needs and recreate them? 3) why add empty submissions if so?

  • checkIfNeedFailed gets called twice, since _removeUsersFromAssignmentDb gets called multiple times, since admintUpdatesForRemovingUsersToIncident

error with uploading images

get the error message: 'Can't get executor for query { files_id: ObjectId('5a07798f6ce25b0800871962'), n: { $gte: 0 } }'

"Loading..." on home screen

It seems like the home screen is waiting on some subscription that isn't loading, causing the "Loading..." message to display permanently.

Repro: Logout and go to home screen, create a new account and go to home screen

need solution to graphicsmagick on production

docker image doesn't have graphicsmagick on it, so right now each time we need to do

$ docker exec -it ce-platform apt-get update
$ docker exec -it ce-platform apt-get install graphicsmagick -y

which sucks. Also, I had to dump our old db for this work so need to restore that at some point

Collection activity data through Background Location/Activity plugin, but not leveraging it.

  1. Since its already being sensed, why not add it in?

The obstacle it would overcome right now, is that many people were getting notified while in a car. So it would potentially cut down the false-positive rate (based on the anecdotes)

This gets logged currently, from the background location package. Its a matter of capturing the JSON output, and storing it in the user's affordances, and updating the detector building blocks to include is_moving or in_vehicle, etc.

Explore storing callbacks and detectors as functions in Mongo

I believe that MongoDB supports the storage of functions directly in the collections (see https://stackoverflow.com/questions/36466462/storing-functions-in-mongodb-in-different-collections), which would allow us to store callbacks and detectors there and not need to eval them within the progressor or the detector evaluation.

This is quite minor, but it may be easier to maintain code by building it this way rather than the string eval we do currently.

Rewrite Spooky Storytime Experiences

See: createNewExperiences.js

/* FIXME: Experiences are not workable, as the detector ids have changed
 * TODO: Write a storytime construction helper / macro which can generate different versions of storytime structure

Cannot read property _id of null

This is being called on the participate and result templates occasionally. Seems to be as a result of some needed subscription refactoring (namely this.data is undefined) -- this happens specifically when navigating back from results to participate.

Remake testing detectors with Yelp v3

Detectors in imports/api/Testing/testingconstants.js should be re-written using the new categories for Yelp v3. I think the best time to do this will be after Ryan finishes up with Affinder's transition, but note that we will not be able to test once the endpoints shut down on June 30, 2018.

Turn GPS coords into Names of Cities

affordanceaware is already giving us city names through the Weather API. Although "Dexter, US" is not really all that helpful. "Dexter, MI, US" would be more helpful.

'pressure': 993.1, 'sea_level': 1026.16, 'grnd_level': 993.1, 'humidity': 42, 'temp_kf': 0}, 'weather': [{'id': 500, 'main': 'Rain', 'description': 'light rain', 'icon': '10n'}], 'clouds': {'all': 76}, 'wind': {'speed': 3.56, 'deg': 93.0067}, 'rain': {'3h': 0.07}, 'sys': {'pod': 'n'}, 'dt_txt': '2018-08-01 00:00:00'}, {'dt': 1533092400, 'main': {'temp': 294.387, 'temp_min': 294.387, 'temp_max': 294.387, 'pressure': 993.11, 'sea_level': 1026.03, 'grnd_level': 993.11, 'humidity': 55, 'temp_kf': 0}, 'weather': [{'id': 800, 'main': 'Clear', 'description': 'clear sky', 'icon': '01n'}], 'clouds': {'all': 0}, 'wind': {'speed': 3.02, 'deg': 125}, 'rain': {}, 'sys': {'pod': 'n'}, 'dt_txt': '2018-08-01 03:00:00'}, {'dt': 1533103200, 'main': {'temp': 290.214, 'temp_min': 290.214, 'temp_max': 290.214, 'pressure': 991.97, 'sea_level': 1024.93, 'grnd_level': 991.97, 'humidity': 81, 'temp_kf': 0}, 'weather': [{'id': 801, 'main': 'Clouds', 'description': 'few clouds', 'icon': '02n'}], 'clouds': {'all': 24}, 'wind': {'speed': 0.65, 'deg': 148.002}, 'rain': {}, 'sys': {'pod': 'n'}, 'dt_txt': '2018-08-01 06:00:00'}, {'dt': 1533114000, 'main': {'temp': 288.559, 'temp_min': 288.559, 'temp_max': 288.559, 'pressure': 991.54, 'sea_level': 1024.75, 'grnd_level': 991.54, 'humidity': 83, 'temp_kf': 0}, 'weather': [{'id': 800, 'main': 'Clear', 'description': 'clear sky', 'icon': '01n'}], 'clouds': {'all': 0}, 'wind': {'speed': 1.3, 'deg': 234.005}, 'rain': {}, 'sys': {'pod': 'n'}, 'dt_txt': '2018-08-01 09:00:00'}, {'dt': 1533124800, 'main': {'temp': 291.467, 'temp_min': 291.467, 'temp_max': 291.467, 'pressure': 991.28, 'sea_level': 1024.46, 'grnd_level': 991.28, 'humidity': 78, 'temp_kf': 0}, 'weather': [{'id': 800, 'main': 'Clear', 'description': 'clear sky', 'icon': '01d'}], 'clouds': {'all': 0}, 'wind': {'speed': 1.81, 'deg': 250.508}, 'rain': {}, 'sys': {'pod': 'd'}, 'dt_txt': '2018-08-01 12:00:00'}, {'dt': 1533135600, 'main': {'temp': 299.573, 'temp_min': 299.573, 'temp_max': 299.573, 'pressure': 991.28, 'sea_level': 1024.12, 'grnd_level': 991.28, 'humidity': 55, 'temp_kf': 0}, 'weather': [{'id': 800, 'main': 'Clear', 'description': 'clear sky', 'icon': '01d'}], 'clouds': {'all': 0}, 'wind': {'speed': 3.22, 'deg': 291.504}, 'rain': {}, 'sys': {'pod': 'd'}, 'dt_txt': '2018-08-01 15:00:00'}, {'dt': 1533146400, 'main': {'temp': 302.461, 'temp_min': 302.461, 'temp_max': 302.461, 'pressure': 990.39, 'sea_level': 1023.1, 'grnd_level': 990.39, 'humidity': 40, 'temp_kf': 0}, 'weather': [{'id': 801, 'main': 'Clouds', 'description': 'few clouds', 'icon': '02d'}], 'clouds': {'all': 12}, 'wind': {'speed': 5, 'deg': 298.504}, 'rain': {}, 'sys': {'pod': 'd'}, 'dt_txt': '2018-08-01 18:00:00'}, {'dt': 1533157200, 'main': {'temp': 302.447, 'temp_min': 302.447, 'temp_max': 302.447, 'pressure': 989.7, 'sea_level': 1022.34, 'grnd_level': 989.7, 'humidity': 34, 'temp_kf': 0}, 'weather': [{'id': 803, 'main': 'Clouds', 'description': 'broken clouds', 'icon': '04d'}], 'clouds': {'all': 76}, 'wind': {'speed': 5.36, 'deg': 269.007}, 'rain': {}, 'sys': {'pod': 'd'}, 'dt_txt': '2018-08-01 21:00:00'}], 'city': {'id': 4990797, 'name': 'Dexter', 'coord': {'lat': 42.3384, 'lon': -83.8886}, 'country': 'US', 'population': 4067}}}

Separate out composition from CE Engine

CE Platform should be the execution engine alone while another tool exists for OCE composition. This tool may include Affinder and other features to interact with Collective Narratives

some things that would be nice in the future

  • show that a photo is loading in results page
  • if a user's location hasn't updated in a while remove them from availability
  • send notifications to open/close app in the morning/evening to restart location tracking

Packages need updating

Specifically, cerebro and location-engine have some issues, but we need to audit for 1.3 compatibility and proper imports.

Starting meteor for fake_jennie branch errors

Unable to resolve some modules:

  "babel-runtime/helpers/typeof" in           
/Users/ryan/NUDelta/ce-platform/imports/ui/pages/api_custom.js (web.browser)
  "babel-runtime/helpers/createClass" in      
/Users/ryan/NUDelta/ce-platform/imports/api/cerebro/cerebro-core.js (web.browser)
  "request" in                                
/Users/ryan/NUDelta/ce-platform/imports/api/locations/affordances.js (web.browser)
  "photoswipe/dist/photoswipe.min" in         
/Users/ryan/NUDelta/ce-platform/imports/ui/pages/api_custom_results.js
(web.browser)
  "photoswipe/dist/photoswipe-ui-default.min" in
/Users/ryan/NUDelta/ce-platform/imports/ui/pages/api_custom_results.js
(web.browser)
                                              
If you notice problems related to these missing modules, consider running:
                                              
  meteor npm install --save babel-runtime request photoswipe
                                              
                                              
Unable to resolve some modules:

  "babel-runtime/helpers/objectDestructuringEmpty" in
/Users/ryan/NUDelta/ce-platform/server/debugFunctions.js (os.osx.x86_64)
  "request" in                                
/Users/ryan/NUDelta/ce-platform/imports/api/locations/affordances.js
(os.osx.x86_64)
  "babel-runtime/helpers/createClass" in      
/Users/ryan/NUDelta/ce-platform/imports/api/cerebro/cerebro-core.js (os.osx.x86_64)
                                              
If you notice problems related to these missing modules, consider running:
                                              
  meteor npm install --save babel-runtime request
                                              
=> Errors prevented startup:                  
   
   While processing files with fourseven:scss (for target web.browser):
   /client/main.scss: Scss compiler error: File to import:
   {}/node_modules/photoswipe/src/css/main.scss not found in file:
   /Users/ryan/NUDelta/ce-platform/{}/client/main.scss
   
   
=> Your application has errors. Waiting for file change.

Unit Tests for Bugs Fixed in the Half Half PR

From a previous PR, we should capture these changes and make sure these fixes are guarded by tests.

Fixes to Cerebro Server:

  • Progressor [progressor.js] now imports methods like notify and adminUpdates [progressorHelpers.js] which were being called in this file, but were failing before here. Now, people are notified after an experience is finished (notify) and people's participation now is recorded in the appropriate places (adminUpdates)

Suggested Test Cases:

it('should notify all participants after experience has ended')

// covered by end-to-end test
it('should remove the incident from active incidents in users profile')

// covered by end-to-end test
it('should add the incident to past incidents in users profile')

// ??? - not sure about current functionality
it('should remove the uid from the availability for that incident, since they are not eligible after participating')

it('should remove the uid from the assignment for that incident')

it('should set users profile to last participated to pretty recently')

Integrate Affordance Aware

CE currently makes a query to Affordance Aware, which is a Flask app running on another Heroku server.

To make the system easier to maintain, Affordance Aware should be integrated directly into CE. This would require a bit of re-writing code into Javascript, but since its mostly requests it shouldn't be too bad.

Location Spy isn't working

/admin/location doesn't work and there are way too many locations in the locations db (e.g. duplicates from the same person and from people who don't exist anymore)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.