{"id":19588293,"url":"https://github.com/keith-turner/mixer","last_synced_at":"2025-09-13T07:44:54.794Z","repository":{"id":143077959,"uuid":"129162170","full_name":"keith-turner/mixer","owner":"keith-turner","description":"Simple prototype for creating derived graphs from social network data using Deriggy and Fluo","archived":false,"fork":false,"pushed_at":"2018-04-12T23:00:50.000Z","size":85,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-18T02:58:11.863Z","etag":null,"topics":["fluo","graphs","java","social-graph","social-network-analysis"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keith-turner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-04-11T22:37:58.000Z","updated_at":"2018-04-12T23:00:51.000Z","dependencies_parsed_at":"2024-01-03T05:04:14.678Z","dependency_job_id":"62254090-71b6-4fd6-9963-cf3729bfb9b6","html_url":"https://github.com/keith-turner/mixer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/keith-turner/mixer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith-turner%2Fmixer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith-turner%2Fmixer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith-turner%2Fmixer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith-turner%2Fmixer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keith-turner","download_url":"https://codeload.github.com/keith-turner/mixer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keith-turner%2Fmixer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274935970,"owners_count":25376834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fluo","graphs","java","social-graph","social-network-analysis"],"created_at":"2024-11-11T08:12:11.045Z","updated_at":"2025-09-13T07:44:54.770Z","avatar_url":"https://github.com/keith-turner.png","language":"Java","funding_links":[],"categories":["Software"],"sub_categories":["Java"],"readme":"# Mixer\n\nPrototype for creating a derived graph by merging nodes from different social networks using\n[Deriggy] and [Fluo].  Building this on Fluo has two benefits.  First, Fluo enables handling of very large graphs that do not fit on a single machine.  Second, Fluo makes it possible to continuously recompute the derived graph as the source data changes. This prototype goes with the [talk](https://youtu.be/oqrjEexMLVE) given at the [Accumulo\nSummit](http://accumulosummit.com/) in 2017. \n\n## Running Mixer\n\nMixer is best explained by examples. To get started, Mixer has a shell that supports the following commands :\n\n```\n$ ./mixer.sh shell fluo.properties \n\u003ehelp\nCommands : \n\n\tfollow \u003cgraph\u003e \u003cuser id 1\u003e \u003cuser id 2\u003e\n\tunfollow \u003cgraph\u003e \u003cuser id 1\u003e \u003cuser id 2\u003e\n\talias \u003cgraph\u003e \u003cuser id\u003e \u003calias\u003e\n\tunalias \u003cgraph\u003e \u003cuser id\u003e\n\tlookup \u003cid\u003e\n\tload \u003cgraph\u003e \u003cfile\u003e\n\tsetattrs \u003cgraph\u003e \u003cid\u003e {\u003ckey\u003e=\u003cvalue\u003e}\n\tprint\n\thelp\n\texit|quit\n```\n\nInorder to run Mixer, a Fluo instance needs to be running.  The following command will start a single machine Fluo development instance.  After Fluo starts, a `fluo.properties` file containing connection information is created.  Wait for this file to exists before proceeding.\n\n```bash\n./mixer.sh mini \u0026\u003e mini.log \u0026\n```\n\nThe following adds edges to multiple social network graphs.  For example assume `tw` represents Twitter, then in the Twitter graph `bob1998` follows `bigjoe`.\n\n```bash\n$ ./mixer.sh shell fluo.properties \u003c\u003cEOF\nfollow tw bob1998 bigjoe\nfollow fb bjoe rob\nfollow tw bob1998 alice\nfollow gh joe42 alice\nfollow tw bob1998 susan71\nfollow fb suzy71 bob98\nfollow g+ susandoe robby\nfollow fb suzy71 bob98\nexit\nEOF\n```\n\nThe following visualizes the derived graph in the external query table.\n\n\n```bash\nsudo apt install graphviz\n```\n\n```bash\n./mixer.sh graphviz fluo.properties | neato -Tpng \u003e sgraph1.png; xdg-open sgraph1.png\n```\n\n![graph 1](images/sgraph1.png)\n\nThe following maps users in different social graphs into the derived graph.  For example the Twitter user `bob1998` and the Facebook user `bob98` are  mapped to `bob` in the derived graph. \n\n```bash\n$ ./mixer.sh shell fluo.properties \u003c\u003cEOF\nalias tw bob1998 bob\nalias tw bigjoe joe\nalias fb bjoe joe\nalias fb rob rob\nalias tw alice alice\nalias gh joe42 joe\nalias gh alice alice\nalias tw susan71 susan\nalias fb suzy71 susan\nalias fb bob98 bob\nalias g+ susandoe susan\nalias g+ robby rob\nexit\nEOF\n```\n\nAfter mapping the users, the derived graph looks much different.\n\n```bash\n./mixer.sh graphviz fluo.properties | neato -Tpng \u003e sgraph2.png; xdg-open sgraph2.png\n```\n\n![graph 2](images/sgraph2.png)\n\nThe visualization does not currently show attributes. The following shows an example of how\nattributes will automatically be mapped into the derived graph.\n\n```bash\n$ ./mixer.sh shell fluo.properties\n\u003elookup joe\n  joe \u003c- bob        followers=1,following=3,rawEdges=1\n  joe -\u003e alice      followers=2,following=0,rawEdges=1\n  joe -\u003e rob        followers=2,following=0,rawEdges=1\n\u003esetattrs tw bob1998 loc=TX\n\u003esetattrs fb bob98 bday=8/13\n\u003elookup joe\n  joe \u003c- bob        followers=1,following=3,loc=TX,bday=8/13,rawEdges=1\n  joe -\u003e alice      followers=2,following=0,rawEdges=1\n  joe -\u003e rob        followers=2,following=0,rawEdges=1\n\u003elookup alice\n  alice \u003c- bob        followers=1,following=3,loc=TX,bday=8/13,rawEdges=1\n  alice \u003c- joe        followers=1,following=2,rawEdges=1\n```\n\nThere are two interesting things happening here.  First, the attributes are mapped from the Twitter and Facebook users for bob into the derived graph.  Second, when this happens all of bob's neighbors in the derived graph are updated with the attribute information.  The same is\ntrue for the folllowing counts, when these change for a node all of its neighbors are updated \nin the query table.  The derived graph is computed in Fluo and exported to an Accumulo table for query.  Every time an edge, alias, or attribute changes the derived graph is updated.\n\nRemoving `fluo.properties` causes MiniFluo to stop.\n\n```bash\nrm fluo.properties\n```\n\n[Deriggy]: https://github.com/keith-turner/deriggy\n[Fluo]: https://fluo.apache.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeith-turner%2Fmixer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeith-turner%2Fmixer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeith-turner%2Fmixer/lists"}