- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
let suffix = '';
if (search) {
if (filters.length) {
suffix = ' found:';
} else {
suffix = ' found';
}
} else {
if (filters.length) {
suffix = ' found:';
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
let suffix = '';
if (search) {
if (filters.length) {
suffix = ' found:';
} else {
suffix = ' found';
}
} else {
if (filters.length) {
suffix = ' found:';
}
}
Когда не уверен, нужно двоеточие или нет.
+1
// NextViewController.swift
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
NSUserDefaults.standardUserDefaults().setInteger(indexPath.row, forKey: "Selected offense")
let offense: NSDictionary = self.offenses.objectAtIndex(indexPath.row) as NSDictionary
let id: Int = offense.objectForKey("id") as Int
let title: String = offense.objectForKey("title") as String
NSUserDefaults.standardUserDefaults().setInteger(id, forKey: "Selected offense id")
NSUserDefaults.standardUserDefaults().setObject(title, forKey: "Selected offense title")
}
// PreviousViewController.swift
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
hideKeyboard()
tableView.reloadData()
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let kCellIndetifier: String = "NewOffenseCell"
var cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier(kCellIndetifier, forIndexPath: indexPath) as UITableViewCell
if cell == nil {
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: kCellIndetifier)
}
cell.text = NSUserDefaults.standardUserDefaults().stringForKey("Selected offense title")
cell.font = UIFont.systemFontOfSize(20)
return cell
}
Реализуем колбэки *лицорука*
+1
<?php
error_reporting(0);
ini_set('display_errors', '0');
mb_internal_encoding('UTF-8');
header('Access-Control-Allow-Origin: *');
header('Content-Type: text/html; charset=utf-8');
$string=mb_strtolower(trim($_REQUEST['q']));
$string=str_replace('#', 'sharp', $string);
$string=str_replace('++', 'plusplus', $string);
preg_match_all('/(\w+)/u', str_replace('_', '', $string), $matches);
$words=$matches[1];
$bad=array();
$good=array();
foreach($words as $word){
if(mb_strpos($word, 'java')!==false || mb_strpos($word, 'джав')!==false || mb_strpos($word, 'ява')!==false){
if(mb_strpos($word, 'script')===false && mb_strpos($word, 'скрипт')===false){
$bad[]='Java';
}
}
if(mb_strpos($word, 'python')!==false || mb_strpos($word, 'питон')!==false || mb_strpos($word, 'пайтон')!==false){
$bad[]='Python';
}
if(mb_strpos($word, 'perl')!==false || mb_strpos($word, 'перл')!==false || mb_strpos($word, 'пёрл')!==false){
$bad[]='Perl';
}
if(mb_strpos($word, 'cplusplus')!==false || mb_strpos($word, 'сplusplus')!==false || mb_strpos($word, 'cpp')!==false){
$bad[]='C++';
}
if(mb_strpos($word, 'csharp')!==false || mb_strpos($word, 'сsharp')!==false || mb_strpos($word, 'сишарп')!==false || mb_strpos($word, 'сшарп')!==false){
$bad[]='C#';
}
if($word=='c' || $word=='си' || $word=='сях'){
$bad[]='C';
}
if(mb_strpos($word, 'haskel')!==false || mb_strpos($word, 'хаскел')!==false){
$bad[]='Haskell';
}
if(mb_strpos($word, 'pascal')!==false || mb_strpos($word, 'паскал')!==false){
$bad[]='Pascal';
}
if(mb_strpos($word, 'delphi')!==false || mb_strpos($word, 'delfi')!==false || mb_strpos($word, 'делф')!==false || mb_strpos($word, 'дельф')!==false){
$bad[]='Delphi';
}
if(mb_strpos($word, 'assembler')!==false || mb_strpos($word, 'asm')!==false || mb_strpos($word, 'ассемблер')!==false || mb_strpos($word, 'асм')!==false){
$bad[]='Assembler';
}
if(mb_strpos($word, 'ruby')!==false || $word=='руби' || mb_strpos($word, 'рубист')!==false || mb_strpos($word, 'рубях')!==false){
$bad[]='Ruby';
}
if(mb_strpos($word, '1c')!==false || mb_strpos($word, '1с')!==false || mb_strpos($word, '1ц')!==false){
$bad[]='1C';
}
if(mb_strpos($word, 'dart')!==false || mb_strpos($word, 'дарт')!==false){
$bad[]='Dart';
}
if(mb_strpos($word, 'linux')!==false || mb_strpos($word, 'линукс')!==false || mb_strpos($word, 'линух')!==false || mb_strpos($word, 'ubunt')!==false || mb_strpos($word, 'убунт')!==false || mb_strpos($word, 'debian')!==false || mb_strpos($word, 'дебиан')!==false || mb_strpos($word, 'freebsd')!==false || mb_strpos($word, 'фрибсд')!==false){
$bad[]='Linux';
}
if(mb_strpos($word, 'unix')!==false || mb_strpos($word, 'nix')!==false || mb_strpos($word, 'юникс')!==false || mb_strpos($word, 'юних')!==false){
$bad[]='Unix';
}
if(mb_strpos($word, 'jvm')!==false || mb_strpos($word, 'жвм')!==false){
$bad[]='JVM';
}
if(mb_strpos($word, 'jsharp')!==false){
$bad[]='J#';
}
if(mb_strpos($word, 'jplusplus')!==false){
$bad[]='J++';
}
if(mb_strpos($word, 'git')!==false || mb_strpos($word, 'гит')!==false){
if(mb_strpos($word, 'hub')===false && mb_strpos($word, 'хаб')===false && mb_strpos($word, 'lab')===false && mb_strpos($word, 'лаб')===false){
$bad[]='Git';
}
}
if(mb_strpos($word, 'svn')!==false || mb_strpos($word, 'свн')!==false){
$bad[]='SVN';
}
if(mb_strpos($word, 'postgres')!==false || mb_strpos($word, 'постгр')!==false || mb_strpos($word, 'pg_')!==false){
$bad[]='PostgreSQL';
}
if(mb_strpos($word, 'composer')!==false || mb_strpos($word, 'композер')!==false){
$bad[]='Composer';
}
if(mb_strpos($word, 'bower')!==false || mb_strpos($word, 'бовер')!==false || mb_strpos($word, 'бауэр')!==false || mb_strpos($word, 'боуэр')!==false){
$bad[]='Bower';
}
if(mb_strpos($word, 'node')!==false || mb_strpos($word, 'ноде')!==false || mb_strpos($word, 'нода')!==false){
$bad[]='NodeJS';
}
if(mb_strpos($word, 'php')!==false || mb_strpos($word, 'пхп')!==false || mb_strpos($word, 'пых')!==false || mb_strpos($word, 'пэхапэ')!==false || mb_strpos($word, 'похапэ')!==false || mb_strpos($word, 'пехапе')!==false || mb_strpos($word, 'похапе')!==false || mb_strpos($word, 'эйч')!==false || mb_strpos($word, 'пшп')!==false){
$good[]='PHP';
}
if(mb_strpos($word, 'mysql')!==false || mb_strpos($word, 'мускул')!==false || mb_strpos($word, 'майскул')!==false){
$good[]='MySQL';
}
if(mb_strpos($word, 'windows')!==false || mb_strpos($word, 'виндовс')!==false || mb_strpos($word, 'шинд')!==false || mb_strpos($word, 'винд')!==false){
$good[]='Windows';
}
}
+1
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
string pswdGen(int quantity) {
srand(time(0));
char chars[] = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890@\#\$\%\&\-\+\!\/\_"; // Символы, из которых будет состоять пароль
string password;
for(int i = 0; i < quantity; i++) {
password += chars[rand() % (sizeof(chars)/sizeof(*chars))]; // Добавить рандомный символ из списка в пароль
}
return password;
}
int main() {
int charNo;
cout << "How many characters do you want in the password?" << endl;
cin >> charNo;
cout << "Your new password is: " << pswdGen(charNo) << endl;
return 0;
}
Генерит произвольные пароли. Говно?
+1
http://faqs.org.ru/progr/c_cpp/cfaqrus.htm
1.14: Ну а если честно, на какой-нибудь реальной машине используются
ненулевые внутренние представления нулевых указателей или разные
представления для указателей разных типов?
О: Серия Prime 50 использует сегмент 07777, смещение 0 для нулевого
указателя, по крайней мере, для PL/I. Более поздние модели используют
сегмент 0, смещение 0 для нулевых указателей С, что делает
необходимыми новые инструкции, такие как TCNP (проверить нулевой
указатель С), которые вводятся для совместимости с уцелевшими
скверно написанными С программами, основанными на неверных
предположениях. Старые машины Prime с адресацией слов были печально
знамениты тем, что указатели на байты (char *) у них были большего
размера, чем указатели на слова (int *).
Серия Eclipse MV корпорации Data General имеет три аппаратно
поддерживаемых типа указателей (указатели на слово, байт и бит), два
из которых - char * и void * используются компиляторами С. Указатель
word * используется во всех других случаях.
Некоторые центральные процессоры Honeywell-Bull используют код 06000
для внутреннего представления нулевых указателей.
Серия CDC Cyber 180 использует 48-битные указатели, состоящие из
кольца (ring), сегмента и смещения. Большинство пользователей
(в кольце 11) имеют в качестве нулевых указателей код 0xB00000000000.
Символическая Лисп-машина с теговой архитектурой даже не имеет
общеупотребительных указателей; она использует пару <NIL,0> (вообще
говоря, несуществующий <объект, смещение> хендл) как нулевой
указатель С.
В зависимости от модели памяти, процессоры 80*86 (PC) могут
использовать либо 16-битные указатели на данные и 32-битные указатели
на функции, либо, наоборот, 32-битные указатели на данные и 16-битные
- на функции.
Старые модели HP 3000 используют различные схемы адресации для байтов
и для слов. Указатели на char и на void, имеют, следовательно,
другое представление, чем указатели на int (на структуры и т.п.),
даже если адрес одинаков.
Более поздние модели используют сегмент 0, смещение 0 для нулевых указателей С, что делает необходимыми новые инструкции, такие как TCNP (проверить нулевой указатель С), которые вводятся для совместимости с уцелевшими скверно написанными С программами, основанными на неверных предположениях.
Делать специальную инструкцию в процессоре для криво написанного сишного кода. Какой багор!
+1
copy(v) char *v; { /* copy ctokn to v */
char *p;
p=ctokn;
while( *v++ = *p++ );
}
compare(v) char *v; { /* compare ctokn with v */
char *p;
for( p=ctokn; ; ++p ){
if( *p != *v++ ) return( 0 );
if( *p == 0 ) return(1);
}
}
int *yalloc(n){ /* allocate n+1 words from vector mem */
int *omem;
omem = mem;
mem =+ n+1;
if(mem-mem0 >= memsiz) error("memory overflow");
return(omem);
}
aryfil( v, n, c ) int *v,n,c; { /* set elements 0 through n-1 to c */
int i;
for( i=0; i<n; ++i ) v[i] = c;
}
union( a, b, c ) int *a, *b, *c; {
/* set a to the union of b and c */
/* a may equal b */
/* return 1 if c is not a subset of b, 0 otherwise */
_REGISTER int i, x, sub;
sub = 0;
for( i=0; i<tbitset; ++i ){
x = b[i] | c[i];
if( x != b[i] ) sub=1;
a[i] = x;
}
return( sub );
}
prlook( pp ) int *pp;{
int j;
pp = pp->lset;
if( pp == 0 ) printf("\tNULL");
else {
printf(" { " );
for( j=1; j<=nterms; ++j ){
if( (pp[j>>4]>>(j&017) )&01 != 0 ) printf( "%s ", symnam(j) );
}
printf( "}" );
}
}
https://github.com/eunuchs/unix-archive/blob/master/PDP-11/Trees/V6/usr/source/yacc/source/y1.c
https://www.tuhs.org//Archive/Distributions/Research/Dennis_v6/v6src.tar.gz
Для любителей обмазываться несвежим сишкокодом. Research Unix
+1
// Non-constant constant-expressions in C++
// http://b.atch.se/posts/non-constant-constant-expressions/
// The Implementation
constexpr int flag (int);
template<class Tag>
struct writer {
friend constexpr int flag (Tag) {
return 0;
}
};
template<bool B, class Tag = int>
struct dependent_writer : writer<Tag> { };
template<
bool B = noexcept (flag (0)),
int = sizeof (dependent_writer<B>)
>
constexpr int f () {
return B;
}
int main () {
constexpr int a = f ();
constexpr int b = f ();
static_assert (a != b, "fail");
}
Note: clang incorrectly shows the wrong behavior, a workaround is available in the appendix.
+1
// https://habr.com/post/417027/
// Как я стандартную библиотеку C++11 писал или почему boost такой страшный
// https://github.com/oktonion/stdex/blob/1472fd5e2f5e0d10a136518631055c3aad2e1cfd/stdex/include/thread.hpp#L51
template<class R, class T1>
struct _function_traits<R(*)(T1)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T1 argument_type;
};
template<class R, class T1, class T2>
struct _function_traits<R(*)(T1, T2)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T2 arg2_type;
};
template<class R, class T1, class T2, class T3>
struct _function_traits<R(*)(T1, T2, T3)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T2 arg2_type;
typedef T3 arg3_type;
};
template<class R, class T1, class T2, class T3, class T4>
struct _function_traits<R(*)(T1, T2, T3, T4)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T2 arg2_type;
typedef T3 arg3_type;
typedef T4 arg4_type;
};
template<class R, class T1, class T2, class T3, class T4,
class T5>
struct _function_traits<R(*)(T1, T2, T3, T4, T5)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T2 arg2_type;
typedef T3 arg3_type;
typedef T4 arg4_type;
typedef T5 arg5_type;
};
template<class R, class T1, class T2, class T3, class T4,
class T5, class T6>
struct _function_traits<R(*)(T1, T2, T3, T4, T5, T6)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T2 arg2_type;
typedef T3 arg3_type;
typedef T4 arg4_type;
typedef T5 arg5_type;
typedef T6 arg6_type;
};
template<class R, class T1, class T2, class T3, class T4,
class T5, class T6, class T7>
struct _function_traits<R(*)(T1, T2, T3, T4, T5, T6, T7)>
{
typedef R result_type;
typedef T1 arg1_type;
typedef T2 arg2_type;
typedef T3 arg3_type;
typedef T4 arg4_type;
typedef T5 arg5_type;
typedef T6 arg6_type;
typedef T7 arg7_type;
};
...
> На дворе был 2017 год! Уже C++ 17 активно вводился в GCC, clang, Visual Studio, везде был decltype (since C++ 11), constexpr (since C++ 11, но существенно доработан), модули уже почти на подходе, хорошее время было. Я же находился на работе и с некоторым неодобрением смотрел на очередной Internal Compiler Error в своем Borland C++ Builder 6.0, а так же на множество ошибок сборки с очередной версией библиотеки boost. Думаю, теперь вы понимаете, откуда взялась эта тяга к велосипедостроению. У нас использовался Borland C++ Builder 6.0 и Visual Studio 2010 под Windows, g++ версии 4.4.2 или ниже под QNX и под некоторые unix системы. От MacOS мы были избавлены, что несомненно было плюсом. Ни о каких других компиляторах (под C++ 11 в том числе) речи даже быть не могло по соображениям, которые мы оставим за пределами данной статьи.
> «А что там может быть на столько сложного» — закралась мысль в мой измученный попытками завести boost под старый-добрый builder мозг. «Мне всего то нужно type_traits, thread, mutex, возможно chrono, nullptr было бы еще неплохо.» — рассудил я и принялся за работу.
+1
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка,
ПоступлениеТоваровУслуг.Дата,
ПоступлениеТоваровУслуг.Контрагент,
ПоступлениеТоваровУслуг.Организация,
ДополнительныеСведения.Значение КАК ДатаВозврата
ПОМЕСТИТЬ втДокументы
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ПО ПоступлениеТоваровУслуг.Ссылка = ДополнительныеСведения.Объект
ГДЕ
ДополнительныеСведения.Значение ЕСТЬ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПоступлениеУслугПрочихАктивов.Ссылка,
ПоступлениеУслугПрочихАктивов.Дата,
ПоступлениеУслугПрочихАктивов.Контрагент,
ПоступлениеУслугПрочихАктивов.Организация,
ДополнительныеСведения.Значение
ИЗ
Документ.ПоступлениеУслугПрочихАктивов КАК ПоступлениеУслугПрочихАктивов
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ПО ПоступлениеУслугПрочихАктивов.Ссылка = ДополнительныеСведения.Объект
ГДЕ
ДополнительныеСведения.Значение ЕСТЬ NULL
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втДокументы.Ссылка КАК Ссылка,
втДокументы.Дата КАК Дата,
втДокументы.Контрагент,
втДокументы.Организация,
втДокументы.ДатаВозврата
ИЗ
втДокументы КАК втДокументы
ГДЕ
втДокументы.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
И втДокументы.Ссылка.Проведен
И втДокументы.ДатаВозврата ЕСТЬ NULL
{ГДЕ
втДокументы.Контрагент.*,
втДокументы.Организация.*}
УПОРЯДОЧИТЬ ПО
Дата,
Ссылка
Охуительная оптимизация запроса временными таблицами, а ведь на первый взгляд даже не говнокод
+1
public static final int CURENT_MILLENIUM = 2000; //must be changed in year 3000
public int year;
public void setYear(String year) {
if (Integer.valueOf(year) < 100) {
year = String.valueOf(CURENT_MILLENIUM + Integer.valueOf(year)).toString();
}
this.year = Integer.valueOf(year);
}