Related
Closed. This question is not about programming or software development. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 6 days ago.
Improve this question
Dear dark network analysts, covert network lovers, sociologists with interests in secret societies, and practitioners of network analysis in police and in journalism,
This week, I am modeling nodal attacks on a well-known Italian mafia network in the United States, I received as a gift from a research team which managed to publish recently with Social Networks. Typically, in a node attacks paper, network scientists sequentially remove some element from the network and monitor a number of graph connectivity measures (e.g., Albert, Jeong & Barabási 2000). We have seen from the network literature the following attack strategies on covert networks:
target attacks, or attacks on most central actors (e.g., Xu and Chen 2008)
random attacks (e.g., Xu and Chen 2008)
bridge and broker attacks (e.g., Xu and Chen 2008)
hubs removal
What other original structural attacks on criminal networks could you think of? I am particularly interested in implementing node removal strategies which are being used in the police.
What innovations in nodal attacks could I immediately propose? We could attempt to remove entire micro structures from the dark network in some order and see what happens with its connectivity. Federico Varese and Diego Gambetta wrote extensively on the importance of the triad in criminal organizations (e.g., Gambetta 2000; Varese 2000) and the triad as a business (e.g., Chu 2000). Mark Lauchs wrote two papers on blowing the whistle in chains of corrupt transactions and how these chains sequentially fail (e.g., Lauchs et al. 2011, 2012). Mark Granovetter briefly sketched a few sociological remarks on market corruption and network corruption (Granovetter 2004). I guess his network argument could be applied to the removal of entire k-cores, n-clubs or n-cliques of corruption monopolies or oligopolies in the network market of organized crime.
triads
chains and certain paths
cliques
small ego networks
partial branches and hierarchies
k-cores
n-clubs
Furthermore, I have also been interested in monitoring murder in covert networks applying dreadful historically documented techniques of personnel removal utilized in mafias, gangs, terrorist networks, crime rings, and military organizations, such as:
astrological murder
alphabetical murder
black lists
kinship bloodshed violence, e.g., taxing with first sons in family
extinction of entire bloodlines, e.g., the witches in The Vampire Diaries with Nina Dobrev
eradication of entire crime families
Clearly these aren’t structural attacks, yet some of their motivations may hide network motives. Is there a movie called, The network murder? Regrettably, I only know Andrew Papachristos’ “Murder by structure,” (2009) a paper which was originally coined to me by the American sociologist Peter Bearman. Obviously, an original source for modeling network attacks could be chapter “Death” from Federico Varese’s Mafia Life (2018). The books features a number of original feuds and interclan wars in the mafia, which aren't necessarily network-based, yet they are tremendously smart economic-wise.
For the lazy math geeks out there who don't have time to read many books or review the voluminous Italian literature on the topic, I recommend going to the Italian mafia movies during the weekends.
References
Albert, R., Jeong, H., & Barabási, A. L. (2000). Error and attack tolerance of complex networks. Nature, 406(6794), 378-382.
Chu, Y. K. (2002). The triads as business. Routledge.
Gambetta, D. (2002). “Corruption: An analytical map.”
Granovetter, M. (2004). “The Social Construction of Corruption.” Department of Sociology.
Lauchs, M., Keast, R., & Chamberlain, D. (2012). Resilience of a corrupt police network: the first and second jokes in Queensland. Crime, law and social change, 57, 195-207.
Lauchs, M., Keast, R., & Yousefpour, N. (2011). Corrupt police networks: uncovering hidden relationship patterns, functions and roles. Policing & society, 21(1), 110-127.
Papachristos, A. V. (2009). Murder by structure: Dominance relations and the social structure of gang homicide. American journal of sociology, 115(1), 74-128.
Varese, F. (2000). “Pervasive corruption.” Economic crime in Russia, 99-111.
Varese, F. (2018). Mafia life: Love, death, and money at the heart of organized crime. Oxford University Press.
Xu, J., & Chen, H. (2008). The topology of dark networks. Communications of the ACM, 51(10), 58-65.
(google scholar, ameliorate the referencing whenever possible)
Currently, I am experimenting with removing entire crime families, blood lines and smaller network structures. This is also a brilliant way to improve the brainwaver package in R, which at present is somewhat limited (for my needs at least).
What's the difference between natural languages and programming languages in the context of their grammars?
Natural languages are considerably more flexible.
Also, natural languages often can't be fully described by a Context-Free Grammar. For example, in English, "respectively" clauses (along with a few other constructs) mess up the grammar. Granted, neither C# nor Java are context-free either (although this article claims to have a context-free grammar for early C#), but programming languages are much more likely to have a context-free grammar.
The biggest difference is that the grammars of natural languages all allow for ambiguity whereas programming languages have been carefully designed to avoid ambiguity. Consider the following statement (I unfortunately no longer recall the math textbook I originally read this example in):
Kevin saw John with the telescope in the park.
Who was using the telescope - John or Kevin? And which of them was in the park - Kevin, John, or the telescope? A few interpretations:
The telescope was in the park. John was using it. Kevin saw John there while he was using it.
John was in the park. Kevin used the telescope to watch John at the park.
The telescope was in the park. Kevin used it to see John.
Etc.
Programming languages are carefully designed to avoid you being able to write down sentences like that.
I greatly enjoyed Douglas Crockford's recent lecture series, particularly the talk which covered the history of programming languages. I'd like to learn about this subject in more detail.
Consider this question language agnostic. I'm not interested in books that teach programming. I'm interested in books which discuss decisions made during the design of one or more languages.
Following three are IMO the must-read books for any programming langauges junky :)
Project Oberon by Niklaus Wirth
Language Implementation Patterns by Terence Parr
Programming Language Pragmatics by Michael Scott
Every 15 years, the ACM puts on a History of Programming Languages conference (affectionately known as HoPL). The proceedings are of exceptionally high quality, and are available, unfortunately only behind the ACM paywall. (However, if you access them from a university, college or school IP address, you should be able to access them.)
For HoPL-III (2007), Guido van Rossum wanted to submit a paper about Python, but he wasn't able to meet the review requirements in time, so he published it in form of a blog instead.
Several presenters also published their papers for free, in addition to the official conference proceedings. Also, several presenters gave the same talk again, at a different venue. For example, Guy L. Steele, Jr. and Richard P. "Dick" Gabriel repeated their "50 in 50" talk (which, as you can imagine if you've ever seen a talk by Guy Steele or Dick Gabriel, is not really a talk, more like multimedia performance art crossed with poetry slam meets Broadway), which presents 50 programming languages in 50 words each.
As #Missing Faktor mentioned above, not only Project Oberon, but all of Niklaus Wirth's languages are tremendously well documented: Algol-60, Algol-X, Algol-W, Pascal, Modula-2, and Oberon.
Structure and Interpretation of Computer Programs. I have a print copy, but it's now available online for free:
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-4.html#%_toc_start
The Design and Evolution of C++
http://www2.research.att.com/~bs/dne.html
Programming Language Essentials
Rationale for the Design of the Ada Programming Language:
http://www.amazon.com/Rationale-Design-Programming-Language-Companion/dp/0521392675
Although the book discusses the original version of the language, it still makes interesting reading. For each design decision, rationale and discussion is included, both from the point view the programmer and compiler implementer.
"Architecture of Concurrent Programs", by the late Per Brinch Hansen, includes a good overview of the design and rationale for his Concurrent Pascal language, which added monitors (and other things) to his Sequential Pascal, a proper subset of Pascal.
The big thing missing from Sequential Pascal is pointers. However, given the restrictions intended to be placed on Sequential Pascal programs, everything you can do with a pointer you can also do with an array index, and in a more secure way, "secure" in the sense that it is impossible (and checked by the compiler!) to do illegal things.
Closed. This question is off-topic. It is not currently accepting answers.
Closed 11 years ago.
Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
Today I had a bad surprise learning about some implications of the GPL license, mainly that I couldn't use it as freely as I thought.
Now I know.
What else should I know, and more widely, what should every developer know about legal things like that?
You can separate employees, freelancers, open source projects contributors (etc.) or give a more broad answer.
Twelve Legal Considerations for Software Development
Software is copyrighted if it is made available to the general public. It is no longer necessary to put a copyright notice on the application or in the source code. The owner of the copyright is the author(s) or company paying the author(s).
The copyright of software can be assigned by the owner of the copyright, or it can be retained by the owner and the software can be licensed to the user or users by the owner.
Libraries used in development probably have restrictions in their use and distribution. GPL does not make a library public domain, nor does the fact that the library comes with a development platform. You should read and understand the license before you distribute your application. Some libraries require royalty payments, although this has become less common in recent years.
Software patent lawsuits are crap shoots. You should not, of course, knowingly violate a software patent. However, there is a small but real chance some company will sue you for violating their patent. This may happen even if you develop your software independently, you never heard of the patent, and the patent covers a technique that is intuitively obvious and almost completely unrelated to your software. There is not a lot you can do to avoid this, given the current USPTO policies, other than buy insurance. The good news is that patent trolls generally sue large companies with lots of money.
If you use an employee or freelancer to develop software, you should make it clear, in writing, who owns the copyright to the application, including the source code. Some freelancers and contract development companies consider the source code their own property, leaving the company dependent on the original developer(s). This is legal if it's in the development agreement.
If you have an employee who develops software "off the clock," you should make it clear who owns that software, and what kind of software the employee should be able to write and distribute outside of the company.
If you are an employee or freelancer developing software, you should make it clear who will own the copyright to your application, before you begin development. Also, you should know or clarify who owns software you write on your own time. Some companies have clauses in employment agreements claiming ownership to any software written by a developer during the period of employment, whether at home or at work. Many companies have non-compete clauses in employment agreements that restrict the software an employee can produce for distribution outside the company. Sometimes these restrictions are pretty broad.
A trademark is a name or symbol, not the software itself. If you distribute software, you should (a) make sure your application name and "mark" or design of the name is not "confusingly similar" with other applications, and (b) register your trademark. Date of first use is important in resolving conflicts, so you should document when the application is first used in commerce.
When you name an application, check for registered trademarks, but also check Google. An application with first use of the name may be able to take your name and trademark after your application is successful, even if they have not registered the trademark and you have.
When you use or sign a contract or agreement, make sure both parties understand it. In an employment agreement, mentioning any potentially sensitive areas up front can prevent a lot of problems later. In a development agreement, if both parties know who owns the source code, or who is responsible for upgrades, or who is responsible for maintenance, etc., going into the development project, then there is much less likelihood of a lawsuit after the application has been completed. In a distribution agreement, make sure the distributor understands the responsibilities and term of the agreement.
Every non-trivial application has bugs (or "design considerations" :-)). Any user agreement or distribution agreement should make it clear that you are not responsible for bug-free software, and you cannot be expected to fix all bugs. Make it clear that changes, fixes, and upgrades are made at the option (or best efforts) of the developer, and make it clear who pays for fixes and upgrades.
Even after you consult a lawyer about software development and distribution agreements, you should read agreements from other software companies and see what their lawyers came up with.
I am not a lawyer, and this is not legal advice.
When in doubt, contact a lawyer.
I'm no lawyer but over time I have gathered a few rules of thumb from legal people that you can use to save time:
GPL license is 'copy-left' or 'viral'. It means that any code that you write that depends on a GPL component must also be released under GPL. A good rule of thumb is that if you need a GPL component to compile your software, your software must be released under a GPL license.
You are not obliged to make your source available if you're not distributing your software. For example, if you run the software for internal purposes or on a web server you do not need to release the source. That is why Google doesn't need to release their software that use GPL libraries. It was a key contention point in GPL v3.
LGPL (Library or Lesser GPL) only requires you to GPL your own source code if you incorporate the LGPL-ed library in such a way that it becomes irreplaceable. Your own software do not need to be GPL if you only 'use' the library. Including header files and linking against a .dll/.so of the library is one of the ways you can 'use' LGPL-ed code without any obligations, except for the proper copyright notice.
BSD License (the Apache License is very similar) allows you to create commercial extensions of that use the open source component. That is why Apple chose FreeBSD over Linux as the kernel for OSX.
MPL is very commercial friendly because Netscape thought that they might make some money out of Mozilla at the time the license was written.
It often helps to contact the maintainer of the Open Source project. They are in the best position to advice you about the original intention of the license as well as their own views on open source. Sometimes maintainers are willing to release software under multiple licenses to help you out. Often they are not. Depends on the person who owns the copyright.
The KDE project has a handy matrix
I think Legal Guide to Web & Software Development by Stephen Fishman Attorney is what you're looking for.
Review
An amazing book! Answers nearly
every legal question you can imagine
and some you would have never thought
of. -- John Dvorak, PC Magazine
Covers every imaginable detail
important to such a rapidly growing
and intangible medium. -- Entrepreneur
This book passes my own personal test
for legal guides --with higher marks
than any other legal guide. -- Jeff
Duntemann, Editor, PC Techniques
Magazine
Product Description
Protect your rights, and your hard work!
The laws covering website and software
development are complex and confusing,
but if you don't untangle them, it
could cost you thousands of dollars in
attorneys' fees and lawsuits.
Fortunately, Legal Guide to Web &
Software Development decodes this
complex area of the law, thoroughly
and in reader-friendly English. It
also provides contracts, agreements
and legal forms on CD-ROM, with
step-by-step instructions for filling
them out, so you can protect your
software and website without paying a
lawyer's ransom.
Use Legal Guide to Web & Software
Development to learn:
what kind of legal protection you need
the strengths and limitations of each type of protection
how to avoid infringement
which provisions you need when drafting an agreement
how to obtain permission to use other people's materials
You'll find complete, step-by-step
instructions to draft:
employment agreements
contractor and consultant agreements
development agreements
license agreements
The 5th edition of Legal Guide to Web
& Software Development is completely
updated to provide the latest case law
and statutory revisions.
Some other suggestions :
Working for Yourself: Law & Taxes for Independent Contractors, Freelancers & Consultants (Same author).
Consultant & Independent Contractor Agreements (Same author).
Software Licensing Handbook by Jeffrey I. Gordon.
Practical Guide to Software Licensing for Licensees & Licensors by H. Ward Classen.
The Tech Contracts Pocket Guide: Software and Services Agreements for Salespeople, Contract Managers, Business Developers, and Lawyers by David Tollen.
If a freelancer or contractor: make sure you have good liability insurance and know what's covered under it.
For instance, mine doesn't cover liability for mistakes made in code that might expose credit card numbers. So I don't touch that stuff any more!
For employees : we should be able to give a first round of advice to your clients -- like can they/we use the component we want, in their application ?
For freelancers : we must be able to give strong advice to your clients ; and choose which components we can use for the applications we develop for them.
You course, your word is not as good as the advices a lawyer can get you ; but you can already help for a first round ; for instance, to say "we definitly can't use this because it would mean..."
In the end, the lawyer will know much about corner cases -- but if you can help a bit...
For OSS contributors : knowing some differences between free licences can matter if you care what people can do with your code (redistribute ? modify ? use it in commercial application ? use it in proprietary application ? )
One answer has asserted that the law is not like code. I disagree.
In the early days, IBM paid programmers by the instruction. (Someone I knew said he worked with a programmer who got rich this way. Apparently the guy didn't know how to use the machine's index register; he wrote a memory-zero routine that manually stored zero in each memory address.)
There was also a time (long ago) when lawyers were paid by the word. This helped to popularise practices such as addressing people as "the most highly esteemed such-and-such" and other verbosities.
I just read an answer on SO that said VB.NET 2008 still allows line numbers. You can still run pure DOS on a modern PC. And there is much truth to the joke that all COBOL programs are decended from a common ancestor by incremental changes. Backwards-compatibility, and "historical reasons", are rife in our field.
This is comparable to the realm of law. There are laws which make small (or big) changes to other laws. You've got a kind of dependency-hell. There are some ridiculous historical laws (in Hobart, Tasmania, it's illegal for a man to wear a woman's dress after sunset - because once upon a time, convicts would dress up as women and mug people) that nobody would dream of enforcing, just as there are some historical features in software that nobody uses anymore.
Laws often have unintended consequeuences (bugs!), get used in creative ways (hacks!), contain loopholes (security vulnerabilities!), some of which are intentional (backdoors!), get modified (patches!) or overturned (uninstallation!).
Yes, laws (unlike code) are subject to interpretation. But I think this is rather like code maintenance. It helps to adjust laws to new social norms.
To answer the question directly: every developer should know that law is rather like a ridiculously enormous software project that has been in development for hundreds of years. (Actually, each country has its own project, and they solve problems in different ways.) In theory, after reading a licence you will know what you can and can't do with your code. But if a competent programmer can't spot all the bugs in his code just by reading it, then what chance does a non-lawyer have of analysing the corner cases and grey areas of a legal document?
Like with software source code, you can usually get the gist of a legal document by reading it, but if you need to know something specific, ask a professional.
NOLO (I don't work for them) publishes a good set of legal how to books for the layman.
http://www.nolo.com/products/a-legal-guide-to-web-&-software-development-SFT.html
I would answer this in the same way that I would answer "what should every lawyer know about programming?" That is to say, know that there's no way you can possibly know the in-depth field well enough to do more than the simplest of things. Get an expert.
You should know the basic rights and obligations of the license you are going to use. It's not that hard, and even if there are plenty of them, you need to read carefully only those you are going to use or touch. Just read them, in most cases they are quite clear.
Anything else you could need, well, that depends. Patenting ? Trademarks ? If you need these things, chances are that you are in a company and have a legal department to do this for you.
I would always assume that the developers of a project want any software using their work to be released under the exact same licence. Read their FAQs and legal pages for more information and don't hesitate to contact the developers/maintainers if you are still unsure.
If you want help understanding the details of a licence agreement, talk to a lawyer.
Don't work in a country that has more lawyers than developers.
An extremely large percentage of all (U.S.) software patents are bogus, but you can't pay or wait for them to be invalidated.
If you want to use/develop open source software, use an existing license and don't modify it. Don't go near the borders of what the license is supposed to mean.
The name of a good IP lawyer.
6.If you have an employee who develops software "off the clock," you should make it clear who owns > that software, and what kind of software the employee should be able to write and distribute
outside of the company.
freedom of speech right as stated in most constitutions (esp. if devs make free s/w off-the-clock) can make such terms fail miserably in courts
The law is not like code. It is not a well cast set of steps and rules that can be unambiguously understood.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am looking for some good text books in the public domain, which could be used to teach computing to school kids aged (10-15). I couldn't get any googling for it. Can somebody out there point me to good links. If text books are not available any information on what is taught commonly to this age group as part of computing curriculum will be helpful.
"Computing" is an awfully broad topic. Do you mean teaching them how a computer works (like on the inside), or how to use computer applications (word processing/spreadsheet/internet), or how to program them? I think all three would be good topics for 10-15 year olds.
My dad, a computer engineer, taught me much of the above on my own around that age (of course, it depends upon how motivated your students are). Mostly it was through experimentation, and asking questions. I'll point out a few good resources that I went through when I was that age. While these books aren't public domain, they're not that expensive (you can purchase all the books I mention below for under $100US at the time of this answer, cheaper than a single college textbook; the movies you could try finding at your local library). Note some of these are from MS-DOS 3.x era of 10-12 years ago, but honestly, the basic concepts haven't changed that much. The IBM PC platform still has the same architechture, it's just been upgraded. Applications have changed though.
How a computer works
You might want to teach about all of the different parts in a modern computer tower by opening one up and explaining to them what each part is and does, and how they hook together. It doesn't even need to work, you just need to be able to show them stuff. A good, simple book that explains the parts of a computer is How Computers Work by Ron White. I believe there is also a Magic School Bus episode on this ("The Magic School Bus Gets Programmed", Episode 50 From Season 4).
After that you may want to explain about the startup process, and how the computer first turns on, and doesn't know anything. Then you could explain about how the BIOS chip finds all the various things hooked to the motherboard, and then uses the hard-drive to start the Operating System (Windows/OS X).
There are some interactive programs that describe how all of these things work, although I can't think of any off the top of my head. There was an old learning program called "What's in that Box" that I used, but it's so outdated now its useless.
If you have really motivated students, you may want to introduce them to the electronic foundations of the computer, and binary numbers and gates. A good (teacher level) introduction to these things is Charles Petzold's Code. You try explaining how computers talk about things using 1s and 0s. Also, there is a Bill Nye the Science Guy episode on this (Season 4, Episode 78).
How to use applications
Honestly, I'm really not sure what to tell you here, but I imagine you can find lots of tutorials on this if you google. Explaining Word, Excel, etc. to students is beneficial and I imagine widespread.
NB: Teach students how to touch-type at that age. I didn't learn how to touch-type until I was in middle of HS, and it was hard. By that time, I had already learned how to do stuff on computers and play games on the keyboard, and so had my fingers memorized to go to all the wrong spots. If you catch them early, they'll do well.
How to program
The way I learned how to program at
age 10 was this way using a language called BASIC (BTW, that
link gives lots of other ideas for
learning how to program at a young
age). I'm certain others will have
good answers on this too. A book that I used to learn from after that was QBasic by Example, that a computer bookstore owner gave to me when I was 12 from his throw-away pile. That was my programming bible, and I read it cover-to-cover.
Note, though, that some students will want to do "cool" things when learning how to program; admittedly, how I learned would not be classified as cool. My old computer science prof from undergrad is involved in a program with inner-city kids that teaches them how to program robots using a language called LOGO, Sun's SunSPOTS, and LEGO Mindstorms NXT (depending upon the class focus). You basically give commands to the robot and it does them, and you can watch the robot do what you told it to do. Very cool, and interactive. It can get them thinking about programming, and how its about telling the computer/robot what to do, and how you can be a "robot commander" or "computer commander." This is, essentially, what computer programmers do everyday.
The new children's show Cyberchase teaches critical thinking skills that are a foundation to programming skills.
Just some thoughts to get you started. I think many kids would appreciate a hands-on approach; most of those in the industry got started because of hands-on exposure and not rote book-learning. The above early education, along with some books, worked for me, most of that stuff I rattled off from memory.
Also check out Woz.org; Steve Wozniak (programmer/hardware engineer, designer of the Apple ][) now teaches grade school children computers.
Try How to Design Programs: An Introduction to Programming and Computing, by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi. The book uses a language called Scheme, which is freely available and designed to be used by students. The book is available online at www.htdp.org.
The book was designed to be used by high school and university introductory programming classes and is intentionally written to teach how to design a program, not just how to use the syntax of a particular programming language. It stresses things like how to design readable programs, thinking about the structure of your program before typing anything, and general programming concepts such as recursion and encapsulation.
Think Python would be my first choice for teaching programming. The book is free, python is free, and some really good IDE's are free - Stani's Python editor or Wing IDE 101. This provides a really good environment and set of resources for teaching programming to kids in that age range. If programming is a bit much for the younger kids, PyGame can be used to get simple graphics on the screen fast - and that is a great way to hold onto attention span.
EDIT: I just ran across a great book for introducing computer programming to kids (and other beginners): Hello World! Computer Programming for Kids and Other Beginners. This book uses Python as the programming language, and the projects are all simple games. Overall, this is a great book for introducing kids to computer programming.
In the UK schools tend to have some affiliation with Microsoft so:
Word
Excel
What is a network
Dinner-time Java class (if lucky)
What areas are you trying to focus? MIT open course ware offers a few good open texts on different programming languages - but doubtlessly intended for an older audience. I think that finding books specific to this age group on general computing will be a challenging task, but there are always good websites that the kids can explore addressing a variety of different topics.
As mentioned, unless you know the kids to be at a more advanced level (which many that age are now days) I'd focus on word processing, web use (searching & responsible surfing) and things of that nature. Googling "introduction to for kids" will often yield useful websites on things of such nature.
Check out Squeakland. It's specifically about computers & teaching.
Not a book, but could looks like a pretty good resource.
KidsDomain.com
The C# Yellow book by Rob Miles is a good and free resource to teach students C#. It is used by the Department of Computer Science in the University of Hull as the basis of the First Year programming course
For younger kids especially ToonTalk is an awesomely cool introduction to programming. It even does concurrent programming from the very beginning. ToonTalk teaches foundational principles while being extremely engaging with a 3D interface, animals to carry out computations and so on. I recommend it very highly!