1

Has anyone tried Mastodon yet? For those who don't know it's a federated, distributed and (currently) technology-orientated social network (well, rather a group of interoperable social networks) that's fully open source and ad-free. I've been impressed so far but as with every new network, whether it flies or not will depend on how many people join, contribute and keep the ball rolling.

0

I am not a lawyer, but I believe that if you 'port' software from one language to another, you're creating a derivative work and the original licence applies. However (from Wikipedia):

The code base of Netlib was written at a time when computer software was not yet considered merchandise. Therefore, no license terms or terms of use are stated for many programs. Before the Berne Convention Implementation Act of 1988 (and the earlier Copyright Act of 1976) works without an explicit copyright notice were public domain software. Also, most of the Netlib code is work of US government employees and therefore in the public domain.[3][4] While several packages therefore don't have explicit waiver/anti-copyright statements, for instance the SLATEC package has an explicit statement.

As you have created the ports of libraries that are in the public domain, I'd suggest that a Creative Commons licence makes most sense. I noticed on several netlib pages that attribution is requested, so CC-BY might be most suitable (crediting both the original authors and you), or CC-0 if that's not required.

0

Yes, that sounds like a good use case and it's quite easy to set up a reasonable demo in Neo4J.

create
    (Frank:Member {name:'Frank'}),
    (Julian:Member {name: 'Julian'}),
    (Amanda:Member {name: 'Amanda'}),
    (Claire:Member:Admin {name: 'Claire'}),
    (Susie:Member {name: 'Susie'}),
    (Dolly:Member:Admin {name: 'Dolly'}),

(Frank)-[:HAS_CHATTED_TO]->(Amanda),
(Claire)-[:HAS_CHATTED_TO]->(Frank),
(Amanda)-[:HAS_CHATTED_TO]->(Susie),
(Susie)-[:HAS_NOT_CHATTED_TO]->(Dolly),
(Dolly)-[:HAS_NOT_CHATTED_TO]->(Frank),
(Frank)-[:IGNORES]->(Susie),
(Dolly)-[:IGNORES]->(Julian),
(Julian)-[:HAS_CHATTED_TO]->(Amanda)

Which results in this graph:

neo4j graph

Simple queries are straightforward, I'm no expert though and combining multiple conditions baffles me.

match (n:Member)-[r:HAS_CHATTED_TO]-(m) where n.name='Frank' return n as Frank,r,m

Results:

+---------------------------------------------------------------------------+
| Frank                  | r                      | m                       |
+---------------------------------------------------------------------------+
| Node[25]{name:"Frank"} | :HAS_CHATTED_TO[24] {} | Node[27]{name:"Amanda"} |
| Node[25]{name:"Frank"} | :HAS_CHATTED_TO[25] {} | Node[28]{name:"Claire"} |
+---------------------------------------------------------------------------+
2 rows
17 ms

Compiler CYPHER 3.1

Planner COST

Runtime INTERPRETED

+------------------+----------------+------+---------+------------------+----------------------------+
| Operator         | Estimated Rows | Rows | DB Hits | Variables        | Other                      |
+------------------+----------------+------+---------+------------------+----------------------------+
| +ProduceResults  |              1 |    2 |       0 | Frank, m, r      | Frank, r, m                |
| |                +----------------+------+---------+------------------+----------------------------+
| +Projection      |              1 |    2 |       0 | Frank -- m, n, r | {Frank : n, r : r, m : m}  |
| |                +----------------+------+---------+------------------+----------------------------+
| +Expand(All)     |              1 |    2 |       3 | m, r -- n        | (n)-[r:HAS_CHATTED_TO]-(m) |
| |                +----------------+------+---------+------------------+----------------------------+
| +Filter          |              1 |    1 |       6 | n                | n.name == {  AUTOSTRING0}  |
| |                +----------------+------+---------+------------------+----------------------------+
| +NodeByLabelScan |              6 |    6 |       7 | n                | :Member                    |
+------------------+----------------+------+---------+------------------+----------------------------+

Total database accesses: 16
Attachments Screen_Shot_2017-03-07_at_19_08_23.png 114.89 KB
1

A graph database alone isn't the right choice for a chat application. A message would be represented as an edge between two nodes (people) and too many edges will hurt performance.

Storing the actual social network portion of a chat app in one makes a lot of sense, though. It's the perfect use case for a graph database.

Something like OrientDB might make more sense. There's even a chat program in the use cases section of the documentation.

0

If you want to play 3d games or develop with Cuda/OpenCL, very. For browsing the web and 'normal' development, not so much.

Neither my MBP and XPS have one, both are lightweight and quiet, and both cope fine with a big external monitor.

Also, if you plan on running Linux on your laptop, drivers become an issue. Especially if your machine supports switching between onboard and GPU modes.

0

@pty: Good try, but it was a refurb (and I wanted new, the two year warranty at John Lewis is always hard to ignore), there was only one of them (I needed two) and they don't have any stock :-)

Haha yeah, it was such a good deal it was snapped up in hours

I'd have a higher-specced refurb over a brand new lower-spec machine every day of the week. Granted the 2 year warranty from John Lewis is a nice extra (they sell refurbs with the 2 year warranty too, by the way!)

0

I'd try somewhere like Microcenter, if you look at their clearance/open box section on the website there are some deals to be had. I don't know what your budget is, but this for $791 looks like it'll fit the bill. You'd have to see what's available in your local store though!

There seems to be a bit of anti-Dell rhetoric in here, but the XPS range is good, I prefer my XPS 13 over my MBP in some ways.

-1

True, and if she wants to continue and learn then fair play, and I hope she manages to build something great.

However, she's using a discontinued tool that outputs unmaintainable HTML, and developing her site clearly isn't her goal; letting people know about her jewelry (which looks fantastic, by the way Sanda) is.

Plus, as there's a products tab on her site, one would expect that some kind of 'web shop' is on the radar. That won't be doable in Webplus, and it's not the easiest thing to implement from scratch at the best of times.

-1

I'd suggest using something like SquareSpace for this kind of site, rather than attempting to build it yourself. It has an e-commerce module built-in and plenty of easy templates to choose from.

A note unrelated to the original question, when at 100% zoom, I can only see 2/3 of the page, I need to scroll right to see the whole thing (or zoom out to about 80%).

2

I've been following this with some interest. Bad practice to end with a verb?

I think the distinction is between an API and a web app. In a web app, /widgets/123/edit (obtained via a GET) should contain a form that allows you to edit Widget number 123. Submitting the form should send aPATCH to /widgets/123.

In the case of an API, you don't need an edit form so you can omit verbs from the route entirely.

0

It turned out that the load balancer was blocking non-GET/POST requests. It wasn't an Nginx problem after all!

This doesn't suprise me at all! :)

I actually imitated the /users/~ endpoint after LinkedIn's API, which does:

Yes, but LinkedIn's API is read only.

If Dazah's API allows you to update your profile then it definitely makes sense to split it. Allowing PUT or PATCH to work if the :user_id param is ~ but not if it's anything else adds inconsistency to the API and will add to the complexity either in your code or in your documentation.

Also, because the returned data probably differs despite having the same endpoint (as you expect to see a bit more data on your own profile compared to someone else's), the API in general is less predictable than if you used two disparate endpoints for interacting with profiles generally and viewing/modifying your own.