Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 4 years ago.
Improve this question
I'm trying to establish myself as an iPhone freelancer, and are currently negotiating with a startup about a bigger project. They have expressed that they want me to sign a non-competition agreement, so that I wouldn't be allowed to develop a similar product for companies in competition on the same geographical market. Needless to say, I don't really like this.
Is this a common practice? If so, how common? Would you sign it?
They're common. If you can get them to remove it, do so. It's never in your interest to have one. That said, they aren't terrible if they are narrowly scoped and of a reasonable time limit. You don't want one saying you cannot write any other iPhone apps. One saying you can't write the same sort of app is probably acceptable. Read the language and determine how broadly it can be viewed.
Whether you end up having to sign one or not depends largely on the power in the relationship. If you really need the work or if your skills can't command a lot of respect, you'll have to sign. If, on the other hand, you bring unique skills and the company really wants you, you have leverage and can likely get it removed.
I have signed a few of those. As others have said, I make sure that they are very narrow in scope .. i.e. I can not develop a 'clone' of the application for another company .. short of that, I don't sign them.
The other thing to consider is that a non compete is essentially a value-add on your part. You give them more value for their money by signing one. So, they should be compensating you a bit for whatever projects you CAN NOT do in the next 3 years due to signing the agreement in addition to the actual project cost.
Usually, when I remind a company of this, they forget about the non compete and are content with trusting my ethics + an NDA.
It's not uncommon, but make sure it has some sort of expiration specified. Once you get established in a particular field or market, it's quite likely you'll want to continue in that market.
It's very common especially if product that you going to develop will be innovative.
You have to decide to sign or not. I signed such a contract few times already.
NDA(non disclosure agreement). popular agreement that I have signed many times. Client has just one reason behind forcing developer to sign agreement is not to develop replica or sale same software to other client.
That's the truth and hence most client expect you to sign an agreement with few lines of terms with or without expiration date
Its common thing so you can sign it and start working on but make sure you read all terms thoroughly to skip counterfeit client
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 2 years ago.
Improve this question
I have a bot built in watson assistant with 150+ intents. Recently, clients complaint about performance of the bot, and dev team also found that intents conflicted with each other sometimes.
Then I searched for a solution online and read this article which is about workspace orchestration. And this sounds like a feasible solution.
So my question is, when should we consider using this approach? like the number of intents or the avg confidence score of intent classification?
Using an orchestration layer doesn't solve the fundemental problem. At the end of the day if you split the intents per two assistants they will still be conflicting... often it will make them even more conflicting as you effectively made one instance of Watson Assistant blind to the other one.
There are many ways to improve your assistant, some of them are built-in to the product and some might require more work.
Here is a list of resources to get you going:
There is in Watson Assistant a built-in feature to detect conflicting intents and help resolving them.
Here is one of many? blogs about it https://cobusgreyling.medium.com/how-to-resolve-intent-conflicts-with-ibm-watson-assistant-1ee5ee09587e
There is quite a few resources provided by Watson Assistant to help you increase the quality of your assistant, but the following blog guides through the most recommended approaches:
https://medium.com/ibm-watson/the-quickest-way-to-improve-intents-in-a-chatbot-44bad1f3a5fc
Finally you should get acquainted with these python notebooks which help with analyzing and improving your assistant
https://github.com/watson-developer-cloud/assistant-improve-recommendations-notebook
For solutions which may involve multiple subjects/topics, I mainly used and saw in use the router approach described in your link. For example, if your Chatbot can handle multiple subjects related to banking(Credit Cards, insurance, etc) each of those subjects can have a dedicated Watson Assistant skill. In front of those skills you should have the router one mentioned in your link which will be mainly used for identifying the user intent related to one of your subject's skills. In this skill you can publish as intents, all the example questions for that particular subject. In this way you can ensure that the subject recognition is always handled in this router skill. Also, in this skill you should consider maybe recognizing only intents which are hit with a high confidence(>0.8 for example). This will help you better recognize a subject, but you will need to ensure a proper training. The same intent confidence threshold mechanism can be applied for the intents which you need to recognize inside your subject skill.
This approach can help you better organize your skills and intents but it may become overwhelming in the case you only address one subject in your chatbot or if you have multiple subjects but with small number of intents.
Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I was just thinking of possible ways to go about temporary login systems. I was thinking having a bunch of your standard images with a jumbled up word and users type in the word. I would have a MySQL table where all the photos have a unique id, link and answer-key. that way the webpage just has to choose a random number the GET photo where id = random number. then compare what the user types in to the answer key of the photo.
I'm not currently trying to create this system, it seems very simple and I was just trying to think if it is a secure system that would work.
so my question really is, would there security risks with this, is it robust enough to keep out bots, would my site be destroyed 10 seconds after implementing it.
What you're describing sounds exactly like a CAPTCHA system. These are used widely to prevent bots from issuing automated requests against an interface. The problem is that it's hard to make images that a bot can't just interpret anyway.
Outsmarted: Captcha security not much of a gotcha is an article about some Stanford researchers who developed an image-recognition tool (which is not publicly available) to test captcha implementations:
Decaptcha was able to decode 66 percent of the Captchas used by Visa's Authorize.net payment site, 70 percent of Blizzard Entertainment's Captchas -- the company's games include World of Warcraft and Diablo -- and 25 percent of Wikipedia's. About one-fifth of Digg.com's Captchas and almost that many of CNN.com's were decodable.
The researchers recommended Google's reCAPTCHA as a much more effective system. You can add a reCAPTCHA widget to your own website. This would be safer and easier than trying to develop your own and find it to be too weak.
Short answer: No, it's not secure. If someone really wants to hack your system he can build his own database of image-word.
The key is to invest in security less than it will cost you if your system will be compromise, so I won't invest in a security system too much (it sounds like you don't really have a sensitive information to hide).
BUT, you have an easy & free solution. You can use reCaptcha, not only it's much more secured, you'll help digitize some useful information.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I am a college student keen to improve my Programming skills. I have two pathways to follow:
Contributing to OpenSource Projects
Solving puzzles at codechef.com
Which one should I follow?
A good programmer is one who cares about his or her ACE - Accuracy, Clarity, Effectiveness.
A good programmer cares about the Accuracy of code. The easy part is coding the "happy path" because this is always in the forefront of our minds when we design and write the code. But what about potential the exception paths that exist when presented with unexpected input and edge case behaviours of the chosen implementation provided? Care is shown by taking the time to think through all the code paths, investing time in testing, submitting the code for peer review, and having the willingness to accept other's suggestions and make changes when appropriate.
A good programmer cares about the Clarity of code. Whether the code is well structured, expressive, adheres to the Open-Closed Principle, the Single Responsibility Principle, the executing machine doesn't care one bit. But, these are all very important to the next programmer, or yourself, who has to read and understand your code at a later date in order to fix bugs, modify behaviours, or add features.
A good programmer cares about the Effectiveness of code. Does it satisfy all the constraints imposed on it? Not only performance and space constraints, but also aspects that make it acceptable to the end user, the demands on the development and testing timelines by your clients, boss, family. Professional software development is not a precise circumscribed task, like "calculate the determinant of an NxN matrix". It has many constraints and demands, and good programmers are mindful of all of these, and will do their best to manage the them, especially when there is not enough time to satisfy all constraints completely.
So! To answer your immediate question, Open Source or codechef, I'd say that being involved in an Open Source project provides much greater opportunities to practice being a good software developer. So go choose an Open Source project that you care about, and ACE it!
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
Cofundos is a project where you can pay for tasks to be completed in open-source programs. If a developer solves this task, he will earn the money. Is this a good way to push open-source software?
No.
Joel Spolsky has talked about the phenomenon of people doing for free what they would never do for pay in the context of contributing to sites like Stack Overflow. People have all sorts of reasons for doing things for free:
Helping out a friend or society.
Fame and recognition.
Hobby or passtime.
Building a resume.
Learning about the world around them.
When you offer money it either destroys the purpose of doing something ("It's not a hobby if I get paid—it's a job.") or reduces the intrinsic value of doing it ("I'm not helping out society—I'm helping out me."). The same is true for Open Source contributions.
People do get paid for Open Source work. But normally by companies who are using Open Source software and need certain features and fixes. Sometimes they are full time, but often it's just submitting a bug fix or feature so that it will be carried to the next release. But that happens because the project is useful to the company.
So a better way to "push" Open Source is to use Open Source. If a project is missing a feature, you'll need to add it yourself or find someone else who will. Any scheme that offers money for a feature directly will likely not work. And if the feature does get added, it'll be added by someone who wants to get paid rather than someone who wants better software.
Well if you absolutely need a new feature in a program and you can't contribute, then sure. Otherwise I don't see why you don't just do it. You'll learn more by doing it yourself.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
This is not a question with a precise answer (strictly speaking the answer would be best captured by a poll, but that functionality is not available), but I am genuinely interested in the answer, so I will ask it anyway.
Over the course of your career, how much time have you spent on greenfield development compared with brownfield?
Over the last 10 years I would estimate that I have spent 20% on greenfield and 80% on brownfield. Is this typical?
I think it's typical for professionals who deal with customers to spend more time in brownfield development. The reason is that customers typically aren't willing to throw out their existing software to adopt the "latest and greatest" (green) software.
Developers in research or academics, however, may be more likely to do greenfield development. Start-ups as well.
I think that your ratio 20:80 is representative of many/most developers. As to new development: if you are building software incrementally (Scrum, XP, etc) then one could argue that you spend almost all of your time in brownfield development. Except for the initial iteration/exploratory work, prototyping, even when you are building something new, you are already working on an established code base, refactoring and extending. So how much greenfield development is actually green?
Often the problem doesn't just boil down to brownfield vs greenfield. In some cases there is a valid opportunity for a hybrid greenfield/brownfield approach.
I have written an article called "Classic software mistakes: To Greenfield or Refactor Legacy Code" which discusses this exact subject and outlines a range of possible combinations then evaluates the consequences of each.
http://stepaheadsoftware.blogspot.com.au/2012/09/greenfield-or-refactor-legacy-code-base.html
What may surprise some people is that a non technical attribute, company size, will be a big determinant in the choice of strategy and the likelihood of success of that strategy.
Over the past decade or so, I've always worked on software that was used as the center of my company's business. (Both SaaS and a software product.) And while I've always come into the with an existing system (so brownfield), we've usually put out a ground-up redesign/rewrite (so greenfield.) So, to break to down:
about 60/40 brown/green for the big projects, in number
about 20/80 brown/green for the big projects, in time spent on them
and nearly 0/100 brown green for little side projects
So, that is seems to be the opposite of you. It is the nature of the companies I've sought out, and hence the projects. My software is our company's main product, and that means I work on the same code base for years, usually after having created it from scratch myself/ourselves.
And I like it that way.