ДействиеСценарий / Говнокод #7155 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
public function UiAnalyticVO()
		{
		}
		
		public function get ageGroup():String
		{
			var ageGroup:String;
// Данные о возрасте пользователя никогда не отправляются, важно только
// чтобы он был старше 18 (хз зачем).
// Возраст пользователя устанавливается 1 раз за всю жизнь приложения,
// даже если у него случится день Рождения - об этом приложение не
// узнает.
			if (_age)
			{
				ageGroup = _age < 18 ? "1":"2";
			}
			else
			{
				ageGroup = "0";//undefined age
			}
			return ageGroup;
		}
. . .
// эту функцию вызывают много раз в секунду
		protected function sendAnalytics(categoryType:String, evtType:String):void
		{
// жизненный цикл этого объекта - ровно пока не отработает эта функция, 
// потом он жертва мусорщика
			var analyticsVo:UiAnalyticVO = new UiAnalyticVO();
. . .

Тут прийдется немного нарпячь воображение, чтобы понять, что происходит. Kак бы много всего одновременно... (и даже больше, но для того, чтобы объяснить на сколько все плохо пришлось бы очень много постить. Я думаю, этого должно хватить :)

wvxvw wvxvw, (Updated )

Комментарии (8, +8)

ДействиеСценарий / Говнокод #7087 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
private function formatResponse( map:Dictionary ):String
		{
// В этой функции было больше строчек, я оставил только те, где используется map
			ha1_1.writeUTFBytes( map.username + ":" + map.realm + ":" + password );
			ha1_2.writeUTFBytes( ":" + map.nonce + ":" + map.cnonce );
			ha2.writeUTFBytes( "AUTHENTICATE:" + map[ "digest-uri" ] );
			b.writeUTFBytes( sha1 + ":" + map.nonce + ":" + map.nc + ":" + map.cnonce + ":" + map.qop + ":" + sha2 );
			return Hex.fromArray( b );
		}

		override public function handleChallenge( stage:int, challenge:XML ):XML
		{
			var decodedChallenge:String = Base64.decode( challenge );
			var challengeKeyValuePairs:Array = decodedChallenge.replace( /\"/g, "").split( "," );
			var challengeMap:Dictionary = new Dictionary();
			for each( var keyValuePair:String in challengeKeyValuePairs )
			{
				var keyValue:Array = keyValuePair.split( "=" );
				challengeMap[ keyValue[ 0 ] ] = keyValue[ 1 ];
			}

			var resp:XML = new XML( response );
			resp.setNamespace( DigestMD5.NS );

			if( !challengeMap.rspauth )
			{
				var responseMap:Dictionary = new Dictionary();
				responseMap.username = connection.username;
				responseMap.realm = challengeMap.realm ? challengeMap.realm : "";
				responseMap.nonce = challengeMap.nonce;
				responseMap.cnonce = new Date().time;
				responseMap.nc = "00000001";
				responseMap.qop = challengeMap.qop ? challengeMap.qop : "auth";
				responseMap[ "digest-uri" ] = "xmpp/" + ( challengeMap.realm ? challengeMap.realm : connection.domain );
				responseMap.charset = challengeMap.charset;
				responseMap.response = formatResponse( responseMap );

				var challengeResponse:String = "username=\"" + responseMap.username + "\"";
				if( challengeMap.realm ) challengeResponse += ",realm=\"" + responseMap.realm + "\"";
				challengeResponse += ",nonce=\"" + responseMap.nonce + "\"";
				challengeResponse += ",cnonce=\"" + responseMap.cnonce + "\"";
				challengeResponse += ",nc=" + responseMap.nc;
				challengeResponse += ",qop=" + responseMap.qop;
				challengeResponse += ",digest-uri=\"" + responseMap[ "digest-uri" ] + "\"";
				challengeResponse += ",response=" + responseMap.response;
				challengeResponse += ",charset=" + responseMap.charset;
				challengeResponse = Base64.encode( challengeResponse );

				resp.setChildren( challengeResponse );
			}

			return resp;
		}

Тут довольно много читать, но если вы не побоитесь и все же осилите, то откроете для себя еще один уголок прекрасного. Часть кода из первой функции вырезана т.как приниципиального значения не имела. Код явно переписан с чего-то похожего на Java человеком который ни разу не открыл маны по AS3.
Целиком обозреть бессмертное творение можно тут: http://fisheye.igniterealtime.org/browse/~raw,r=12385/sparkweb/trunk/SparkWeb2/src/org/igniterealtime/xiff/auth/DigestMD5.as

wvxvw wvxvw, (Updated )

Комментарии (5, +5)

ДействиеСценарий / Говнокод #6906 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
var q=0.15
var w=false
stroka.alpha=0
knopka.addEventListener(MouseEvent.MOUSE_OVER,qwe)
function qwe(e:MouseEvent){
w=true
}
knopka.addEventListener(MouseEvent.MOUSE_OUT,qwe2)
function qwe2(e:MouseEvent){
w=false
}
stage.addEventListener(Event.ENTER_FRAME,qw)
function qw(e:Event):void{
if(w==true){
 stroka.alpha+=q
}
if(w==false){
 stroka.alpha-=q
}
if(stroka.alpha>=1){
 stroka.alpha=1
}
if(stroka.alpha<=0){
 stroka.alpha=0
}
}

Поделка все-того же любителя ENTER_FRAME'а. На этот раз попытка сделать плавное появление/исчезновение объекта при наведении на него мышкой.

KirAmp KirAmp, (Updated )

Комментарии (9, +9)

ДействиеСценарий / Говнокод #6793 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
addEventListener(Event.ENTER_FRAME, function(e){clip.mov.apply(clip,[e])});

clip.mov = function(e:Event):void{
	if(!this.is_mov && !this.is_mov_end) return;
		this.ii++;
		if(this.ii == this.speed){
			this.clip.x = this.end_x;
			this.clip.y = this.end_y;
		if(this.is_mov_end){
  			this.is_mov = false;
  			this.is_mov_end = false;
		} else {
  			this.getNewCoord.apply(this);
		}
 	return;
	}
	this.clip.x = this.start_x + int((this.end_x - this.start_x)/this.speed)*this.ii + int(Math.random()*2)-1;
	this.clip.y = this.start_y + int((this.end_y - this.start_y)/this.speed)*this.ii + int(Math.random()*2)-1;
}

Дело было вечером, делать было нечего...
Здесь имеет место вызов функции с подменой this.

kyzi007 kyzi007, (Updated )

Комментарии (3, +3)

ДействиеСценарий / Говнокод #6729 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
var vremya=15
var tim=0
var FpS=24//ваше fps
var intarval=1
stage.addEventListener(Event.ENTER_FRAME,qwer)
function qwer(e:Event){
t+=interval
if(tim>vremya*FpS){
interval=0
trace("15 сукунд прошло!!!")
}
}

Как сделать 15-секундную задержку? анонимус подскажет!

KirAmp KirAmp, (Updated )

Комментарии (21, +21)

ДействиеСценарий / Говнокод #6725 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
for(var name:String in parameters) {
	postData = BOUNDARY(postData);
	postData = LINEBREAK(postData);
	bytes = 'Content-Disposition: form-data; name="' + name + '"';
	for ( i = 0; i < bytes.length; i++ ) {
		postData.writeByte( bytes.charCodeAt(i) );
	}
	postData = LINEBREAK(postData);
	postData = LINEBREAK(postData);
	postData.writeUTFBytes(parameters[name]);
	postData = LINEBREAK(postData);
}

Еще один очень простой способ решить проблему многобайтовых кодировок :)

wvxvw wvxvw, (Updated )

Комментарии (2, +2)

ДействиеСценарий / Говнокод #6694 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
override public function call(... rest):void
{
	var callname:String = rest[0];
	var paramsStr:String = "";
	
	for(var i:int = 1; i < rest.length; i++)
	{
		paramsStr += rest[i] + ((i == rest.length - 1) ? "" : ",");
	}
	
	ExternalInterface.call("page.appplicationToVideoPage", callname, paramsStr);
}

Все тот же автор продолжает говнореализацию встроенных функций и классов. (Особого внимания заслуживает говноархитектура предполагающая вызывать reflection API через reflection. Т.е. page.appplicationToVideoPage - это функция, которая парсит аргументы обратно, и вызывает функцию callname с параметрами полученными из paramsStr. Человека не устроил ExternalInterface, и он решил его тоже, через жопу, реализовать еще раз, средствами, естесственно ExternalInterface).

wvxvw wvxvw, (Updated )

Комментарии (3, +3)

ДействиеСценарий / Говнокод #6691 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
private function getListenerIndex(func:Function):Number
{
	var num:Number = -1;
	
	for(var i:int = 0; i < mouseWheelListeners.length; i++)
	{
		if(func == mouseWheelListeners[i])
		{
			num = i;
			break;
		}
			
	}
	return num;
}

public function addMouseWheelListener(subscriberFunc:Function):void
{
	if(getListenerIndex(subscriberFunc) == -1)
		mouseWheelListeners.push(subscriberFunc);
}

Отдельного внимания заслуживает тот факт, что человек решил, что индексов в массиве не будет больше чем максимальное цело 32-битное знаковое, и не меньше чем минимальное, а вернул все равно Number. (Для не разбирающихся в AS3 есть Array.indexOf(), метод который делает то, что делает getListenerIndex() в данном примере, только быстрее, и называется по-человечески. Но автор считает, что мануал написан для идиотов...)

wvxvw wvxvw, (Updated )

Комментарии (1, +1)

ДействиеСценарий / Говнокод #6641 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
function GetServerAddress( addressId )
{
    var name = "";
    // fill element
    rs = oConn.Execute( "SELECT * FROM Address WHERE Id="+addressId );
    var step = 0;
    while ( !rs.EOF )
    {
         if ( rs.Fields("Type").Value != 20 ) // отключаем участие названий регионов в формировании адреса
         {
              if( step>1 )
              {
                  name += ",";
              }

              if( step>0 )
              {
                  name += rs.Fields( "Name" ).Value;
              }

          }
          step++;
          rs = oConn.Execute( "SELECT * FROM AddressName WHERE Id=" + rs.Fields( "AddressName" ).Value );
     }

    return name;
}

Это ж какие надо иметь мозги, чтобы в одном вайле бегать по разным ресурсам?!

sdvn sdvn, (Updated )

Комментарии (6, +6)